電腦圖學---4
⧭旋轉
開啟 transfomation
使用glRotatef ( 數值 , x, y, z)
第一個數值是 旋轉的角度x y z 是 旋轉 x y z 軸 的角度
使用glRotatef ( 數值 , x, y, z)
第一個數值是 旋轉的角度x y z 是 旋轉 x y z 軸 的角度
打開 codeBlock
⧫ glTranslatef 移動
(讓茶壺跟著滑鼠移動)
程式碼
#include <GL/glut.h>
float x=0,y=0; ///設X Y軸變數
void display ()
{
///glut開頭,表示是GLUT的程式
/// glPushMatrix(); glPopMatrix(); 通常會做縮排
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix(); ///備份矩陣,保護
glTranslatef((x-150)/150.0, -(y-150)/150.0 ,0);///Translate 移動 X Y Z,f是浮點數 glutSolidTeapot(0.3);
glPopMatrix(); ///還原矩陣,保護
glutSwapBuffers();
}
void motion(int nowx, int nowy)
{
x=nowx; y=nowy; ///更新X Y
display(); ///再畫display(),用滑鼠移動畫面會跟著動
}
int main(int argc,char**argv) ///main參數
{
glutInit(&argc, argv); ///啟動GLUT
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); ///啟動GLUT的Display的Mode模式 : 兩倍Buffer,有3D的深度
glutCreateWindow("Week03 translate");
glutDisplayFunc(display); ///Display的函式是display
glutMotionFunc(motion); ///滑鼠有動作motion時,要叫motion()
glutMainLoop();
}
#include <GL/glut.h>
float x=0,y=0; ///設X Y軸變數
void display ()
{
///glut開頭,表示是GLUT的程式
/// glPushMatrix(); glPopMatrix(); 通常會做縮排
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix(); ///備份矩陣,保護
glTranslatef((x-150)/150.0, -(y-150)/150.0 ,0);///Translate 移動 X Y Z,f是浮點數 glutSolidTeapot(0.3);
glPopMatrix(); ///還原矩陣,保護
glutSwapBuffers();
}
void motion(int nowx, int nowy)
{
x=nowx; y=nowy; ///更新X Y
display(); ///再畫display(),用滑鼠移動畫面會跟著動
}
int main(int argc,char**argv) ///main參數
{
glutInit(&argc, argv); ///啟動GLUT
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); ///啟動GLUT的Display的Mode模式 : 兩倍Buffer,有3D的深度
glutCreateWindow("Week03 translate");
glutDisplayFunc(display); ///Display的函式是display
glutMotionFunc(motion); ///滑鼠有動作motion時,要叫motion()
glutMainLoop();
}
程式碼
#include <GL/glut.h>
float x=0,y=0; ///設X Y軸變數
void display ()
{
///glut開頭,表示是GLUT的程式
/// glPushMatrix(); glPopMatrix(); 通常會做縮排
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///清顏色跟3D
glPushMatrix(); ///備份矩陣,保護
glRotatef(x, 0, 1 ,0); ///Rotate 旋轉
glutSolidTeapot(0.3);
glPopMatrix(); ///還原矩陣,保護
glutSwapBuffers();
}
void motion(int nowx, int nowy)
{
x=nowx; y=nowy; ///更新X Y
display(); ///再畫display(),用滑鼠移動畫面會跟著動
}
int main(int argc,char**argv) ///main參數
{
glutInit(&argc, argv); ///啟動GLUT
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); ///啟動GLUT的Display的Mode模式 : 兩倍Buffer,有3D的深度
glutCreateWindow("Week03 translate");
glutDisplayFunc(display); ///Display的函式是display
glutMotionFunc(motion); ///滑鼠有動作motion時,要叫motion()
glutMainLoop();
}
#include <GL/glut.h>
float x=0,y=0; ///設X Y軸變數
void display ()
{
///glut開頭,表示是GLUT的程式
/// glPushMatrix(); glPopMatrix(); 通常會做縮排
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///清顏色跟3D
glPushMatrix(); ///備份矩陣,保護
glRotatef(x, 0, 1 ,0); ///Rotate 旋轉
glutSolidTeapot(0.3);
glPopMatrix(); ///還原矩陣,保護
glutSwapBuffers();
}
void motion(int nowx, int nowy)
{
x=nowx; y=nowy; ///更新X Y
display(); ///再畫display(),用滑鼠移動畫面會跟著動
}
int main(int argc,char**argv) ///main參數
{
glutInit(&argc, argv); ///啟動GLUT
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); ///啟動GLUT的Display的Mode模式 : 兩倍Buffer,有3D的深度
glutCreateWindow("Week03 translate");
glutDisplayFunc(display); ///Display的函式是display
glutMotionFunc(motion); ///滑鼠有動作motion時,要叫motion()
glutMainLoop();
}
沒有留言:
張貼留言