WEEK05
week05-0
開啟https://jsyeh.org/3dcg10網頁,下載data和windows,解壓縮後把data丟進windows裡,開啟Transformation,複習上週的移動-旋轉,旋轉-移動
week05-1 TRT_translate_rotate
拿上週week04-1的程式碼來用
將旋轉軸改成z軸,再複製成 紅色 綠色
#include <GL/glut.h>
float angle = 0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1,0,0);///紅色
glPushMatrix();
glRotatef(angle,0,0,1);///改成0,0,1 z軸
glTranslatef(0.8,0,0);///移到右邊
glutSolidTeapot( 0.3 );
glPopMatrix();
glColor3f(0,1,0);///綠色
glPushMatrix();
glTranslatef(0.8,0,0);
glRotatef(angle*1.5,0,0,1);
glutSolidTeapot( 0.3 );
glPopMatrix();
glutSwapBuffers( );
angle++;
}
int main(int argc, char *argv[ ])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week05");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop( );
}
glPushMatrix();
glTranslatef(0.05,0.31,0); ///(3) 最後,把手掛到肩上
glRotatef(angle,0,0,1); ///(2)轉動
glTranslatef(0.05,-0.31,0); ///(1)把關節放正中心
myDrawObject(1); ///畫手臂
glPopMatrix();
接下來講解下周考試題目,以奇異博士手上拿著寶石為例,drawHand()可以畫手,但它的旋轉中心沒有放在正中心,所以(1)先把關節移到正中心 (2)上面再加上轉動,小心轉動軸不要寫錯,角度的正負號也不能寫錯 (3)最後,最上面,就簡單的把會轉動的手掛到手軸上
#include <GL/glut.h>
float angle = 0;
void myCube()///改函式
{
glPushMatrix();
glScalef(0.5,0.2,0.2);///調大小
glutSolidCube(1);///正方塊
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);///白色的
glutSolidCube(1);///身體
glPushMatrix();
glTranslatef(0.5,0.5,0);///掛到右上角去
glRotatef(angle,0,0,1);///轉它
glTranslatef(0.25,0,0);///往右移動0.25讓關節再正中心
glColor3f(0,1,0);///綠色的
myCube();///改函式
glPopMatrix();
glPushMatrix();
glTranslatef(-0.5,0.5,0);///掛到左上角去
glRotatef(angle,0,0,1);///轉它
glTranslatef(0.25,0,0);///往右移動0.25讓關節再正中心
glColor3f(0,1,0);///綠色的
myCube();///改函式
glPopMatrix();
glutSwapBuffers( );
angle++;
}
int main(int argc, char *argv[ ])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week05");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop( );
}




沒有留言:
張貼留言