1.先來個複習
![]() |
| 上周的茶壺~記得載freeglut喔! |
#include <GL/glut.h>
void display(){
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int a,char**b){
glutInit(&a,b);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week03");
glutDisplayFunc(display);
glutMainLoop();
}
2.Mouse
2-1用滑鼠點出座標八
![]() |
| 小黑窗解釋 |
2-2找出視窗的中點為中心
![]() |
void mouse(int button,int state,int x,int y){
printf("%f %f\n",(x-150)/150.0,(y-150)/150.0);
///x: 0~300 變成 -1~+1
///y:300~ 0 變成 -1~+1
}
|
![]() |
| 找到中心惹 |
2-3滑鼠點哪,茶壺在哪
最終程式碼:
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
glPushMatrix();///備份矩陣
glTranslatef(teapotX,teapotY,0);///移動
glutSolidTeapot(0.3);
glPopMatrix();///備份矩陣
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y){
printf("%f %f\n",(x-150)/150.0,(y-150)/150.0);
teapotX= (x-150)/150.0;
teapotY=-(y-150)/150.0;///要記得加負號
}
int main(int a,char**b){
glutInit(&a,b);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
滑鼠點哪,茶壺就會出現在哪,很酷八
3.Begin
程式碼:
#include <stdio.h>
#include <GL/glut.h>
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
glBegin(GL_POLYGON);///glVertex2f(x,y);數值在-1.0~+1.0之間
求到的小黑窗結果複製丟到這裡
glEnd();
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y){
if(state==GLUT_DOWN){///滑鼠按下去,才印出座標
printf("glVertex2f( (%d-150)/150.0,-(%d-150)/150.0);\n",x,y);
}
}
int main(int a,char**b){
glutInit(&a,b);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
![]() |
| 最後得到的圖形,就是用滑鼠點出的圖形 |
![]() |
| 加入 glColor3f(211/255.0,55/255.0,16/255.0); 改顏色 |










沒有留言:
張貼留言