延續上一周的茶壺
先去下載檔案,再寫程式
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清空
glutSolidTeapot(0.3);//實心茶壺
glutSwapBuffers();//交換兩倍的buffers
}
int main(int argc, char *argv[])//以前我們程式碼會寫 int main()
{
glutInit(&argc, argv);//GULT初始設定
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//顯示模式
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutDisplayFunc(display);//等等要顯示的涵式
glutMainLoop();//主要迴圈
}
(執行結果如圖下)
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清空
glutSolidTeapot(0.3);//實心茶壺
glutSwapBuffers();//交換兩倍的buffers
}
void mouse (int button,int state, int x,int y)//TODO
{
printf("button:%d state:%d x:%d y:%d\n",button, state,x,y);
}
int main(int argc, char **argv)//以前我們程式碼會寫 int main()
{
glutInit(&argc, argv);//GULT初始設定
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//顯示模式
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutDisplayFunc(display);//等等要顯示的涵式
glutMouseFunc(mouse);
glutMainLoop();//主要迴圈
}
(執行結果如圖下)
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清空
glutSolidTeapot(0.3);//實心茶壺
glutSwapBuffers();//交換兩倍的buffers
}
void mouse (int button,int state, int x,int y)//TODO
{
if(state==GLUT_DOWN){
printf("glVertex3f((%d-150)/150.0,-(%d-150)/150.0,0);\n",x,y);
}
}
int main(int argc, char **argv)//以前我們程式碼會寫 int main()
{
glutInit(&argc, argv);//GULT初始設定
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//顯示模式
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutDisplayFunc(display);//等等要顯示的涵式
glutMouseFunc(mouse);
glutMainLoop();//主要迴圈
}
(執行結果如下圖)
這樣我們得到了下面這些座標
glVertex3f((141-150)/150.0,-(113-150)/150.0,0);
glVertex3f((158-150)/150.0,-(113-150)/150.0,0);
glVertex3f((156-150)/150.0,-(122-150)/150.0,0);
glVertex3f((184-150)/150.0,-(129-150)/150.0,0);
glVertex3f((194-150)/150.0,-(149-150)/150.0,0);
glVertex3f((203-150)/150.0,-(145-150)/150.0,0);
glVertex3f((212-150)/150.0,-(131-150)/150.0,0);
glVertex3f((225-150)/150.0,-(130-150)/150.0,0);
glVertex3f((212-150)/150.0,-(148-150)/150.0,0);
glVertex3f((200-150)/150.0,-(166-150)/150.0,0);
glVertex3f((175-150)/150.0,-(184-150)/150.0,0);
glVertex3f((117-150)/150.0,-(184-150)/150.0,0);
glVertex3f((106-150)/150.0,-(171-150)/150.0,0);
glVertex3f((83-150)/150.0,-(149-150)/150.0,0);
glVertex3f((87-150)/150.0,-(138-150)/150.0,0);
glVertex3f((112-150)/150.0,-(132-150)/150.0,0);
glVertex3f((122-150)/150.0,-(127-150)/150.0,0);
glVertex3f((130-150)/150.0,-(125-150)/150.0,0);
glVertex3f((145-150)/150.0,-(125-150)/150.0,0);
然後我們把這些座標複製,放入程式碼裡
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清空
glBegin(GL_POLYGON);
glVertex3f((141-150)/150.0,-(113-150)/150.0,0);
glVertex3f((158-150)/150.0,-(113-150)/150.0,0);
glVertex3f((156-150)/150.0,-(122-150)/150.0,0);
glVertex3f((184-150)/150.0,-(129-150)/150.0,0);
glVertex3f((194-150)/150.0,-(149-150)/150.0,0);
glVertex3f((203-150)/150.0,-(145-150)/150.0,0);
glVertex3f((212-150)/150.0,-(131-150)/150.0,0);
glVertex3f((225-150)/150.0,-(130-150)/150.0,0);
glVertex3f((212-150)/150.0,-(148-150)/150.0,0);
glVertex3f((200-150)/150.0,-(166-150)/150.0,0);
glVertex3f((175-150)/150.0,-(184-150)/150.0,0);
glVertex3f((117-150)/150.0,-(184-150)/150.0,0);
glVertex3f((106-150)/150.0,-(171-150)/150.0,0);
glVertex3f((83-150)/150.0,-(149-150)/150.0,0);
glVertex3f((87-150)/150.0,-(138-150)/150.0,0);
glVertex3f((112-150)/150.0,-(132-150)/150.0,0);
glVertex3f((122-150)/150.0,-(127-150)/150.0,0);
glVertex3f((130-150)/150.0,-(125-150)/150.0,0);
glVertex3f((145-150)/150.0,-(125-150)/150.0,0);
glEnd();
//glutSolidTeapot(0.3);//實心茶壺 (記得把這行//,因為我們這次要利用座標畫圖)
glutSwapBuffers();//交換兩倍的buffers
}
void mouse (int button,int state, int x,int y)
{
if(state==GLUT_DOWN){
printf("glVertex3f((%d-150)/150.0,-(%d-150)/150.0,0);\n",x,y);
}
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);//GULT初始設定
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//顯示模式
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
(執行結果如下圖)
接著我們要來做點著滑鼠移動,茶壺就可以跟著移動的程式
#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();//矩陣還原
glEnd();
//glutSolidTeapot(0.3);//實心茶壺
glutSwapBuffers();//交換兩倍的buffers
}
void motion (int x,int y)//TODO
{
teapotX = (x-150)/150.0;//換算座標
teapotY = -(y-150)/150.0;
display();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutDisplayFunc(display);//display顯示涵式
glutMotionFunc(motion);
glutMainLoop();//準備mouse motion 移動時的涵式
}
(執行結果如下圖)
第一行是X,Y,Z
第二行分別是 旋轉角度,X,Y,Z (右手安培定律)
一定要用右手看!!!
X拇指指向右,Y拇指指向上,Z拇指指向自己
接著看其他四指往哪個方向轉,就是旋轉的角度方向
第三行是大小
舉例
X軸,拇指指向右邊,依照圖片箭頭旋轉
把main改成gh-pages



















沒有留言:
張貼留言