2022年5月10日 星期二

諺哥的電腦圖學筆記week12

Week12 電腦圖學 Week12 2022-05-10 1. 主題: T-R-T (移動、旋輚、移動)對特定軸轉動 2. 作業: T-R-T 3. 下週考試: T-R-T 對特定軸轉動

0.移動和轉動。

(1) T:移動,x左右,y上下,z前後。

(2) R:轉動,物件轉向。

(3) 練習:120.125.80.50/GL/opengl_TRT_demo.html

1.TR,先移後轉,轉動軸會在物件中心。

2.RT,先轉後移,轉動軸會在座標中心。

3.TRT,移轉移。

(1) T,改物件位置。

(2) R,旋轉。

(3) T,改軸心位置。

(4) 程式輸寫順序321,先把物件移動改軸心,以軸心旋轉好角度,再把物件放到我們要的位置。


程式碼 

                                        1.茶壺超人

           #include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);
glutSolidTeapot(0.3);///身體
glPushMatrix();
glColor3f(1,0,0);
glTranslatef(0.5,0.2,0);///物件位置
glRotatef(angle,0,0,1);///旋轉
glTranslatef(0.2,0,0);///軸心位置
glutSolidTeapot(0.2);///手臂
glPopMatrix();
glutSwapBuffers();
angle+=0.1;
}
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week12 TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
} 2. 茶壺超人(有手肘)
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);
glutSolidTeapot(0.3);///身體
glPushMatrix();
glColor3f(1,0,0);
glTranslatef(0.5,0.2,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glutSolidTeapot(0.2);///上手臂
glPushMatrix();
glColor3f(0,0,1);
glTranslatef(0.4,0.1,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glutSolidTeapot(0.2);///下手肘
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
angle+=0.1;
}
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week12 TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
3.茶壺超人(兩隻手)
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);
glutSolidTeapot(0.3);///身體
glPushMatrix();///右
glColor3f(1,0,0);
glTranslatef(0.5,0.2,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glutSolidTeapot(0.2);///上手臂
glPushMatrix();
glColor3f(0,0,1);
glTranslatef(0.4,0.1,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glutSolidTeapot(0.2);///下手肘
glPopMatrix();
glPopMatrix();
glPushMatrix();///左
glColor3f(1,0,0);
glTranslatef(-0.5,0.2,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.2,0,0);
glutSolidTeapot(0.2);///上手臂
glPushMatrix();
glColor3f(0,0,1);
glTranslatef(-0.4,0.1,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.2,0,0);
glutSolidTeapot(0.2);///下手肘
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
angle+=0.1;
}
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week12 TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}

沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

一.     一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam,                 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...