好阿 連著上周感冒 這次換腸胃炎 爭油泥DER\o wo/
總之這周是用攝影機的視角
1. 在CodeBlocks開啟一個新的glut專案,將專案存在github中的2023graphicsa的資料夾中,並使用資料夾中final project/freeglut
2.修改程式碼
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void reshape(int w,int h)
{
glViewport(0,0,w,h);
float ar=w/(float)h;
glutPostRedisplay();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week15-2");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
}3.繼續修改程式碼
#include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glutSolidTeapot(0.3); glutSwapBuffers(); } void reshape(int w,int h) { glViewport(0,0,w,h);///視窗裡看到2D範圍 float ar=w/(float)h;///aspect ratio長寬比 glMatrixMode(GL_PROJECTION);///先切換到project矩陣 glLoadIdentity();///矩陣清空,成為單位矩陣 gluPerspective(60,ar,0.01,1000); glMatrixMode(GL_MODELVIEW);///做好後馬上切回model view矩陣 glLoadIdentity(); gluLookAt(0,0,1, 0,0,0, 0,1,0); glutPostRedisplay(); } int main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH); glutCreateWindow("week15-2"); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); }排版別再給我裂開了喔最後用找到的關節點去修改final project程式碼:#include <stdio.h> #include <GL/glut.h> #include "glm.h" GLMmodel*body=NULL; GLMmodel*head=NULL; GLMmodel*downarmL=NULL; GLMmodel*downarmR=NULL; GLMmodel*uparmL=NULL; GLMmodel*uparmR=NULL; GLMmodel*downlegL=NULL; GLMmodel*downlegR=NULL; GLMmodel*uplegL=NULL; GLMmodel*uplegR=NULL; int show[10] = {1,0,1,0,0,1,0,0,0,0}; int ID=2; void keyboard(unsigned char key,int x,int y){ if(key=='0') ID=0; if(key=='1') ID=1; if(key=='2') ID=2; if(key=='3') ID=3; if(key=='4') ID=4; if(key=='5') ID=5; if(key=='6') ID=6; if(key=='7') ID=7; if(key=='8') ID=8; if(key=='9') ID=9; glutPostRedisplay(); } FILE*fout=NULL; FILE*fin=NULL; float teapotX=0,teapotY=0; ///float angle=0,angle2=0,angle3=0; float angle[20]={}; void display() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix(); glScalef(0.2,0.2,0.2); if(body==NULL){ body=glmReadOBJ("model/body.obj"); head=glmReadOBJ("model/head.obj"); downarmR=glmReadOBJ("model/downarmR.obj"); downarmL=glmReadOBJ("model/downarmL.obj"); uparmL=glmReadOBJ("model/uparmL.obj"); uparmR=glmReadOBJ("model/uparmR.obj"); downlegL=glmReadOBJ("model/downlegL.obj"); downlegR=glmReadOBJ("model/downlegR.obj"); uplegL=glmReadOBJ("model/uplegL.obj"); uplegR=glmReadOBJ("model/uplegR.obj"); } if(ID==0) glColor3f(1,0,0); else glColor3f(1,1,1); if(show[0]) glmDraw(body, GLM_MATERIAL); if(ID==1) glColor3f(1,0,0); else glColor3f(1,1,1); if(show[1]) glmDraw(head, GLM_MATERIAL); if(ID==3) glColor3f(1,0,0); else glColor3f(1,1,1); if(show[3]) glmDraw(downarmL, GLM_MATERIAL); if(ID==4) glColor3f(1,0,0); else glColor3f(1,1,1); if(show[4]) glmDraw(uparmL, GLM_MATERIAL); glPushMatrix(); //glTranslatef(teapotX,teapotY,0); glTranslatef(-1.213333, +0.400000, 0); glRotatef(angle[5],0,0,1); glTranslatef(1.213333, -0.400000, 0); if(ID==5) glColor3f(1,0,0); else glColor3f(1,1,1); if(show[5]) glmDraw(uparmR, GLM_MATERIAL); glPushMatrix(); glTranslatef(-1.919999, +0.080000, 0); //glTranslatef(teapotX,teapotY,0); glRotatef(angle[2],0,0,1); glTranslatef(1.919999, -0.080000, 0); if(ID==2) glColor3f(1,0,0); else glColor3f(1,1,1); if(show[2]) glmDraw(downarmR, GLM_MATERIAL); glPopMatrix(); glPopMatrix(); if(ID==6) glColor3f(1,0,0); else glColor3f(1,1,1); if(show[6]) glmDraw(downlegR, GLM_MATERIAL); if(ID==7) glColor3f(1,0,0); else glColor3f(1,1,1); if(show[7]) glmDraw(downlegL, GLM_MATERIAL); if(ID==8) glColor3f(1,0,0); else glColor3f(1,1,1); if(show[8]) glmDraw(uplegL, GLM_MATERIAL); if(ID==9) glColor3f(1,0,0); else glColor3f(1,1,1); if(show[9]) glmDraw(uplegR, GLM_MATERIAL); glPopMatrix(); glColor3f(0,1,0); glutSolidTeapot(0.02); glutSwapBuffers(); } int oldX=0, oldY=0; void motion(int x,int y){ teapotX += (x-oldX)/150.0; teapotY -= (y-oldY)/150.0; angle[ID] += x-oldX; oldX = x; oldY = y; 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(fin==NULL) { fclose(fout); fin=fopen("file4.txt","r"); } fscanf(fin,"%f %f",&teapotX,&teapotY); display(); }*/ int main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH); glutCreateWindow("Week12"); glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(motion); glutKeyboardFunc(keyboard); glutMainLoop(); }很亂我知道 16周還會做最後一次總複習 加油
沒有留言:
張貼留言