隐形地形

时间:2012-01-06 01:18:32

标签: 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高斯分布。

2 个答案:

答案 0 :(得分:2)

Google搜索可以找到对TRIANGLE_STRIP的解释。 Wikipedia上有一个插图。

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

另一条建议是禁用backface culling

glDisable(GL_CULL_FACE);

答案 1 :(得分:1)

随着黑暗中的随机刺伤,你有没有打开剔除?它可能不是绘制任何三角形,因为三角形的背面是不可见的。尝试添加:

glDisable(GL_CULL_FACE);

要初始化代码,或只是删除:

glEnable(GL_CULL_FACE);

来自初始代码。