今天是第四週
這次會用到新的資料。先去 https://jsyeh.org/3dcg10/ 下載data.zip 然後解壓縮
記得上次的windows資料夾嗎?把壓縮檔移動到那裡然後進行解壓縮。
data裡面還有一個data資料夾,請將它移動到上一個資料夾裡面(直接取代)。
打開transformation.exe,裡面的數值可以調整攝影機的狀態。
本週的重點是translate,其他的之後會慢慢加入。
新增一個OpenGL專案,將main.cpp的程式碼全刪掉,換成以下的:
#include <GL/glut.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.3,0.2,0);
glColor3f(1,0,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit( &argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week04_1");
glutDisplayFunc( display );
glutMainLoop();
return 0;
}
執行後會出現一個紅色的茶壺。
Translate的效果有幾點要注意:
接下來,我們要用滑鼠來找座標。
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
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("week04_2");
glutDisplayFunc( display );
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}
執行時不會有任何東西出現,現在你的每一個點擊都會被記錄起來。(0=左鍵,1=滾輪鍵,2=右鍵)
#include <GL/glut.h>
#include <stdio.h>
int mouseX=0,mouseY=0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0);
glPushMatrix();
glTranslatef( (mouseX-150)/150.0,-(mouseY-150)/150.0,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void mouse(int button, int state,int x,int y)
{
printf("%d %d %d %d\n",button,state,x,y);
mouseX=x;
mouseY=y;
}
int main(int argc, char**argv)
{
glutInit( &argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week04_2");
glutDisplayFunc( display );
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}
現在這個茶壺會隨著鼠標點擊位置移動了
沒有留言:
張貼留言