
拿上禮拜的程式繼續新增功能
include <GL/glut.h>
#include <stdio.h> //小黑視窗
void display()
{
glColor3f(1.0,0.5,1.0);
glutSolidTeapot(0.3); ///茶壺
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y) //新增鼠標記錄功能
{
printf("%d %d %d %d\n",button,state,x,y); ///在小黑視窗中顯示結果
}
int main(int argc, char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03"); ///出現視窗
glutDisplayFunc(display); ///顯示
glutMouseFunc(mouse); ///鼠標記錄
glutMainLoop();
}
在一個視窗中:
(0,0)-----(+,0)
|
|
(0,+)
(Button,State,X,Y)
X和Y當然就是鼠標得位置
Button:0:左鍵 1:滾輪 2:右鍵 3:滾輪往上 4:滾輪往下
State: 0按下 1鬆開 (不適用於Button為3或4時)
(如果想讓中心變成0?)
只需要改成這樣就可以了。
printf("%d %d %f %f\n",button,state,(x-150)/150.0,-(y-150)/150.0); (Y的話原本是上下顛倒...所以要加負號)
(0,+)
|
(-,0)----(0,0)----(+,0)
|
(0,-)
--------------------------------------

接下來看看如何讓茶壺跑到鼠標的位置:
#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);///移動到指定位置(位置於void mouse中決定)
glutSolidTeapot(0.3); ///茶壺
glPopMatrix();///備份矩陣
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
printf("%d %d %f %f\n",button,state,(x-150)/150.0,-(y-150)/150.0);
teapotX=(x-150)/150.0;///設定移動位置
teapotY=-(y-150)/150.0;///設定移動位置
}
int main(int argc, char *argv[])///基本上還是一樣
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
(Button,State,X,Y)
X和Y當然就是鼠標得位置
Button:0:左鍵 1:滾輪 2:右鍵 3:滾輪往上 4:滾輪往下
State: 0按下 1鬆開 (不適用於Button為3或4時)
(如果想讓中心變成0?)
只需要改成這樣就可以了。
printf("%d %d %f %f\n",button,state,(x-150)/150.0,-(y-150)/150.0); (Y的話原本是上下顛倒...所以要加負號)
(0,+)
|
(-,0)----(0,0)----(+,0)
|
(0,-)
--------------------------------------

接下來看看如何讓茶壺跑到鼠標的位置:
#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);///移動到指定位置(位置於void mouse中決定)
glutSolidTeapot(0.3); ///茶壺
glPopMatrix();///備份矩陣
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
printf("%d %d %f %f\n",button,state,(x-150)/150.0,-(y-150)/150.0);
teapotX=(x-150)/150.0;///設定移動位置
teapotY=-(y-150)/150.0;///設定移動位置
}
int main(int argc, char *argv[])///基本上還是一樣
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
沒有留言:
張貼留言