每日曬婆
一樣是複習上禮拜的,以下有程式碼:
#include<GL/glut.h>
void display()
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week03");
glutDisplayFunc(display);
glutMainLoop();
}
----------------------以上是程式碼---------------------------
而我們現在多了顯示滑鼠座標的函式,需要注意的是printf需要stdio.h來辨讀。以下是程式碼:
#include<GL/glut.h>
#include<stdio.h>///printf需要
void display()
{
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);///叫出display的函式
glutMouseFunc(mouse);///叫出mouse的函式
glutMainLoop();
}
----------------------------------以上--------------------------------
這裡現在再去做座標的轉換,原本是(300,300)要把她轉換成(1,1)。所以裡面的程式碼要做一些更改,以下一樣是程式碼:
#include<GL/glut.h>
#include<stdio.h>///printf需要
float teapotX=0,teapotY=0;///預設圖片所在位置為0,0
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///把背景清掉
glPushMatrix();///備分矩陣
glTranslatef(teapotX,teapotY,0);///移動
glutSolidTeapot(0.3);
glPopMatrix();///備分矩陣
glutSwapBuffers();
}
///原本的座標為XY300,300而圖片位置為150,150,所以我們需要做轉換
void mouse(int button,int state,int x,int y)///標示出滑鼠的函式
{
printf("%f %f\n",(x-150)/150.0,(y-150)/150.0);///轉換成XY為1,1
teapotX=(x-150)/150.0;///X:0~300變成-1~1
teapotY=(y-150)/150.0;///Y:300~0變成-1~1
}
int main(int argc, char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week03");
glutDisplayFunc(display);///叫出display的函式
glutMouseFunc(mouse);///叫出mouse的函式
glutMainLoop();
}
----------------------------------------------------------------------------
最後用座標來用出圖形。
#include<GL/glut.h>
#include<stdio.h>///printf需要
float teapotX=0,teapotY=0;///預設圖片所在位置為0,0
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///把背景清掉
glBegin(GL_POLYGON);///開始畫
glColor3f(158/255.0,34/255.0,36/255.0);
glVertex2f((66-150)/150.0,-(36-150)/150.0);///66.3
glVertex2f((62-150)/150.0,-(40-150)/150.0);///61.12
glVertex2f((61-150)/150.0,-(54-150)/150.0);///55.4
glVertex2f((52-150)/150.0,-(54-150)/150.0);///53.16
glVertex2f((38-150)/150.0,-(61-150)/150.0);///41.17
glVertex2f((23-150)/150.0,-(67-150)/150.0);///46.27
glVertex2f((10-150)/150.0,-(82-150)/150.0);///50.47
glVertex2f((6-150)/150.0,-(102-150)/150.0);///82.44
glVertex2f((5-150)/150.0,-(121-150)/150.0);///54.93
glVertex2f((9-150)/150.0,-(141-150)/150.0);///47.108
glVertex2f((20-150)/150.0,-(155-150)/150.0);///78.115
glVertex2f((36-150)/150.0,-(170-150)/150.0);///81.83
glVertex2f((58-150)/150.0,-(175-150)/150.0);///
glVertex2f((89-150)/150.0,-(176-150)/150.0);
glVertex2f((106-150)/150.0,-(167-150)/150.0);
glVertex2f((120-150)/150.0,-(141-150)/150.0);
glVertex2f((76-150)/150.0,-(55-150)/150.0);
glVertex2f((67-150)/150.0,-(56-150)/150.0);
glVertex2f((71-150)/150.0,-(44-150)/150.0);
glVertex2f((72-150)/150.0,-(36-150)/150.0);
///原理 0...150...300
///減150 -150...0...150
///除150 -1...0...+1
glEnd();///結束
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)///標示出滑鼠的函式
{
if(state==GLUT_DOWN)
{
///只有按下去時才會印座標,減一半,除一半.0,y相負
printf(" glVertex2f((%d-150)/150.0,-(%d-150)/150.0);\n",x,y);
}
}
int main(int argc, char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week03");
glutDisplayFunc(display);///叫出display的函式
glutMouseFunc(mouse);///叫出mouse的函式
glutMainLoop();
}
---------------------------------------------------------






沒有留言:
張貼留言