1.至https://jsyeh.org/3dcg10
下載data.zip windows.zip
2.windows.zip 解壓
data.zip解壓 並放入=> windows
3.執行Transformation.exe,在右上角點右鍵可換模型,左下角可拖動數值
茶壺
#include <GL/glut.h> ///使用GLUT外掛,簡化程式
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///畫圖前, 先清畫面
glPushMatrix();///備份矩陣(備份舊的位置)
///移動會累積,因為它會修改矩陣
glTranslatef(0.5,0.5,0);///右上角
glColor3f(1,1,0);///黃色
glutSolidTeapot(0.3);///茶壺
glPopMatrix();///還原矩陣
glutSwapBuffers();///畫好後,交換出來
}
int main(int argc, char** argv) ///main()主函式 進階版
{
glutInit( &argc, argv); ///把參數,送給 glutInit 初始化
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); ///雙緩衡區 + 3D深度功能
glutCreateWindow("第02週的程式"); ///開 GLUT 視窗
glutDisplayFunc(display); ///用來顯示的函式
glutMainLoop(); ///主要的程式迴圈
}
四個茶壺
#include <GL/glut.h>
void myTeapot(float x,float y)
{
/// glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();///備份舊的位置
///移動會累積,因為它會修改矩陣
glTranslatef(x,y,0);///右上角
glColor3f(1,1,0);///顏色(RGB)
glutSolidTeapot(0.3);///就一個神燈
glPopMatrix();///還原矩陣
}
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
myTeapot(0.5,0.5);
myTeapot(0.5,-0.5);
myTeapot(-0.5,-0.5);
myTeapot(-0.5,0.5);
glutSwapBuffers();
}
int main(int argc, char** argv)///主函式 進階版 看不懂
{
glutInit( &argc, argv);///把參數給glutInit 初始化
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///雙緩衝區+3D深度功能
glutCreateWindow("week03-移動");///開GLUT視窗
glutDisplayFunc(display);///用來顯示的函式
glutMainLoop();
}

讓茶壺跟著滑鼠移動
#include <GL/glut.h>
float mouseX=0, mouseY=0;
void myTeapot(float x,float y)
{
/// glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();///備份舊的位置
///移動會累積,因為它會修改矩陣
glTranslatef(x,y,0);///右上角
glColor3f(1,1,0);///顏色(RGB)
glutSolidTeapot(0.3);///就一個神燈
glPopMatrix();///還原矩陣
}
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
myTeapot((mouseX-150)/150.0,-(mouseY-150)/150.0);
glutSwapBuffers();
}
void mouse (int button, int state , int x,int y )
{
mouseX=x; mouseY=y;
}
int main(int argc, char** argv)///主函式 進階版 看不懂
{
glutInit( &argc, argv);///把參數給glutInit 初始化
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///雙緩衝區+3D深度功能
glutCreateWindow("week03-移動");///開GLUT視窗
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
沒有留言:
張貼留言