c++ - 看不见的地形

标签 c++ opengl graphics 3d terrain

我正在使用 GL_TRIANGLE_STRIP 将地形绘制到屏幕上,但是当我编译并运行该程序时,我什么也没得到。当我将 GL_TRIANGLE_STRIP 更改为 GL_LINES 时,它会显示并工作。我该怎么做才能让它与 GL_TRIANGLE_STRIP 一起工作?

void drawScene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -10.0f);
glRotatef(30.0f, 1.0f, 0.0f, 0.0f);
glRotatef(-_angle, 0.0f, 1.0f, 0.0f);

GLfloat ambientColor[] = {.5, .5, .5, 1.0f};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientColor);
float scale = 5.0f / max(63.0,63.0);
glScalef(scale, scale*10, scale);
glTranslatef(-(float)(63.0) / 2, 0.0f, -(float)(63.0) / 2);
     /*GLfloat lightColor0[] = {0.6f, 0.6f, 0.6f, 1.0f};
     GLfloat lightPos0[] = {-0.5f, 4, 32, 0.0f};
     glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor0);
     glLightfv(GL_LIGHT0, GL_POSITION, lightPos0);*/



glColor3f(0.3f, 0.9f, 0.0f);
for(int x = 0;x<64;x++){
    glBegin(GL_LINES);
    for(int z = 0;z<63;z++){
        glNormal3f(0,1,0);
        Vertex(x,map[x][z],z);
        Vertex(x,map[x][z+1],z+1);
    }
    glEnd();
}
for(int z = 0;z<64;z++){
    glBegin(GL_LINES);
    for(int x = 0;x<63;x++){
        Vertex(x,map[x][z],z);
        Vertex(x+1,map[x+1][z],z);
    }
    glEnd();
}

我不确定这是否重要,但对于我的地形,我有代码使其成为 3d 高斯分布。

最佳答案

通过 Google 搜索找到了 TRIANGLE_STRIP 的解释。 Wikipedia上有插图.

我的建议是打印出顶点数据的前五个顶点,然后在纸上手工绘制。 GL_LINES 工作的事实表明正确的顶点就在那里,您可能只是以错误的顺序绘制它们。

另一条建议是禁用 backface culling .

glDisable(GL_CULL_FACE);

关于c++ - 看不见的地形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8752247/

相关文章:

c++ - 如何选择 SQLite 日期格式

c++ - 指针语法 C++

opengl - 在单个OpenGL程序中附加多个相同类型的着色器?

flash - 在 Flash 中重绘数百个粒子的有效方法?

r - R 中的高性能 2D OpenGL 图形用于使用 qtpaint (qt) 或 rdyncall (SDL/OpenGL) 包快速显示光栅图像?

C++ 环境变量

c++ - 是否有可能像 Java 一样通过在 VM 中运行来使 C++ 平台独立?

c++ - 在 OpenGL 中快速画线

c++ - 我的 C++ OpenGL SDL 程序未按我的预期运行

java - 绘图 : eg. Graphics.drawRect 或 Rectangle.draw 之间的差异