✨Mouse
#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);///button0:右鍵 1:滾輪 2:左鍵
}///state0:按下 1:放開
int main(int argc,char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("mouse week04");
glutDisplayFunc(display);
glutMouseFunc(mouse);///滑鼠迴圈
glutMainLoop();
}
*新增的程式
_____________________________________________________________________
#include <GL/glut.h> ///使用GLUT外掛
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);///多邊形
glVertex3f((117-150)/150.0, -(128-150)/150.0,0);
glVertex3f((147-150)/150.0, -(124-150)/150.0,0);
glVertex3f((141-150)/150.0, -(116-150)/150.0,0);
glVertex3f((158-150)/150.0, -(112-150)/150.0,0);
glVertex3f((155-150)/150.0, -(121-150)/150.0,0);
glVertex3f((183-150)/150.0, -(129-150)/150.0,0);
glVertex3f((191-150)/150.0, -(150-150)/150.0,0);
glVertex3f((199-150)/150.0, -(147-150)/150.0,0);
///剛剛印出來的座標
glEnd();
glutSwapBuffers();
}
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);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("mouse week04");
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 motion的函式
{
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("mouse week04");
glutDisplayFunc(display);
glutMotionFunc(motion);///移動時的函式
glutMainLoop();
}
_________________________________________________________________
✨移動 旋轉 縮放
glTranslatef(x,y,z);///移動
glRotatef(角度,x,y,z);///有四個向量!旋轉 (右手定律
glScalef(x,y,z);///縮放
⬆Y軸為中心旋轉






沒有留言:
張貼留言