1.1 下載Win32的Example範例
https://jsyeh.org/3dcg10/
下載[data].[win32]
1.2 windows.zip解壓縮至"windows\"
1.3 將data移至windows
1.4 打開Transformation.exe
1.5 選擇soccerball
2.1 調整glRotatef (x,y,z)旋轉軸,改變物體旋轉角度
2.2 (1.00,0.00,0.00)旋轉軸向右,物體旋轉角度前空翻(如安培右手定則)
2.3 (0.00,1.00,0.00)旋轉軸向上,物體旋轉角度右肩先出(如安培右手定則)
2.4 (0.00,0.00,1.00)旋轉軸向螢幕外射出,物體旋轉角度向螢幕左邊側空翻(如安培右手定則)
3. 茶壺旋轉180度
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///矩陣備份
glRotatef(180,0,0,1);///轉180度
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week05 Rotate");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
4. 可使用滑鼠使茶壺轉動
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///矩陣備份
glRotatef(angle,0,0,1);///轉180度
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x,int y)
{
angle=x;
display();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week05 Rotate");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
5. 使用滑鼠使茶壺轉動2
#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);///轉180度
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glPopMatrix();///還原矩陣
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
oldX=x;
}
void motion(int x,int y)
{
angle+=(x-oldX);
oldX=x;
display();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week05 Rotate");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
6. 複習上週mouse 用滑鼠畫圖(1)
7.複習上周mouse 用滑鼠畫圖(2)
#include <stdio.h>
#include <GL/glut.h>
int N=0;
int x[1000],y[1000];
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_LINE_LOOP);
for(int i=0;i<N;i++){
glVertex2f((x[i]-150)/150.0,-(y[i]-150)/150.0);
}
glEnd();
glutSwapBuffers();
}
void motion(int mouseX,int mouseY)
{
N++;
x[N-1]=mouseX;
y[N-1]=mouseY;
printf("現在按下滑鼠,得到新座標 %d %d\n",x[N-1],y[N-1]);
display();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week05 複習 mouse");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
沒有留言:
張貼留言