期末作業的主題是一個會跳舞的機器人》
todo:1)期末作業 2)會跳舞的機器人 3)T-R-T關節旋轉 4)作業問題示範解說 5)臨時小考:T-R-T觀念
第一節課:
前半段先給我們看以前學長姐所做的期末作品
再來利用Window.zip的Transformation.exe跑出一個3D人偶模型 然後把人偶的手當作軸心懸轉
為了本周的臨時小考老師還是以最基本的茶壺作範例
語法:
#include <GL/glut.h>
void display()
{
GLfloat pos[]={0, 0, -1, 0};
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);//打光
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glFlush();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutCreateWindow("TRT");//小練習
glutDisplayFunc(display);
glutMainLoop();
}
第二節課:
正式進入今天的主題
首先依照慣例看了學長姊的影片
再來老師就要教我們怎麼使用關節做旋轉
#include <GL/glut.h>
float angle=0;
void display()
{
GLfloat pos[]={0, 0, -1, 0};
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);//打光
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.6, 0.2, 0);//final把旋轉物體掛在固定物體上(4)
glRotatef(angle, 0,0,1);//把整團對之間作旋轉(3)
glTranslatef(0.3, 0,0);//把茶壺往右移 茶柄變中間(2)
glutSolidTeapot(0.3);//一個茶壺(1)
glPopMatrix();
glutSolidTeapot(0.3);//body
glFlush();
}
void timer(int t)
{
glutTimerFunc(20, timer, t+1);
angle++;
glutPostRedisplay();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutCreateWindow("TRT");//小練習
glutDisplayFunc(display);
glutTimerFunc(20, timer, 0);
glutMainLoop();
}
再來老師要教一樣的東西 只是東西換成方塊 而且這是小考題目!!!
#include <GL/glut.h>
float angle=0;
void drawBody()//固定物體大小
{
glPushMatrix();
glScalef(1, 0.5, 0.5);
glutSolidCube(1);
glPopMatrix();
}
void drawArm()//旋轉物體大小
{
glPushMatrix();
glScalef(0.6, 0.3, 0.3);
glutSolidCube(1);
glPopMatrix();
}
void display()
{
GLfloat pos[]={0, 0, -1, 0};
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);//打光
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.5, 0.25, 0);//final把旋轉物體掛在固定物體上(4)
glRotatef(angle, 0,0,1);//對Z軸做旋轉
glTranslatef(0.3, 0,0);//把茶壺往右移 茶柄變中間(2)
drawArm();//一個方塊
glPopMatrix();
drawBody();//body
}
void timer(int t)
{
glutTimerFunc(20, timer, t+1);
angle++;
glutPostRedisplay();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutCreateWindow("TRT");//小練習
glutDisplayFunc(display);
glutTimerFunc(20, timer, 0);
glutMainLoop();
}
這些東西可以利用在期末作業的關節上
最後小葉老師教了進階的雙關節 並且可以手動!!!!!
一樣是利用剛剛的語法 只是加上了滑鼠跟多一個關節
#include <GL/glut.h>
float angle=0, oldX=0, oldY=0;
void drawBody()
{
glPushMatrix();
glScalef(1, 0.5, 0.5);
glutSolidCube(1);
glPopMatrix();
}
void drawArm()
{
glPushMatrix();
glScalef(0.6, 0.3, 0.3);
glutSolidCube(1);
glPopMatrix();
}
void display()
{
GLfloat pos[]={0, 0, -1, 0};
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);//打光
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.5, 0.25, 0);//final把旋轉物體掛在固定物體上(4)
glRotatef(angle, 0,0,1);//對Z軸做旋轉
glTranslatef(0.25, 0,0);//把茶壺往右移 茶柄變中間(2)
drawArm();//一個方塊
glPushMatrix();//多召喚一個移動方塊
glTranslatef(0.25, 0, 0);
glRotatef(angle, 0,0,1);
glTranslatef(0.25, 0,0);
drawArm();//一個方塊
glPopMatrix();
glPopMatrix();
drawBody();//body
glFlush();
}
void motion(int x, int y) //配合滑鼠移動
{
angle -= y - oldY;
oldY=y; oldX=x;
}
void mouse(int button, int state, int x, int y)
{
if(state==GLUT_DOWN) {oldX=x; oldY=y;}
}
void timer(int t)
{
glutTimerFunc(20, timer, t+1);
angle++;
glutPostRedisplay();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutCreateWindow("TRT");//小練習"
glutDisplayFunc(display);
glutTimerFunc(20, timer, 0);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
今天教的就是這樣瞜
沒有留言:
張貼留言