我有一个从dted文件创建的位图。我想使用该位图并创建一个三维地形渲染。我试图用顶点向量来做,但我根本无法达到目标。这是我的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是我创建的图像,我从图像宽度和高度值设置边界。矩阵是一个二维矩阵,它保存从预先创建的图像像素中获得的高程值。
完成上述所有代码后,我无法渲染地形。我不知道它是否渲染了地形,但它只是没有显示我或它根本没有渲染。如果你解释我的错误在哪里并为它提出解决方案,那就太好了。
如果我做了任何语法错误,我很抱歉,我希望我能很好地解释我的问题。如果我提供的代码不够,请随意提及,我也可以写下其他部分。
祝你有个愉快的一天。
编辑:好的我在这里得到了一个新消息。在完成鼠标问题的控制之后,我设法画了一个平原。然而,当我试图获得振幅时,它什么都没有显示出来。因为我猜的振幅太大了,但当我将它除以15的常数时,同样的平原再次显现出来。这是因为我使用了GL_TRIANGLE_STRIP
吗?
答案 0 :(得分:0)
您的渲染代码看起来很奇怪:您使用退化三角形构建三条带,并可能访问不存在的数据。我猜测了你的其余方法并尝试修复你的方法。试试这个:
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() - 2; 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][z + 1], matrix[x][z + 1], matrix[x][z + 1]);
glVertex3f(x, matrix[x][z + 1], -z - 1);
//vertex1 ends here
}
glEnd();
}}
除此之外,三角形条纹很好。如果您仍然没有看到任何内容,请按照Sga的建议使用GL_POINTS。然后修复相机/其他渲染代码,直到看到它们为止。
答案 1 :(得分:0)
对于正在寻找解决方案的其他人:确保你的glFrustum的zNear参数远远不足以看到事情。我的关闭,当我增加它时,问题就解决了。