我有两个完全相同的代码OpenGL C ++,在不同的项目中使用VS2008编译,但是当我编译它们时,它的行为有所不同。其中一个人可以识别条件if ( mod == GLUT_ACTIVE_CTRL && button == GLUT_WHEEL_UP )
,其中一个不是。
这是完整的功能:
void mouse(int button, int state, int x, int y) {
int mod = glutGetModifiers();
mouseState = state;
mouseButton = button;
double modelview[16], projection[16];
int viewport[4];
float z = 0 ;
/*Read the projection, modelview and viewport matrices
using the glGet functions.*/
glGetIntegerv( GL_VIEWPORT, viewport );
glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
//glGetDoublev( GL_PROJECTION_MATRIX, projection );
//Read the window z value from the z-buffer
glReadPixels( x, viewport[3]-y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z );
// Used for wheels, has to be up
if (state == GLUT_UP ) {
if ( mod == GLUT_ACTIVE_CTRL && button == GLUT_WHEEL_UP ){
printf("Wheel Up\n");
zoom += 0.1;
}
else if (mod == GLUT_ACTIVE_CTRL && button == GLUT_WHEEL_DOWN ){
printf("Wheel Down\n");
zoom -= 0.1;
}
else if (mod == GLUT_ACTIVE_ALT && button == GLUT_WHEEL_UP) {
//printf("Z++\n");
translation_z = translation_z + 0.1;
//printf("Z = %f", translation_z);
}
else if (mod == GLUT_ACTIVE_ALT && button == GLUT_WHEEL_DOWN) {
//printf("Z--\n");
translation_z = translation_z - 0.1;
}
else if (mod == GLUT_ACTIVE_SHIFT && button == GLUT_WHEEL_UP) {
//printf("Shift Wheel Up. Z axis rotation goes here.\n");
zrotation += (5*(z - oldZ)); // about x-axis
}
else if (mod == GLUT_ACTIVE_SHIFT && button == GLUT_WHEEL_DOWN) {
//printf("Shift Wheel Down. Z Axis rotation goes here\n");
zrotation -= (5*(z - oldZ)); // about x-axis
//translation_z = translation_z - 0.1;
}
}
else if (state == GLUT_DOWN) {
//printf("Glut Down before z processing\n");
if (button == GLUT_LEFT_BUTTON){
cursorX = x;
cursorY = y;
mode = SELECT;
//printf("Left is down\n");
}
oldX = x;
oldY = y;
}
}
`
我上传了project here。
答案 0 :(得分:2)
源和项目设置似乎完全相同。 我看不到任何添加的包含路径,你在两个项目中都有本地的opengl副本吗?
我现在只能想到的另一件事是来自你的来源的评论......
//Use patched version of GLUT (http://www.realmtech.net/opengl/glut.php) in case the wheel interaction does not work.
1)这听起来可能与您遇到的确切问题有关。
2)您是否可以在一个项目中使用该修补版本,而不是另一个项目?
编辑: 在其中一个项目中,你有用于向下滚动和向上滚动的printf线,这是否有任何机会告诉你如何识别轮子?
答案 1 :(得分:0)
我发现了问题,在无法识别车轮上升/下降情况的项目中(尽管应该如此),我包括:
freeglut.lib glut32.lib opengl32.lib user32.lib
这可以通过仅包含以下库来解决:
opengl32.lib user32.lib
感谢@ melak47建议检查项目设置。