我正在使用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高斯分布。
答案 0 :(得分:2)
Google搜索可以找到对TRIANGLE_STRIP的解释。 Wikipedia上有一个插图。
我的建议是打印出顶点数据的前五个顶点,并在纸上手工绘制。 GL_LINES工作的事实表明右边的顶点在那里,你可能只是以错误的顺序绘制它们。
另一条建议是禁用backface culling。
glDisable(GL_CULL_FACE);
答案 1 :(得分:1)
随着黑暗中的随机刺伤,你有没有打开剔除?它可能不是绘制任何三角形,因为三角形的背面是不可见的。尝试添加:
glDisable(GL_CULL_FACE);
要初始化代码,或只是删除:
glEnable(GL_CULL_FACE);
来自初始代码。