Последние записи
- Получение картинки с веб-камеры
- Скопировать определённый кусок image
- Сделать printscreen экрана и сохранить
- Написать программу, считывает с клавиатуры определенное колличество цифр, а на экран выводит сумму наибольшей цифры
- Создать системную, невидимую, только для чтения папку
- Какой яп и ide выбрать для кроссплатформенного программирования?
- Скачать html страницу в memo с помощью indy
- Как разорвать adsl соединение с интернетом?
- Как отключить/включить сетевое соединение?
- Передать состояние CheckBox
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Д анимацию. много можно чего…

