2012-06-19 3 views
0

Я хочу реализовать радар для своей 3D-игры, используя openGL. Я пытался сделать это по-разному, но никто из них не утверждал, что он прав. Ниже приведен фрагмент моего кода ниже:Почему моя реализация OpenGL Radar не отображается на экране?

int xi, yi; 
GLfloat x,z; 
glPushMatrix(); 
{ 
    glTranslatef(-0.8f, 0.2f, -3.0f); 

    glColor3f(0.0f, 0.0f, 1.0f); 
    x = playerTank->givePosX(); 
    z = playerTank->givePosZ(); 
    xi = (int)((x + 1000)/20) + 5; 
    yi = (int)(((z + 1000)/20) + screenHeight - 105); 
    glPushMatrix(); 
    { 
     glScalef(xi,yi,1.0f); 
     glBegin(GL_QUADS); 
     glVertex2i(xi-5, yi-5); 
     glVertex2i(xi+5, yi-5); 
     glVertex2i(xi+5, yi+5); 
     glVertex2i(xi-5, yi+5); 
     glEnd(); 
    } 
    glPopMatrix(); 

    glColor3f(1.0f, 0.0f, 0.0f); 
    glPushMatrix(); 
    { 
     glScalef(xi,yi,1.0f); 
     for (int i = 0; i < tanks.size(); i++) 
     { 
      x = tanks[i]->givePosX(); 
      z = tanks[i]->givePosZ(); 
      xi = (int)((x + 1000)/20) + 5; 
      yi = (int)(((z + 1000)/20) + screenHeight - 105); 
      if (xi > 0 && xi < 110 && yi > (screenHeight - 110) && yi < screenHeight) 
      { 
       if (tanks[i] != playerTank) 
       { 
        glBegin(GL_TRIANGLES); 
        glVertex2i(xi, yi-5); 
        glVertex2i(xi+5, yi+5); 
        glVertex2i(xi-5, yi+5); 
        glEnd(); 
       } 
      } 
     } 
    } 
    glPopMatrix(); 

    glColor3f(0.0f, 1.0f, 0.0f); 
    glPushMatrix(); 
    { 
     glScalef(xi,yi,1.0f); 
     for (int i = 0; i < obstacles.size(); i++) 
     { 
      x = obstacles[i]->givePosX(); 
      z = obstacles[i]->givePosZ(); 
      xi = (int)((x + 1000)/20) + 5; 
      yi = (int)(((z + 1000)/20) + screenHeight - 105); 

      glBegin(GL_LINE_LOOP); 
      glVertex2i(xi-3, yi-3); 
      glVertex2i(xi+3, yi-3); 
      glVertex2i(xi+3, yi+3); 
      glVertex2i(xi-3, yi+3); 
      glEnd(); 
     } 
    } 
    glPopMatrix(); 
} 
glPopMatrix(); 

Почему ничего не появляется на экране?

+4

В частности, в чем проблема? Что неверно в вашей текущей реализации? –

+0

Вы переписываете значения 'xi' и' yi' в цикле резервуара, а затем используете их в 'glScalef()' перед контуром препятствия. Это предназначено? – genpfault

+0

@ JonCage, я тоже этого не знаю, я надеялся, что кто-то скажет мне. :(Это ничего не дает мне на моем экране, так что это немного запутывает меня, почему это не будет работать.! Genpflaut Хорошее наблюдение, исправит его сейчас и посмотрит, что будет дальше. – Takarakaka

ответ

0

Некоторые вещи, чтобы попробовать:

  1. Убедитесь, что вы создали визуализатор правильно - то, что звонки вы делаете, чтобы установить сцену? Посмотрите на some of the lessons on nehe для некоторых советов.
  2. Сделайте простой квадрат размера экрана. Вы делаете что-то по этим линиям в верхней части (синий квадрат справа?), Но убедитесь, что он центрирован - похоже, вы можете подталкивать его и править на 1000 единиц.
  3. Проверьте, что вы наматываете правильный путь. Похоже, вы из моих довольно ржавых воспоминаний OGL.
  4. Попробуйте перевести в разные стороны. Похоже на то, что вы можете перевести неправильный путь со своим первым translatef.
+0

отлично! попробуем их все и посмотрим, что произойдет. – Takarakaka

+0

Я установил объект на сцене, однако он слишком велик, так что я сейчас в дилемме, нужно ли использовать glOrtho или изменять параметры glTranslate? Btw. Спасибо за помощь! :) – Takarakaka

+0

Нет проблем - я помню, что я сталкивался с такими же проблемами, когда я начинал с OpenGL. Мне просто жаль, что в те дни у меня не было stackoverflow! Вы всегда можете масштабировать номера, которые вы используете немного, если они слишком большие для экрана ... –

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