Part 2
///week 0302 translate mouse 要加上 mouse 的移動功能
///1. File new project, glut 專案
///2. 加上 week 0301 translate 的程式
///3. 要使用 global 變數來讓坐標改變
#include <GL/glut.h> ///使用 GLUT外掛
float mouseX=0, mouseY=0;///step 03-01 使用 global 變數
void myTeapot(float x, float y)
{
glPushMatrix();///備份矩陣 (備份舊的位置)
glTranslatef(x, y, 0);
glutSolidTeapot(0.3);
glPopMatrix();///還原矩陣 (還原舊的位置)
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
myTeapot( (mouseX-150)/150.0, -(mouseY-150)/150.0 );
glutSwapBuffers();
}
void mouse( int button, int state, int x, int y )///step 0301 mouse(), button為左中右鍵, state為按下/放開, x、y為坐標
{
mouseX=x; mouseY=y;
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03 移動");
glutDisplayFunc(display);
glutMouseFunc(mouse);///滑鼠事件
glutMainLoop();
}
Part 3
///week 0302 translate mouse 要加上 mouse 的移動功能
///1. File new project, glut 專案
///2. 加上 week 0301 translate 的程式
///3. 要使用 global 變數來讓坐標改變
#include <GL/glut.h>
#include <stdio.h> ///為了printf()
float mouseX=0, mouseY=0;///step 03-01 使用 global 變數
void myTeapot(float x, float y)
{
glPushMatrix();///備份矩陣 (備份舊的位置)
glTranslatef(x, y, 0);
glutSolidTeapot(0.3);
glPopMatrix();///還原矩陣 (還原舊的位置)
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
myTeapot( (mouseX-150)/150.0, -(mouseY-150)/150.0 );
glutSwapBuffers();
}
void mouse( int button, int state, int x, int y )///step 0301 mouse(), button為左中右鍵, state為按下/放開, x、y為坐標
{
mouseX=x; mouseY=y;
x = (x-150) / 150.0;
x = (y-150) / 150.0;
if(state==GLUT_DOWN) printf(" glVertex2f(%.2f, %.2f);\n", x, y);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);///滑鼠事件
glutMainLoop();
}
}
沒有留言:
張貼留言