基于glutMouseFunc和glutMotionFunc的用鼠标控制物体的缩放和旋转的小例子,分享学习一下。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 459776 2015-04-08 08:49 mouseMoveDebugmouseMove.exe
文件 1475988 2015-04-08 08:49 mouseMoveDebugmouseMove.ilk
文件 1715200 2015-04-08 08:49 mouseMoveDebugmouseMove.pdb
文件 606 2015-04-08 08:49 mouseMovemouseMoveDebugcl.command.1.tlog
文件 29988 2015-04-08 08:49 mouseMovemouseMoveDebugCL.read.1.tlog
文件 320 2015-04-08 08:49 mouseMovemouseMoveDebugCL.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink-cvtres.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink-cvtres.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink-rc.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink-rc.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1576-cvtres.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1576-cvtres.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1576-rc.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1576-rc.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1576.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1576.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1880-cvtres.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1880-cvtres.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1880-rc.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1880-rc.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1880.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.1880.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.4948-cvtres.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.4948-cvtres.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.4948-rc.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.4948-rc.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.4948.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.4948.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.6084-cvtres.read.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebuglink.6084-cvtres.write.1.tlog
............此处省略50个文件信息
#include“stdlib.h“
#include“iostream“
#include“gltools.h“
#include“GLBatch.h“
#include“GLShaderManager.h“
#include“math.h“
#ifdef __APPLE__
#include // OS X version of GLUT
#else
#define FREEGLUT_STATIC
#include // Windows FreeGlut equivalent
#endif
using namespace std;
GLShaderManager shaderManager;
GLTriangleBatch sphereBatch;
bool mouseLeftDown=false;
bool mouseRightDown=false;
float mouseXmouseY;
float cameraZ;
float rotXrotY;
const float offset = 0.01;
void ChangeSize(GLint wGLint h)
{
if(h == 0)
h = 1;
glViewport(00wh);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60(GLfloat)w/(GLfloat)h0.1100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//不要忘记加载模型视图矩阵!!!
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//简单地调用以下平移和旋转函数实现控制
glTranslatef(00cameraZ);
glRotatef(rotX 1.0f 0.0f 0.0f);
glRotatef(rotY 0.0f 1.0f 0.0f);
glColor3f(011);
glPolygonMode(GL_FRONT_AND_BACKGL_LINE);
sphereBatch.Draw();
glutSwapBuffers();
// glutPostRedisplay();
}
/*
//button:GLUT_LEFT_BUTTON GLUT_MIDDLE_BUTTON GLUT_RIGHT_BUTTON
//state:GLUT_DOWN GLUT_UP
//x y坐标值
*/
void mouse(int button int state int x int y)
{
mouseX = x;
mouseY = y;
if(button == GLUT_LEFT_BUTTON)
{
if( state == GLUT_DOWN)
mouseLeftDown = true;
else if(state == GLUT_UP)
mouseLeftDown = false;
}
else if(button == GLUT_RIGHT_BUTTON)
{
if( state == GLUT_DOWN)
mouseRightDown = true;
else if(state == GLUT_UP)
mouseRightDown = false;
}
glutPostRedisplay();
}
void motion(int x int y)
{
float dx = x-mouseX;
float dy = y-mouseY;
//x与y的位置相互颠倒
if(mouseLeftDown == true)
{
rotY += dx;
rotX += dy;
}
else if(mouseRightDown == true)
{
cameraZ += dy*offset;
}
mouseX = x;
mouseY = y;
glutPostRedisplay();
}
void SetupRC()
{
glClearColor(0001);
glEnable(GL_DEPTH_TEST);
gltMakeSphere(sphereBatch51530);
}
int main(int argc char* argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA |GLUT_DEPTH);
glutInitWindowSize(800 600);
glutCreateWindow(“MouseMotion“);
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
glutMouseFunc(mouse);
glutMotionFunc(motion);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr “GLEW Error: %s
“ glewGetErrorString(err));
return 1;
}
SetupRC();
glutMainLoop();
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 459776 2015-04-08 08:49 mouseMoveDebugmouseMove.exe
文件 1475988 2015-04-08 08:49 mouseMoveDebugmouseMove.ilk
文件 1715200 2015-04-08 08:49 mouseMoveDebugmouseMove.pdb
文件 606 2015-04-08 08:49 mouseMovemouseMoveDebugcl.command.1.tlog
文件 29988 2015-04-08 08:49 mouseMovemouseMoveDebugCL.read.1.tlog
文件 320 2015-04-08 08:49 mouseMovemouseMoveDebugCL.write.1.tlog
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
文件 2 2015-04-08 08:49 mouseMovemouseMoveDebugli
............此处省略50个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)