[英]OpenGL heightmap terrain render does not draw
我有一个从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
吗?
您的渲染代码似乎很奇怪:您用退化的三角形构建了Tri Strip,并可能访问不存在的数据。 我猜到了其余的方法,并试图修复您的方法。 尝试这个:
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。 然后修复您的相机/其他渲染代码,直到看到它们为止。
对于正在寻找解决方案的其他人员:确保glFrustum的zNear参数足够远,可以看到事物。 我的矿要关闭,当我增加它时,问题就解决了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.