繁体   English   中英

OpenGL高度图terrain渲染不绘制

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM