gpt4 book ai didi

c++ - 渲染时 3D 立方体出现拉伸(stretch)

转载 作者:行者123 更新时间:2023-11-28 03:19:33 24 4
gpt4 key购买 nike

我有一个基本的 opengl 项目,可以在屏幕上绘制一个 3D 立方体。我的分辨率是 1600 x 900。无论相机离立方体多远或多近,立方体总是出现水平拉伸(stretch),看起来像一个三角形。我已经将同一个立方体加载到一个 Java 项目中,它绘制得非常完美。但是使用 C++ 中的相同代码,我得到了拉伸(stretch)效果。关于可能导致此问题的任何建议?

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();

}

最佳答案

这个

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

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

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

还要注意 const 限定符是左结合的,即它作用于它剩下的部分。只有当它是变量定义语句中的第一个 标记时,它才会向右移动。但是许多语言纯粹主义者(包括我)认为这看起来很难看。在类型之后写 const 更符合自然语言。

关于c++ - 渲染时 3D 立方体出现拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com