💩Step1
1. http;//jsyeh.org/3dcg10/
2. 下載 data , win32
-windows.zip 解壓至windows 👉 下載\windows\Transformation.exe
-data.zip 👉下載\將data.zip裡的data檔案複製到windows裡
3.執行 Transformation.exe
-右上角:按右鍵換模型
-下方:glTranslatef (左右,上下,前後)
💩Step2 無敵茶壺進化史
1.建立一個新的GLUT檔案
{
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)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03 移動");
glutDisplayFunc(display);
glutMainLoop();
}
#include <GL/glut.h>
void myTeapot(float x, float y)
{
glPushMatrix();///備份矩陣(備份舊的位置)
///移動會累積,因為他還會修改矩陣
glTranslatef(x,y,0);///右上角
glColor3f(1,1,0);///黃色
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);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03 移動");
glutDisplayFunc(display);
glutMainLoop();
}
float mouseX=0, mouseY=0;
void myTeapot(float x, float y)
{
glPushMatrix();///備份矩陣(備份舊的位置)
///移動會累積,因為他還會修改矩陣
glTranslatef(x,y,0);///右上角
glColor3f(1,1,0);///黃色
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);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03 移動");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
5.新增能夠看見茶壺座標的功能!
#include <GL/glut.h>
#include <stdio.h>///printf()印東西用的
void myTeapot(float x, float y)
{
glPushMatrix();///備份矩陣(備份舊的位置)
///移動會累積,因為他還會修改矩陣
glTranslatef(x,y,0);///右上角
glColor3f(1,1,0);///黃色
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)
{
#include <stdio.h>///printf()印東西用的
void myTeapot(float x, float y)
{
glPushMatrix();///備份矩陣(備份舊的位置)
///移動會累積,因為他還會修改矩陣
glTranslatef(x,y,0);///右上角
glColor3f(1,1,0);///黃色
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)
{
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("week03 移動");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
mouseX=x; mouseY=y;
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03 移動");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
Step3 按照之前的步驟上傳到 github!
完成!💕💕💕💕💕💕💕
沒有留言:
張貼留言