【发布时间】:2023-03-14 20:48:02
【问题描述】:
我有一个从 dted 文件创建的位图。我想使用该位图并创建 3d 地形渲染。我正在尝试使用顶点向量来做到这一点,但我根本无法达到我的目标。这是我的paintGL代码:
void render::paintGL(){
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glTranslatef(0,0,-100);
for(int z=0;z<dted.width()-1;z++){
glBegin(GL_TRIANGLE_STRIP);
for(int x = 0; x<dted.height()-1; x++){
glColor3f(matrix[x][z], matrix[x][z], matrix[x][z]);
glVertex3f(x, matrix[x][z], -z);
//vertex0 ends here
glColor3f(matrix[x+1][z], matrix[x+1][z], matrix[x+1][z]);
glVertex3f(x+1, matrix[x+1][z], -z);
//vertex1 ends here
glColor3f(matrix[x][z+1], matrix[x][z+1], matrix[x][z+1]);
glVertex3f(x, matrix[x][z+1], -z-1);
//vertex2 ends here
glColor3f(matrix[x+1][z+1], matrix[x+1][z+1], matrix[x+1][z+1]);
glVertex3f(x+1, matrix[x+1][z+1], -z-1);
//vertex3 ends here
}
glEnd();
}}
由于互联网问题,我不得不编写代码而不是复制粘贴。所以可能有些事情我忘记了,但我已经尽力了。让我解释一下上面的变量和其他内容:
dted 是我创建的 dted 图像,我设置了图像宽度和高度值的边界。矩阵是一个二维矩阵,它保存了我从预先创建的 dted 图像像素中获得的高程值。
在上面的所有代码之后,我无法渲染地形。我不知道它是否渲染了地形,但它只是没有显示或者根本没有渲染。如果您解释我的错误在哪里并提出解决方案,那就太好了。
如果我犯了语法错误,我很抱歉,我希望我能很好地解释我的问题。如果我提供的代码不够用,请随意提及,其他部分我也可以写下来。
祝你有美好的一天。
编辑:好的,我在这里得到了一个新消息。在克服了鼠标问题的一些控制之后,我设法画了一个平原。但是,当我尝试获得幅度时,它什么也没显示。那是因为我猜幅度太大了,但是当我将它除以一个像 15 这样的常数时,同样的平原再次出现。这是因为我使用了 GL_TRIANGLE_STRIP 吗?
【问题讨论】:
-
首先,确保您能够绘图:从硬编码位置的一个三角形开始。第二:
matrix值在 0 和 1 之间?如果您将它们输入到glColor3f,它们应该是。你能检查一下吗? -
我检查了它,发现它不是。但是,我将它划分为 255(像素值从 0 到 255),它仍然没有显示任何内容。顺便说一句,我已经画了一个立方体,它显示得很好。
-
现在你必须检查你的相机:是不是太远了?平面是否垂直于它(这样就变成了一条细线)?尝试用乘数夸大 Y 值
-
我为此设置了一个鼠标事件,右键单击时缩小,左键单击时放大,这会改变 translatef 函数的 z 值。我确实将 Y 的幅度乘以 15 (matrix[x][z]*15),不出所料,我看不到它。你认为问题出在相机上吗?
-
是的,它可以指向其他地方
标签: c++ opengl rendering terrain