渲染时3D立方体显得拉长

时间:2013-04-07 11:25:22

标签: c++ opengl 3d

我有一个基本的opengl项目,可以将3D立方体绘制到屏幕上。我的分辨率为1600 x 900.无论相机与立方体的距离或距离多远,立方体总是呈现水平拉伸,看起来像三角形。我已将相同的多维数据集加载到一个java项目中,它完美地绘制。但是在C ++中使用相同的代码,我会得到一个拉伸效果。关于可能导致这种情况的任何建议?

GLvoid RenderSettings::init()
{
    const GLfloat FOV = 60.0F; 
    const GLfloat ASPECT_RATIO = getScreenWidth() / getScreenHeight();
    const GLfloat NEAREST_VIEW = 1.0F;
    const GLfloat FARTHEST_VIEW = 1000.0F;

    glViewport(0, 0, getScreenWidth(), getScreenHeight());

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(FOV, ASPECT_RATIO, NEAREST_VIEW, FARTHEST_VIEW);

    glClearColor(0.0, 0.0, 0.0, 1.0);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);
    glDepthFunc(GL_LEQUAL);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}

1 个答案:

答案 0 :(得分:2)

const GLfloat ASPECT_RATIO = getScreenWidth() / getScreenHeight();

有你的问题。我假设getScreenWidthgetScreenHeight返回整数。在C / C ++中,当分割整数时,这发生在整数运算中,这意味着结果将(总是)向下舍入到下一个较小的整数。您分配结果的类型无关紧要。 C / C ++独立地查看L值和R值的类型。您可以通过将分区的一侧强制转换为浮点数来修复它(通常只是转换它们),即

GLfloat const ASPECT_RATIO = (float)getScreenWidth() / (float)getScreenHeight();

另请注意,const限定符是左关联的,即它会对其左侧的内容起作用。只有当它是变量定义语句中的第一个标记时,它才会向右移动。但是许多语言纯粹主义者(包括我)认为这看起来很难看。在类型之后编写const也更适合自然语言。