2012-01-06 21 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); 

從您的初始化代碼。