Так выводится небо.
Код: Выделить всё
procedure draw_sky_box;
var
i, j:longint;
a,b,c,d:array[0..2] of glFloat;
radius:glFloat;
begin
radius:=200;
a[0]:=-radius;
a[1]:=radius;
a[2]:=radius;
b[0]:=radius;
b[1]:=radius;
b[2]:=radius;
c[0]:=radius;
c[1]:=radius;
c[2]:=-radius;
d[0]:=-radius;
d[1]:=radius;
d[2]:=-radius;
glBindTexture(gl_Texture_2D, sky_box_top.TextureGLUint);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3fv(@a);
glTexCoord2f(1, 0); glVertex3fv(@b);
glTexCoord2f(1, 1); glVertex3fv(@c);
glTexCoord2f(0, 1); glVertex3fv(@d);
glEnd();
a[0]:=radius;
a[1]:=-radius;
a[2]:=radius;
b[0]:=-radius;
b[1]:=-radius;
b[2]:=radius;
c[0]:=-radius;
c[1]:=-radius;
c[2]:=-radius;
d[0]:=radius;
d[1]:=-radius;
d[2]:=-radius;
glBindTexture(gl_Texture_2D, sky_box_bottom.TextureGLUint);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3fv(@a);
glTexCoord2f(1, 0); glVertex3fv(@b);
glTexCoord2f(1, 1); glVertex3fv(@c);
glTexCoord2f(0, 1); glVertex3fv(@d);
glEnd();
a[0]:=radius;
a[1]:=radius;
a[2]:=-radius;
b[0]:=radius;
b[1]:=radius;
b[2]:=radius;
c[0]:=radius;
c[1]:=-radius;
c[2]:=radius;
d[0]:=radius;
d[1]:=-radius;
d[2]:=-radius;
glBindTexture(gl_Texture_2D, sky_box_back.TextureGLUint);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3fv(@a);
glTexCoord2f(1, 0); glVertex3fv(@b);
glTexCoord2f(1, 1); glVertex3fv(@c);
glTexCoord2f(0, 1); glVertex3fv(@d);
glEnd();
a[0]:=radius;
a[1]:=radius;
a[2]:=radius;
b[0]:=-radius;
b[1]:=radius;
b[2]:=radius;
c[0]:=-radius;
c[1]:=-radius;
c[2]:=radius;
d[0]:=radius;
d[1]:=-radius;
d[2]:=radius;
glBindTexture(gl_Texture_2D, sky_box_left.TextureGLUint);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3fv(@a);
glTexCoord2f(1, 0); glVertex3fv(@b);
glTexCoord2f(1, 1); glVertex3fv(@c);
glTexCoord2f(0, 1); glVertex3fv(@d);
glEnd();
a[0]:=-radius;
a[1]:=radius;
a[2]:=-radius;
b[0]:=radius;
b[1]:=radius;
b[2]:=-radius;
c[0]:=radius;
c[1]:=-radius;
c[2]:=-radius;
d[0]:=-radius;
d[1]:=-radius;
d[2]:=-radius;
glBindTexture(gl_Texture_2D, sky_box_right.TextureGLUint);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3fv(@a);
glTexCoord2f(1, 0); glVertex3fv(@b);
glTexCoord2f(1, 1); glVertex3fv(@c);
glTexCoord2f(0, 1); glVertex3fv(@d);
glEnd();
a[0]:=-radius;
a[1]:=radius;
a[2]:=radius;
b[0]:=-radius;
b[1]:=radius;
b[2]:=-radius;
c[0]:=-radius;
c[1]:=-radius;
c[2]:=-radius;
d[0]:=-radius;
d[1]:=-radius;
d[2]:=radius;
glBindTexture(gl_Texture_2D, sky_box_front.TextureGLUint);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3fv(@a);
glTexCoord2f(1, 0); glVertex3fv(@b);
glTexCoord2f(1, 1); glVertex3fv(@c);
glTexCoord2f(0, 1); glVertex3fv(@d);
glEnd();
end;
Прошу помидорами не кидать. Это просто для теста. Очень долго не мог сделать небо. Пока так. Знаю что можно короче

Так текстуры грузим.
Код: Выделить всё
procedure TGLTexture_class.init(const TFN: String);
const
GL_CLAMP_TO_EDGE=$812F;
begin
TextureFileName:=TFN;
LoadFromFile;
glGenTextures(1, @TextureGLUint);
glBindTexture(GL_TEXTURE_2D, TextureGLUint);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,TextureWidth,TextureHeight,0,GL_RGB,GL_UNSIGNED_BYTE,TextureBits);
end;
end.
Это init:
Код: Выделить всё
procedure my_init;
begin
glutInit(@argc, argv);
glutInitDisplayMode(GLUT_RGB or GLUT_DOUBLE or GLUT_DEPTH);
glutInitWindowSize(640, 480);
glutCreateWindow('FOP');
glutDisplayFunc(@Display);
glutReshapeFunc(@reshape);
glutTimerFunc(16, @timerfunction, 0);
glEnable(gl_depth_test);
my_procedure;
glutKeyboardFunc(@onKeyboard);
glutKeyboardUpFunc(@onKeyboardUp);
glutSpecialFunc(@onKeyboardSpecial);
glutSpecialUpFunc(@onKeyboardSpecialUp);
glutPassiveMotionFunc(@onMouse);
glutIdleFunc(@my_idle);
glShadeModel(gl_flat);
glClearColor(0.0, 0.0, 0.0, 0.0);
glColor3f (1, 0, 1);
glEnable(GL_TEXTURE_2D);
End;