- procedure TSkybox.DrawBox(pos : TVector3f);
- var px,py,pz : GLFloat;
- dov : single;
- begin
- if not HasBeenSet then exit;
- Engine.Main.LastTexId := -1;
- glEnable(GL_TEXTURE_2D);
- if FList = -1 then begin
- dov := Engine.Map.WORLD_MAX*2;
- // left, back und top sind falsch
- px := (- dov / 2);//+pos.x;
- py := (- dov / 2);//+pos.y;
- pz := (- dov / 2);//+pos.z;
- FList := glGenLists(1);
- glNewList(FList, GL_COMPILE);
- // Back
- glColor3f(1,1,1);
- glBindTexture(GL_TEXTURE_2D, FTextures[3]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glBegin(GL_QUADS);
- glTexCoord2f(1, 0); glVertex3f(px + dov, py, pz);
- glTexCoord2f(1, 1); glVertex3f(px + dov, py + dov, pz);
- glTexCoord2f(0, 1); glVertex3f(px, py + dov, pz);
- glTexCoord2f(0, 0); glVertex3f(px, py, pz);
- glEnd;
- // Front
- glBindTexture(GL_TEXTURE_2D, FTextures[2]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glBegin(GL_QUADS);
- glTexCoord2f(1, 0); glVertex3f(px, py, pz + dov);
- glTexCoord2f(1, 1); glVertex3f(px, py + dov, pz + dov);
- glTexCoord2f(0, 1); glVertex3f(px + dov, py + dov, pz + dov);
- glTexCoord2f(0, 0); glVertex3f(px + dov, py, pz + dov);
- glEnd;
- // Bottom
- glBindTexture(GL_TEXTURE_2D, FTextures[5]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glBegin(GL_QUADS);
- glTexCoord2f(1, 1); glVertex3f(px, py, pz);
- glTexCoord2f(1, 0); glVertex3f(px, py, pz + dov);
- glTexCoord2f(0, 0); glVertex3f(px + dov, py, pz + dov);
- glTexCoord2f(0, 1); glVertex3f(px + dov, py, pz);
- glEnd;
- // Top
- glBindTexture(GL_TEXTURE_2D, FTextures[4]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glBegin(GL_QUADS);
- glTexCoord2f(0, 0); glVertex3f(px+dov, py + dov, pz);
- glTexCoord2f(1, 0); glVertex3f(px+dov, py + dov, pz + dov);
- glTexCoord2f(1, 1); glVertex3f(px, py + dov, pz + dov);
- glTexCoord2f(0, 1); glVertex3f(px, py + dov, pz);
- glEnd;
- // Left
- glBindTexture(GL_TEXTURE_2D, FTextures[1]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glBegin(GL_QUADS);
- glTexCoord2f(1, 1); glVertex3f(px, py + dov, pz);
- glTexCoord2f(0, 1); glVertex3f(px, py + dov, pz + dov);
- glTexCoord2f(0, 0); glVertex3f(px, py, pz + dov);
- glTexCoord2f(1, 0); glVertex3f(px, py, pz);
- glEnd;
- // Right
- glBindTexture(GL_TEXTURE_2D, FTextures[0]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glBegin(GL_QUADS);
- glTexCoord2f(0, 0); glVertex3f(px + dov, py, pz);
- glTexCoord2f(1, 0); glVertex3f(px + dov, py, pz + dov);
- glTexCoord2f(1, 1); glVertex3f(px + dov, py + dov, pz + dov);
- glTexCoord2f(0, 1); glVertex3f(px + dov, py + dov, pz);
- glEnd;
- glEndList;
- end;
- // Call the Displaylist of our Skybox
- // glLoadIdentity;
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix;
- glTranslatef(pos.X, pos.y, pos.Z);
- glCallList(FList);
- glPopMatrix;
- end;