Проблема рендеринга сетки при вращении - PullRequest
0 голосов
/ 04 февраля 2011

Я успешно загружаю свою сетку с 100000 лиц. Это Стэнфордская модель дракона. он отлично воспроизводится, но я вижу треугольники при вращении.

Например. Я смотрю на дракона лицом вверх и нажимаю стрелку вправо на клавиатуре, чтобы увеличить угол на 5 градусов. Не всегда, но в большинстве случаев я вижу треугольники модели (как насквозь) между состояниями. если я использую specialFunc, чтобы сделать вращение без остановки, это похоже на эффект транспортера из Star Trek, который на самом деле выглядит круто, но когда вы пытаетесь создать игровой движок ... это не хорошо

Вот функция рисования:

void draw(){
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();             

  gluLookAt(0 , 5, -40 , 0 , 5 , 0 , 0, 1 ,0);




  loadTexture l;
  GLuint image;
  l.loadFile("wall.jpg",image);

  glBegin(GL_QUADS);
  glTexCoord2f(0.0f, 0.0f);
  glVertex3f(-40, -40, 25);
  glTexCoord2f(0.0f, 1.0f);
  glVertex3f(-40, 40, 25);
  glTexCoord2f(1.0f, 1.0f);
  glVertex3f(40, 40, 25);
  glTexCoord2f(1.0f, 0.0f);
  glVertex3f(40, -40, 25);
  glEnd();

  glDeleteTextures(1, &image);

  l.loadFile("floor.jpg",image);

  glBegin(GL_QUADS);
  glTexCoord2f(0.0f, 0.0f);
  glVertex3f(-40, 0, -45);
  glTexCoord2f(0.0f, 1.0f);
  glVertex3f(-40, 0, 45);
  glTexCoord2f(1.0f, 1.0f);
  glVertex3f(40, 0, 45);
  glTexCoord2f(1.0f, 0.0f);
  glVertex3f(40, -0, -45);
  glEnd();

  glDeleteTextures(1, &image);

  glMaterialf (GL_FRONT, GL_SHININESS, 90.0);
  glRotatef(angle , 0, 1,0);
  glPushMatrix();

  glCallList(b);
  glPopMatrix();

  /*
  glTranslatef(-5, 0, 0);
  glRotatef(45, 0, 1,0);
  glPushMatrix();
  glCallList(b);
  glPopMatrix();
  */

  // swap buffers to display, since we're double buffered.

  glFlush();
  glutSwapBuffers();
}

и функция вращения я делаю

void animate(int key, int w, int h){
    switch (key){
        case GLUT_KEY_RIGHT:
            angle = angle + 5;
            break;
        default:
            break;
    }
    glutPostRedisplay();
}

Я ищу в Google почти неделю, и я думаю, что не сделал ничего плохого, но так как греческий язык является моим основным языком, я мог использовать некоторые неправильные ключевые слова.

...