2021年3月31日 星期三

yun_電腦圖學筆記week06

今天上課教了新的程式碼,老師教了手臂如何轉動
#include<GL/glut.h> float angle=0;///TODO: void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空 glPushMatrix(); glRotatef(angle,0,0,1);///TODO:旋轉,對z軸轉 glutSolidCube(1);///TODO:畫個方塊 glPopMatrix(); glutSwapBuffers(); angle++; } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("08160093"); glutDisplayFunc(display); glutIdleFunc(display);///TODO:閒閒有空時,就重畫畫面 glutMainLoop(); }首先先學會轉動,這個在後面可以當作身體

方塊會旋轉


#include<GL/glut.h> float angle=0;///TODO: void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空 glPushMatrix(); glRotatef(angle,0,0,1);///對中心轉動 glScalef(0.5,0.1,0.1);///細長的 glColor3f(0,0,1);藍色的 glutSolidCube(1);///TODO:畫個方塊 glPopMatrix(); glutSwapBuffers(); angle++; } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("08160093"); glutDisplayFunc(display); glutIdleFunc(display);///TODO:閒閒有空時,就重畫畫面 glutMainLoop(); }
會出現藍色方塊繼續旋轉,這個當作手臂


#include<GL/glut.h> float angle=0;///TODO: void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空 glPushMatrix(); glRotatef(angle,0,0,1);///TODO:旋轉,對z軸轉 glTranslated(0.25,0,0);///把關節移動到中心 glScalef(0.5,0.1,0.1);///細長的 glColor3f(0,0,1); glutSolidCube(1);///TODO:畫個方塊 glPopMatrix(); glutSwapBuffers(); angle++; } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("08160093"); glutDisplayFunc(display); glutIdleFunc(display);///TODO:閒閒有空時,就重畫畫面 glutMainLoop(); }


我們把手臂的旋轉軸從中心移動到手臂一側上面
#include<GL/glut.h> float angle=0;///TODO: void hand() { glPushMatrix(); glScalef(0.5,0.1,0.1);///細長的 glColor3f(0,0,1);///藍色的 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);///(3)整個移動到右上角掛著 glRotatef(angle,0,0,1);///(2)對中心轉動 glTranslatef(0.25,0,0);///(1)把關節移動到中心 hand();///細長的藍色小手 glPopMatrix(); glutSwapBuffers(); angle++; } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("08160093"); glutDisplayFunc(display); glutIdleFunc(display);///TODO:閒閒有空時,就重畫畫面 glutMainLoop(); }白色方塊當作身體,藍色方塊我們當作手臂放在右上角








#include<GL/glut.h> float angle=0;///TODO: void hand() { glPushMatrix(); glScalef(0.5,0.1,0.1);///細長的 glColor3f(0,0,1);///藍色的 glutSolidCube(1);///方塊 glPopMatrix(); } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空 glColor3f(1,1,1);glutSolidCube(0.5);///大身體 glPushMatrix();///右半邊 glTranslatef(0.25,0.25,0);///(3)整個移動到右上角掛著 glRotatef(angle,0,0,1);///(2)對中心轉動 glTranslatef(0.25,0,0);///(1)把關節移動到中心 hand();///細長的藍色小手 glPushMatrix(); glTranslatef(0.25,0,0);///(3)往右拉過去 glRotatef(angle,0,0,1);///(2)對中心轉動 glTranslatef(0.25,0,0);///(1)把關節移動到中心 hand();///下手臂 glPopMatrix(); glPopMatrix(); glutSwapBuffers(); angle++;///TODO: } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("08160093"); glutDisplayFunc(display); glutIdleFunc(display);///TODO:閒閒有空時,就重畫畫面 glutMainLoop(); }



接著我們畫出機器人的下手臂


#include<GL/glut.h> float angle=0;///TODO: void hand() { glPushMatrix(); glScalef(0.5,0.1,0.1);///細長的 glColor3f(0,0,1);///藍色的 glutSolidCube(1);///方塊 glPopMatrix(); } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空 glColor3f(1,1,1);glutSolidCube(0.5);///大身體 glPushMatrix();///右半邊 glTranslatef(0.25,0.25,0);///(3)整個移動到右上角掛著 glRotatef(angle,0,0,1);///(2)對中心轉動 glTranslatef(0.25,0,0);///(1)把關節移動到中心 hand();///細長的藍色小手 glPushMatrix(); glTranslatef(0.25,0,0);///(3)往右拉過去 glRotatef(angle,0,0,1);///(2)對中心轉動 glTranslatef(0.25,0,0);///(1)把關節移動到中心 hand();///下手臂 glPopMatrix(); glPopMatrix(); /////----- glPushMatrix();///左半邊 glTranslatef(-0.25,0.25,0);///(3)整個移動到左上角掛著 glRotatef(-angle,0,0,1);///(2)對中心轉動 glTranslatef(-0.25,0,0);///(1)把關節移動到中心 hand();///細長的藍色小手 glPushMatrix(); glTranslatef(-0.25,0,0);///(3)往左拉過去 glRotatef(-angle,0,0,1);///(2)對中心轉動 glTranslatef(-0.25,0,0);///(1)把關節移動到中心 hand();///下手臂 glPopMatrix(); glPopMatrix(); glutSwapBuffers(); angle++;///TODO: } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("08160093"); glutDisplayFunc(display); glutIdleFunc(display);///TODO:閒閒有空時,就重畫畫面 glutMainLoop(); }






接著右邊的手做好了,我們改變一下座標位置和旋轉妯,把左手也做出來















































































沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...