2012-01-06 74 views
2

我正在使用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高斯分布的代码。

+1

截图。 – 2012-01-06 01:20:07

+2

不要打扰使用固定功能,即使手机不使用它也如此陈旧。 – Puppy 2012-01-06 01:30:05

+0

@DeadMG如果你想要做的就是在屏幕上获取一些东西,这很好。关于固定功能弃用的好处在于它使得OpenGL变得精益和敏捷(因为它应该与另一个API竞争),但是它为增加学习曲线做了很多工作。除非你购买超级圣经,当然:)。 – 2012-01-06 01:43:43

回答

2

对TRIANGLE_STRIP的解释可以通过Google搜索找到。有关于Wikipedia的插图。

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

另一条建议是禁用backface culling

glDisable(GL_CULL_FACE); 
+0

剔除始终是我在这些场景中关闭的第一件事情之前,它才被贬低。肯定听起来像是你用错误的方式缠绕你的顶点。 – 2012-01-06 01:31:47

1

作为一个在黑暗中随机刺伤,你有扑灭打开?这可能是因为三角形的背面是不可见的,所以它不绘制任何三角形。尝试添加:

glDisable(GL_CULL_FACE); 

要你初始化代码,或者干脆删除:

glEnable(GL_CULL_FACE); 

从您的初始化代码。