電腦圖學
WEEK04
因為最近懶癌非常的嚴重,上禮拜加課又聽不懂QQ,我要自己重新開一變老師的教學,一次補三個禮拜惹,好難啊電腦圖學:)))
今日第一個任務一樣是打開我們上禮拜做的可愛的茶壺(誤
程式碼如下:
#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); ///1.初始設定
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH); ///2.顯示模式
glutCreateWindow("Week04 mouse"); ///3.開視窗
glutDisplayFunc(display); ///4.等一下要顯示的函式
glutMainLoop(); ///5.主要迴圈
}
接著增加三個步驟!! 把按鍵的 鍵 跟 位置 都詳細的印出來
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y) ///按鍵 按下去放開 位置
{
printf("button:%d state:%d x:%d y:%d\n",button,state,x,y);
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("Week04 mouse");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y) ///按鍵 按下去放開 位置
{
printf("button:%d state:%d x:%d y:%d\n",button,state,x,y);
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("Week04 mouse");
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();
}
void mouse(int button,int state,int x,int y)
{
if(state==GLUT_DOWN) ///如果mouse按下去,印出程式碼
{
printf("glVertex3f((%d-150)/150.0,-(%d-150)/150.0,0);\n",x,y);
}
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("Week04 mouse");
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();
glutSwapBuffers();
}
void motion(int x,int y) ///mouse 移動的函式
{
teapotX= (x-150)/150.0; ///把茶壺的位置換算成座標
teapotY=-(y-150)/150.0;
display(); ///畫面更新
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("Week04 mouse");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
好!今天煩人的程式碼告一段落 我們現在來看看曾經學過的右手安培定律
現在我們把拇指當作是Y軸,其餘四指變成汽車要轉動的方向
以此類推Z軸也是一樣的喔:))
最後又到了開心地加課時間,快回家了,希望不要再加課了,我想3:40回家:)))
廢話不多說,研究一下github做自己的網站!!做完就回家吧~~







沒有留言:
張貼留言