#step01-1
1.jsyeh.org/3dcg10 下載windows.zip ,data.zip
2.windows.zip => 下載\windows\Transformation.exe
3.data.zip => 下載\windows\data\模型
4.重點要有T移動 R轉動,按右鍵swap交換T R
5.glTranslatef(0.9 , 0, 0);移動
6.glRotatef(角度,0,1,0);轉動
在右邊轉動的藍色車子
```cpp
glTranslatef(0.9 , 0, 0);移動在右邊
glRotatef(角度,0,1,0);旋轉
畫一台藍色車子
```
```cpp
繞著中間轉的車子
glRotatef(角度,0,1,0);旋轉
glTranslatef(0.9 , 0, 0);移動在右邊
畫一台藍色車子
```
#step01-2
用另一個程式來理解OpenGL T-R-T的函式;對特定軸轉動練習
1. 120.125.80.50/GL 有程式,老師寫的程式,可以給我們更了解函式的運作方式
2. (右下角)點ToDraw, 左邊黑的地方可以畫圖
4. 可以畫個身體 叫 myDrawObject(0)
5. 可以再畫個手臂 叫 myDrawObject(1)
6.可以上下更改程式的順序,都試試看比較方便理解函式的運作
7.接下來是練習內容!
當我把glRotatef(angle,0,0,0);寫在兩個物件之上時,兩個都會轉動,因為代表兩個物件都在Rotate的函式之下
#step02-1
1.把glTranslatef();那一行,點它變紅色,就可以移動左邊的東西了
2.把glTranslatef();那一行,放在Rotatef()的下面手臂的上面
3.把另一個glTranslatef();放在Rotatef()的上面
```cpp
glPushMatrix();
myDrawObject(0);畫身體
glRotatef(angle,0,0,0);//這個旋轉會轉下面所有的東西
glTranslatef(0.02,-0.06);往左下方移動(讓軸心在正中央)
myDrawObject(1);畫手臂(右上方)
glPopMatrix();
```
```cpp
myDrawObject(0);畫身體
glPushMatrix()
glTranslatef(0.15,0.20,0);往右上方移
glRotatef(angle,0,0,0);//這個旋轉會轉下面所有的東西
glTranslatef(0.02,-0.06,0);往左下方移動(讓軸心在正中央)
myDrawObject(1);畫手臂(右上方)
glPopMatrix();
```
#step02-2
這裡老師在講解下周考試題目,運用到的是今天上課所學的T-R-T
```cpp
glPushMatrix()
glTranslatef(0.15,0.20,0);往右上方移
glRotatef(angle,0,0,0);//這個旋轉會轉下面所有的東西
glTranslatef(0.02,-0.06,0);往左下方移動(讓軸心在正中央)
myDrawHand(1);畫手(右上方)
glPopMatrix();
```
#step02-3
現在要寫程式了
1. File-New-Project,GLUT專案,名稱week12_TRT
2. 把十行程式碼放進去
3. 把T-R-T的6行放進去
4. 再讓他會自動轉
5. glutIdleFunc( display );
程式如下
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///備份矩陣
glRotatef(angle,0,0,1);
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();
}
#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();///備份矩陣
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,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();
}
#step03-2
為了寫回家作業
1. 要有3D模型(可用MAYA自己建出來,也可以用網路上找的模型來裁切)需要包含身體、上手臂、下手肘。
回家作業就來改數值!
#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();///右邊的手臂手肘!!!
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,0,0);//紅的
glutSolidTeapot( 0.2 );//小茶壺 當她是下手臂
glPushMatrix();///備份矩陣
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,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();
}
寫完一隻手臂後,當然要再加上另一隻!
#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();///右邊的手臂手肘
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,0,0);//紅的
glutSolidTeapot( 0.2 );//小茶壺 當她是下手臂
glPushMatrix();///備份矩陣
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,0,0);//紅的
glutSolidTeapot( 0.2 );//小茶壺 當她是下手肘
glPopMatrix();///還原矩陣
glPopMatrix();///還原矩陣
glPushMatrix();///左邊的手臂手肘!!!!!!!!!
glTranslatef(-0.2,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.2,0,0);
glColor3f(1,0,0);//紅的
glutSolidTeapot( 0.2 );//小茶壺 當她是下手臂
glPushMatrix();///備份矩陣
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,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();
}

.png)
.png)
.png)
.png)
.png)
沒有留言:
張貼留言