Week03
下載上課資料
https://jsyeh.org/3dcg10/
下載
- data
- win32
解壓縮
- windows.zip =>下載\windows\Transformation.exe
- data.zip =>下載\windows\data\
執行課本範例 Transformation.exe
執行時, 可移動 x y z 座標
執行上週教的GLUT程式
加上glTranslate(x,y,z) 讓他移動,再把
glPushMatrix() 放前面 glPopMatrix() 放後面, 把他們包起來
- 把 freeglut裝好
- File-New-Project,GLUT專案
- 把上週10行程式碼輸進去, 加上glTranslate(x,y,z) 改變位置
- 前面加上glPushMatrix() , 後面加上glPopMatrix().
#include <GL/glut.h>
void display()
{
glPushMatrix(); ///備份矩陣
glTranslatef(0.5, 0, 0); ///移動
glutSolidTeapot( 0.3 );
glPopMatrix(); ///還原矩陣
glutSwapBuffers();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03");
glutDisplayFunc(display);
glutMainLoop();
}
Mouse函式
#include <GL/glut.h>
float X=0, Y=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///清除背景
glPushMatrix(); ///備份矩陣
glTranslatef( X, Y, 0); ///移動
glutSolidTeapot( 0.3 );
glPopMatrix(); ///還原矩陣
glutSwapBuffers();
}
void mouse(int button, int state, int x ,int y)
{
X = (x-150)/150.0;
Y = -(y-150)/150.0; ///減一半、除一半
}
float X=0, Y=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///清除背景
glPushMatrix(); ///備份矩陣
glTranslatef( X, Y, 0); ///移動
glutSolidTeapot( 0.3 );
glPopMatrix(); ///還原矩陣
glutSwapBuffers();
}
void mouse(int button, int state, int x ,int y)
{
X = (x-150)/150.0;
Y = -(y-150)/150.0; ///減一半、除一半
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///請mouse函式幫忙
glutMainLoop();
}
用滑鼠幫忙畫圖
#include <GL/glut.h>
float X=0, Y=0;
void display()
{
glutSwapBuffers();
}
#include <stdio.h> ///記得加上才能使用printf
void mouse(int button, int state, int x ,int y)
{
X = (x-250)/250.0;
Y = -(y-250)/250.0;
if(state==GLUT_DOWN) ///只有按下mouse 才印出程式
{
printf(" glVertex2f(%.3f, %.3f);\n", X, Y);
}
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(500,500); ///視窗加大 所以一半是250
glutCreateWindow("week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
沒有留言:
張貼留言