打開 https://jsyeh.org/3dcg10/
下載:data data.zip
win32 windows.zip

解壓縮後把data資料夾放入windows資料夾

執行Transformation.exe看有沒有畫面

打開code blocks 開新的glut
加入水壺
#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("GLUT Shapes");
glutDisplayFunc(display);
glutMainLoop();
}
加入
glPushMatrix();///備份矩陣
glTranslated(0.5 ,0 ,0 );///移動位置
glPopMatrix();///還原矩陣

加入
#include <stdio.h>
void mouse(int button,int state,int x,int y)///button(左,右鍵) state(按下去是0放開是1)
{
printf("%d %d %d %d\n",button,state,x,y);
}
在glutDisplayFunc(display);下方加入glutMouseFunc(mouse);
點了會顯示座標

使水壺可以移動
#include <GL/glut.h>
float X=0,Y=0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
glPushMatrix();///備份矩陣
glTranslated(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("GLUT Shapes");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
在小黑窗點你要的形狀
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glBegin(GL_POLYGON);///實心
座標複製到這裡
glEnd();
glBegin(GL_LINE_LOOP);///線
座標複製到這裡
glEnd();
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
float X = (x-250)/250.0;
float Y = -(y-250)/250.0;
if(state==GLUT_DOWN){
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);
glutCreateWindow("week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}

沒有留言:
張貼留言