Week05
把上週的教材從 https://jsyeh.org/3dcg10/ 下載windows.zip以及data
並且把windows解壓縮把data資料夾丟入windows資料夾
執行 Transformation.exe
觀察剛剛的transformation.exe ,
可以交換 translate 和 rotate的程式
可以造出 公轉 與 自轉的差別
開啟CodeBlocks 並開啟GLUT專案 並下載把freeglut解壓縮
且把libfreeglut.a 複製改成libglut32.a
複製上週的week04-1的程式碼
並修改為以下程式碼
#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); 改成angle*1.5 Z軸
glutSolidTeapot( 0.3 );
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week04");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
就會出現以下畫面囉
觀察兩個茶壺的運行軌跡
打開老師的 opengl_TRT_demo 的互動城市 跑起來
按 ToDraw 劃一個身體和手 利用translate和rotate調整
旋轉中心讓手臂掛在肩膀上旋轉
執行看看
接著開啟codeblocks 開啟一個新的GLUT專案
接著複製貼上剛剛week05-1的程式碼
接著修改裡面的程式碼
要試著做出一個會旋轉手臂的機器人
先做出一個細長的長方形當成手臂
接著把translate和rotate調整好讓關節在正中心
新增一個新的白色大方塊當成機器人的身體
接著把調整好的手臂掛在身體的左右上角
試著執行程式碼
#include <GL/glut.h>
float angle = 0;
void myCube()
{
glPushMatrix();
glScalef(0.5, 0.2, 0.2); /// STEP1 條大小
glutSolidCube(1); /// STEP1正方塊
glPopMatrix() ;/// STEP1
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1); /// STEP4白色的
glutSolidCube(1); /// STEP4身體
glPushMatrix();
glTranslatef(0.5, 0.5, 0); /// STEP5 把手臂移動到右上角
glRotatef(angle,0 ,0 ,1); ///轉她 STEP2
glTranslatef(0.25, 0, 0); ///step3 往右移動0.25 讓關節在政中心
glColor3f(0,1,0); ///step4 綠色的
myCube(); /// STEP2
glPopMatrix(); /// STEP2
glPushMatrix();
glTranslatef(-0.5, 0.5, 0); /// STEP5 把手臂移動到右上角
glRotatef(angle,0 ,0 ,1); ///轉她 STEP2
glTranslatef(0.25, 0, 0) ; ///step3 往右移動0.25 讓關節在政中心
glColor3f(0,1,0); ///step4 綠色的
myCube(); /// STEP2
glPopMatrix(); /// STEP2
glutSwapBuffers();
angle++;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week04");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
執行畫面如下 兩個手臂會掛在機器人的
身體的左右上方來旋轉
沒有留言:
張貼留言