OpenGL VS2008在c++:相同的代码行为不同,即使在同一台计算机上

OpenGL VS2008 on C++: Same code bevahes differently even on the same computer

本文关键字:计算机 一台 c++ VS2008 OpenGL 代码      更新时间:2023-10-16

我有两个完全相同的代码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 Upn");
        zoom += 0.1;
    }
    else if (mod == GLUT_ACTIVE_CTRL &&  button == GLUT_WHEEL_DOWN ){
        printf("Wheel Downn"); 
        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 heren");
        zrotation -= (5*(z - oldZ)); // about x-axis
        //translation_z = translation_z - 0.1;
    }

}
else if (state == GLUT_DOWN) {
    //printf("Glut Down before z processingn");
    if (button == GLUT_LEFT_BUTTON){
        cursorX = x;
        cursorY = y;
        mode = SELECT;
        //printf("Left is downn");
    }
    oldX = x;
    oldY = y;
}
}

和我上传的两个项目在这里

源设置和项目设置似乎完全相同。我没有看到任何添加的include路径,你在两个项目中都有opengl的本地副本吗?

我现在唯一能想到的是你来源的评论…

//Use patched version of GLUT (http://www.realmtech.net/opengl/glut.php) in case the wheel interaction does not work.

1)这听起来可能与你正在遇到的问题有关。

2)你是否在一个项目中使用了补丁版本,而在另一个项目中没有使用?

编辑:在其中一个项目中,你把wheel down和wheel up的打印行注释掉了,这是你如何判断一个人不认识wheel的方法吗?

我发现了这个问题,在这个项目中,不能识别轮子的上下状态(尽管它应该),我包括:

freeglut。自由glut32。自由opengl32。自由user32.lib

这可以通过只包含以下库来解决:

opengl32。自由user32.lib

感谢@melak47建议检查项目设置