1.主題 Rotate旋轉
jsyeh.org/3dcg 下載
data.zip
windows.zip
2.測試Rotate功能
決定旋轉方向
利用國中學習的右手定則 來判定它旋轉的方向
3.點擊轉茶壺
打開 Codeblocks 建立新的 GLUT 專案
-Build&Run 會出現一個按一次旋轉90度的白色茶壺
#include <GL/glut.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(90,0,0,1); ///以z軸為主做90度的旋轉
glutSolidTeapot(0.3);
glPushMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("第04週的程式哦!");
glutDisplayFunc(display);
glutMainLoop();
}
4.滑鼠互動
#include <GL/glut.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();///備分矩陣
glRotatef(90,0,0,1);///旋轉
glColor3f(1,0,0);///顏色(RGB)
glutSolidTeapot(0.3);///就一個神燈
glPopMatrix();///還原矩陣
glutSwapBuffers();///畫好提交
}
int main(int argc, char** argv)///主函式 進階版 看不懂
{
glutInit( &argc, argv);///把參數給glutInit 初始化
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///雙緩衝區+3D深度功能
glutCreateWindow("第4周的程式");///開GLUT視窗
glutDisplayFunc(display);///用來顯示的函式
glutMainLoop();
}
5.改進
原因:因為上面的只會跟者妳X軸的座標去移動 等於說一開始點的座標也會算進去
所以要固定起始點與上次的一樣
#include <GL/glut.h>
float angle=0,oldX=0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();///備分矩陣
glRotatef(angle,0,0,1);///旋轉
glColor3f(1,0,0);///顏色(RGB)
glutSolidTeapot(0.3);///就一個神燈
glPopMatrix();///還原矩陣
glutSwapBuffers();///畫好提交
}
void motion (int x, int y)
{
angle+=(x-oldX);
oldX=x;
display();///重劃畫面
}
void mouse(int button, int state, int x, int y)
{
oldX=x;///定錨
}
int main(int argc, char** argv)///主函式 進階版 看不懂
{
glutInit( &argc, argv);///把參數給glutInit 初始化old
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///雙緩衝區+3D深度功能
glutCreateWindow("滑鼠可以跟者動");///開GLUT視窗
glutMotionFunc(motion);///讓她動
glutMouseFunc(mouse);///上周的
glutDisplayFunc(display);///用來顯示的函式
glutMainLoop();
}
沒有留言:
張貼留言