week03-1
去小葉老師的網站:https://jsyeh.org/3dcg10/ 下載window.zip和data.zip
解壓縮windows.zip和data.zip後開啟transformation.exe
就會出現酷酷的東西了
開啟codeblock和前幾週的方式一樣打開glut
打開上周的茶壺
然後修改一些程式碼
#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("GLUT Shapes");
glutDisplayFunc(display);
glutMainLoop();
}
結果如下
再開啟一個新的glut複製和上一個一樣的程式碼
要教如何加上mouse的功能去控制他的移動
#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();
}
結果如下
#include <GL/glut.h>
#include <stdio.h>
float X=0,Y=0,Z=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_LINE_LOOP);
glVertex2f(0.09,-0.11);
glVertex2f(-0.10,-0.15);
glVertex2f(-0.28,-0.15);
glVertex2f(-0.49,-0.06);
glVertex2f(-0.02,0.23);
glVertex2f(-0.02,0.29);
glVertex2f(0.02,0.43);
glVertex2f(0.09,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();
}
結果如下
沒有留言:
張貼留言