15th
Июн

3D НЕБО в DELPHI

Posted by bullvinkle under Пост-обзор

Здравствуйте уважаемые программисты, я пишу 3D движок и столкнулся с проблемой, как делать небо?
Если можно, то скажите как рисуется небо в авиа симуляторах?

Метод CubeMap, берешь 6 картиночек CubeMap, грузишь их при создании сцены и обрабатываешь типа:

Код:
procedure DrawSkyBox;
begin
  glColor3f(0.3,0.3,0.3);
  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  glPushMatrix;
  glTranslatef(Scene1.Player.x,Scene1.Player.y,Scene1.Player.z);
  glBindTexture(GL_TEXTURE_2D,Tex[SB_BACK]);
  glBegin(GL_QUADS);
    glTexCoord2f(1, 0);  glVertex3f(-SkyRad, -SkyRad, SkyRad);
    glTexCoord2f(0, 0);  glVertex3f(SkyRad, -SkyRad, SkyRad);
    glTexCoord2f(0, 1);  glVertex3f(SkyRad, SkyRad, SkyRad);
    glTexCoord2f(1, 1);  glVertex3f(-SkyRad, SkyRad, SkyRad);
  glEnd;
  glBindTexture(GL_TEXTURE_2D,Tex[SB_FRONT]);
  glPushMatrix;
    glRotatef(180, 0, 1, 0);
    glBegin(GL_QUADS);
      glTexCoord2f(1, 0);  glVertex3f(-SkyRad, -SkyRad, SkyRad);
      glTexCoord2f(0, 0);  glVertex3f(SkyRad, -SkyRad, SkyRad);
      glTexCoord2f(0, 1);  glVertex3f(SkyRad, SkyRad, SkyRad);
      glTexCoord2f(1, 1);  glVertex3f(-SkyRad, SkyRad, SkyRad);
    glEnd;
  glPopMatrix;
  glBindTexture(GL_TEXTURE_2D,Tex[SB_LEFT]);
  glPushMatrix;
    glRotatef(-90, 0, 1, 0);
    glBegin(GL_QUADS);
      glTexCoord2f(1, 0);  glVertex3f(-SkyRad, -SkyRad, SkyRad);
      glTexCoord2f(0, 0);  glVertex3f(SkyRad, -SkyRad, SkyRad);
      glTexCoord2f(0, 1);  glVertex3f(SkyRad, SkyRad, SkyRad);
      glTexCoord2f(1, 1);  glVertex3f(-SkyRad, SkyRad, SkyRad);
    glEnd;
  glPopMatrix;
  glBindTexture(GL_TEXTURE_2D,Tex[SB_RIGHT]);
  glPushMatrix;
    glRotatef(90, 0, 1, 0);
    glBegin(GL_QUADS);
      glTexCoord2f(1, 0);  glVertex3f(-SkyRad, -SkyRad, SkyRad);
      glTexCoord2f(0, 0);  glVertex3f(SkyRad, -SkyRad, SkyRad);
      glTexCoord2f(0, 1);  glVertex3f(SkyRad, SkyRad, SkyRad);
      glTexCoord2f(1, 1);  glVertex3f(-SkyRad, SkyRad, SkyRad);
    glEnd;
  glPopMatrix;
  glBindTexture(GL_TEXTURE_2D,Tex[SB_TOP]);
  glPushMatrix;
    glRotatef(-90, 1, 0, 0);
    glBegin(GL_QUADS);
      glTexCoord2f(0, 0);  glVertex3f(-SkyRad, -SkyRad, SkyRad);
      glTexCoord2f(0, 1);  glVertex3f(SkyRad, -SkyRad, SkyRad);
      glTexCoord2f(1, 1);  glVertex3f(SkyRad, SkyRad, SkyRad);
      glTexCoord2f(1, 0);  glVertex3f(-SkyRad, SkyRad, SkyRad);
    glEnd;
  glPopMatrix;
  glBindTexture(GL_TEXTURE_2D,Tex[SB_BOTTOM]);
  glPushMatrix;
    glRotatef(90, 1, 0, 0);
    glBegin(GL_QUADS);
      glTexCoord2f(1, 1);  glVertex3f(-SkyRad, -SkyRad, SkyRad);
      glTexCoord2f(1, 0);  glVertex3f(SkyRad, -SkyRad, SkyRad);
      glTexCoord2f(0, 0);  glVertex3f(SkyRad, SkyRad, SkyRad);
      glTexCoord2f(0, 1);  glVertex3f(-SkyRad, SkyRad, SkyRad);
    glEnd;
  glPopMatrix;
 glPopMatrix;
end;
end.

А т.н. окружение сцены можно делать просто скроллом картинок по небу, можно добавить 3Д анимацию. много можно чего…

Тема на форуме.

Похожие статьи

Теги: | |