2023年5月24日 星期三

翁逸豪 Week15

 下載[data][win32],這次開啟 Projection.exe。這是鏡頭的顯示方式,分成3種

I . eye 以被拍攝者為中心,拿著鏡頭的人進行移動不旋轉

II . center 以拍攝者為中心,拿著鏡頭的人不移動只旋轉

III . up 拍攝者與被拍攝者均不移動,由鏡頭自己轉動

最後就是鏡頭的基礎數值設定

fovy 鏡頭廣角的度數

aspect 鏡頭的長寬比

zNear 鏡頭最近顯示的位置

zFar 鏡頭最遠顯示的位置


Week15-1

glOrtho(-ar*3, ar*3, -1*3, 1*3, -100, +100);


gluPerspective(60, ar, 0.01, 1000);


Week15-2

利用課堂前所學來調整攝影機

void reshape(int w, int h)

{

    glViewport(0, 0, w, h);

    float ar = w / (float) h;


    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    gluPerspective(60, ar, 0.01, 1000);


    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

    gluLookAt(0, 0, 1, 0, 0, 0, 0, 1, 0);


    glutPostRedisplay();

}

看起來胖胖的茶壺

float eyeX = 0, eyeY = 0;

void motion(int x, int y)

{

    eyeX = (x-150.0)/150.0;

    eyeY = (150.0-y)/150.0;

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

    gluLookAt(eyeX, eyeY, 1, 0,0,0, 0,1,0);

    glutPostRedisplay();

}

移動鏡頭位置

Final-Project

個別轉動關節

float angle[20] = {};

void display()

{

    glPushMatrix();

            glTranslatef(1.339999, 0.373333, 0);

            glRotatef(angle[2], 0, 0, 1);

            glTranslatef(-1.339999, -0.373333, 0);

            ///glTranslatef(teapotX,teapotY,0);


            if(ID==2)glColor3f(1,0,0);

            else glColor3f(1,1,1);

            if(show[2]) glmDraw(uparmL, GLM_MATERIAL);


            glPushMatrix();

                glTranslatef(1.879999, 0.080000, 0);

                glRotatef(angle[3], 0, 0, 1);

                glTranslatef(-1.879999, -0.080000, 0);

                ///glTranslatef(teapotX,teapotY,0);


                if(ID==3)glColor3f(1,0,0);

                else glColor3f(1,1,1);

                if(show[3]) glmDraw(lowarmL, GLM_MATERIAL);


            glPopMatrix();


        glPopMatrix();

}

void motion(int x,int y)

{

    teapotX += (x - oldX)/150.0;

    teapotY -= (y - oldX)/150.0;

    angle[ID] += (x - oldX);

    oldX = x;

    oldY = y;

    ///angle = x;

    printf("glTranslatef(%f, %f, 0);\n", teapotX, teapotY);

    glutPostRedisplay();

}

void mouse(int button, int state, int x, int y)

{

    if(state==GLUT_DOWN){

        oldX = x;

        oldY = y;

        ///angle = x;

    }

    display();

}

臂膀與手臂個別旋轉

紀錄旋轉的位置

void keyboard(unsigned char key, int x, int y)

{

    {

        if(fout==NULL)fout = fopen("motion.txt","w");

        for(int i=0;i<20;i++)

        {

            fprintf(fout,"%.2f ",angle[i]);

        }

        fprintf(fout,"\n");

    }

    else if(key=='r')

    {

        if(fin==NULL) fin = fopen("motion.txt","r");

        for(int i=0;i<20;i++)

        {

            fscanf(fin,"%f",&angle[i]);

        }

        glutPostRedisplay();

    }

    glutPostRedisplay();

}

S存旋轉位置,R讀旋轉位置

旋轉位置存讀


沒有留言:

張貼留言