(1.)主題:旋轉Rotation
(2.)實作:glRotatef()
(3.)滑鼠轉,自動轉
1.到
http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
下載: windows.zip
data.zip
glut32.dll
小心,data.zip
要解成
下載\windows\data\模型
不要解成
下載\windows\data\data\模型
接著
到windows/Transformation點開
看到汽車圖片
說明glRotate
首先了解有四個值分別是(旋轉角度,以及X軸,Y軸,和Z軸)
float angle=0;
void display()
{///沒有使用glClear()去清畫面,會有殘影
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///Push輩分保護Matrix
glRotatef(angle,0,1,0);
glutSolidTeapot(0.3);
glPopMatrix();///Pop還原Matrix
glutSwapBuffers();
angle+=3;///每次執行到這行,才加角度
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week05 rotate");
glutDisplayFunc(display);
glutIdleFunc(display);///Idle閒閒沒事就重畫
glutMainLoop();
}
data.zip
glut32.dll
小心,data.zip
要解成
下載\windows\data\模型
不要解成
下載\windows\data\data\模型
接著
到windows/Transformation點開
看到汽車圖片
說明glRotate
首先了解有四個值分別是(旋轉角度,以及X軸,Y軸,和Z軸)
教了茶壺旋轉的程式
#include <GL/glut.h>float angle=0;
void display()
{///沒有使用glClear()去清畫面,會有殘影
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///Push輩分保護Matrix
glRotatef(angle,0,1,0);
glutSolidTeapot(0.3);
glPopMatrix();///Pop還原Matrix
glutSwapBuffers();
angle+=3;///每次執行到這行,才加角度
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week05 rotate");
glutDisplayFunc(display);
glutIdleFunc(display);///Idle閒閒沒事就重畫
glutMainLoop();
}
讓滑鼠點滑茶壺
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
///angle+=3;原本自動轉的註解掉
}
void motion(int x,int y)
{
angle=x;
display();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week05 rotate");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
把滑鼠全部的動作打到程式裡
0是滑鼠左鍵,1是滑鼠中鍵,2是滑鼠右鍵
把滑鼠全部的動作打到程式裡
0是滑鼠左鍵,1是滑鼠中鍵,2是滑鼠右鍵
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
///angle+=3;
}
void motion(int x,int y)
{
angle=x;
display();
}
#include <stdio.h>
void mouse(int button,int state,int x,int y)
{
printf("%d %d %d %d\n",button,state,x,y);
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week05 rotate");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
glutMainLoop();
}
沒有留言:
張貼留言