*Step01:下載老師的檔案
到 https://jsyeh.org/3dcg10 下載 [data] 和 [win32]
下載完後解壓縮,將data資料夾放入windows資料夾中
執行Transformation.exe檔
*Step02:前置準備
CodeBlock開GLUT專案(先去lib複製libfreeglut.a修改檔名成libglut32.a)
複製茶壺程式碼
#include <GL/glut.h>
void display()
{
glutSolidTeapot(0.3);
glutSwapBuffers(); //交換顯示
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); //設定顯示模式
glutCreateWindow("week03"); //視窗名稱
glutDisplayFunc(display); //顯示的函式
glutMainLoop(); //主要迴圈最後
}
*Step03:改變茶壺位置
#include <GL/glut.h>
void display()
{
glPushMatrix(); //備份矩陣
glTranslatef(0.5,0.5,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(); //主要迴圈最後
}
void display()
{
glPushMatrix(); //備份矩陣
glTranslatef(0.5,0.5,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(); //主要迴圈最後
}
*Step04:用滑鼠控制茶壺移動
#include <GL/glut.h>
float X=0,Y=0,Z=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix(); //備份矩陣
glTranslatef(X,Y,Z); //改變矩陣
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"); //視窗名稱
glutMouseFunc(mouse);
glutDisplayFunc(display); //顯示的函式
glutMainLoop(); //主要迴圈最後
}
*Step05:用滑鼠製圖並顯示座標
#include <GL/glut.h>
#include <stdio.h>
float X=0,Y=0,Z=0;
void display()
{
//留下glClear()清背景,glutSwapBuffers
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f(-0.01,-0.49);
glVertex2f(-0.53,-0.27);
glVertex2f(-0.63,0.25);
glVertex2f(-0.40,0.53);
glVertex2f(-0.17,0.58); 這裡可以自己改
glVertex2f(0.04,0.57);
glVertex2f(0.40,0.46);
glVertex2f(0.71,-0.08);
glVertex2f(0.54,-0.40);
glVertex2f(0.13,-0.53);
glVertex2f(-0.13,-0.53);
glEnd();
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
X=(x-150)/150.0;
Y=-(y-150)/150.0;
if(state==GLUT_DOWN) printf(" glVertex2f(%.2f,%.2f);\n",X,Y);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); //設定顯示模式
glutCreateWindow("week03"); //視窗名稱
glutMouseFunc(mouse);
glutDisplayFunc(display); //顯示的函式
glutMainLoop(); //主要迴圈最後
}
.png)
.png)
.png)
沒有留言:
張貼留言