2012-01-06 4 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

Скриншоты, пожалуйста. –

+2

Не беспокойтесь, используя фиксированную функцию, это настолько старые, что даже телефоны не используют ее. – Puppy

+0

@DeadMG Это нормально, если все, что вы хотите сделать, это получить некоторые вещи на экране. Самое замечательное в том, что он устарел от устаревания, так это то, что он сделан и гибкий OpenGL (как и должен конкурировать с другим API), однако он многое сделал для увеличения кривой обучения. Если вы не купите Супер Библию, конечно :). –

ответ

2

Объяснение TRIANGLE_STRIP находится в поиске Google. Существует иллюстрация на Wikipedia.

Мой совет - распечатать первые пять вершин ваших данных вершин и нарисовать их вручную на бумаге. Тот факт, что GL_LINES работает, указывает на то, что правильные вершины есть, вы можете просто нарисовать их в неправильном порядке.

Еще один совет - отключить backface culling.

glDisable(GL_CULL_FACE); 
+0

Culling - это всегда первое, что я отключу в этих сценариях.Определенно звучит так, будто вы наматываете своих вертов неправильно. –

1

Как случайный удар в темноте, у вас есть отбраковка? Может быть, он не рисует никаких треугольников, потому что обратная сторона треугольников невидима. Попробуйте добавить:

glDisable(GL_CULL_FACE); 

Чтобы вы инициализации кода или простого удаления:

glEnable(GL_CULL_FACE); 

из кода инициализации.

Смежные вопросы