提问人:tawan 提问时间:11/10/2023 最后编辑:genpfaulttawan 更新时间:11/10/2023 访问量:48
在 opengl 中移动透视时,地形模型闪烁
Terrain model flickers when moving the perspective in opengl
问:
我正在使用二维数组来生成用于渲染的高度图。
我随机生成了一个 5000 * 5000 的顶点列表:
int ROW = 5000;
int COL = 5000;
struct LineVertex
{
float x;
float y;
float z;
};
float min = -35.0, max = 35.0;
for (int r = 0; r < ROW; r++)
{
for(int c = 0; c < COL; c++)
{
LineVertex lv;
lv.x = c; //x
lv.y = min+qrand()/(double)(RAND_MAX/(max-min));
lv.z = -r;
line.append(lv);
}
}
然后,使用以下代码生成网格:
for(int r = 0; r < ROW - 1; r++)
{
for(int c = 0; c< COL - 1; c++)
{
int topLeft = r * _d->length + c;
int topRight = topLeft + 1;
int bottomLeft = (r + 1) * _d->length + c;
int bottomRight = bottomLeft + 1;
ebo_data.push_back(topLeft);
ebo_data.push_back(topRight);
ebo_data.push_back(bottomLeft);
ebo_data.push_back(topRight);
ebo_data.push_back(bottomRight);
ebo_data.push_back(bottomLeft);
}
}
我希望使用不同的 y 值和顶点着色器代码显示不同的颜色:
#version 330 core
layout (location = 0) in vec3 aPos;
uniform mat4 model;
uniform mat4 vp_matrix;
out vec4 cus_color;
void main()
{
gl_Position = vp_matrix * model * vec4(aPos, 1.0);
cus_color = vec4((aPos.y - -35.0)/70.0); //In the real code, I actually use a gradient color texture
}
vp_matrix矩阵使用的相机类是通过参考以下命令生成的: https://learnopengl.com/code_viewer_gh.php?code=includes/learnopengl/camera.h
在渲染模型矩阵时,我对 x、y 和 z 进行了归一化。
model.scale(1.0/ROW, 0.3f/70.0f, 1.0f/COL); //I want to limit the display range of x, y, z to 1*1*1
glfunc->glDrawElements(GL_TRIANGLES, ebo_data.count(), GL_UNSIGNED_INT, 0);
当相机面向模型时,模型的一部分会出现类似凹陷的现象。 将相机移动到模型的一侧时,模型看起来正常。
- 当我生成的数据为 100 * 100 时,它正常工作。但我希望生成 5000 * 5000 个数据。
- 当模型矩阵未缩放时,它看起来很正常,但是当我移动相机距离以显示整个模型时,模型也会闪烁。
我该怎么办?
答: 暂无答案
评论
qrand()
? ?显式投射到那里并在那里划分..这是怎麽?C?使用现代C++,我们有更好的方法 - 检查 <random> 标头,并查看 rand() 被认为有害。RAND_MAX
double