WILL
01-09-2009, 04:51 PM
Hey does anyone know how to go about drawing something in 3D in Ortho mode? I'm having a bit of trouble. My standard way of setting up Ortho Mode doesn't seem to allow this.
I use the following...
procedure BeginOrtho;
var
Width, Height: Single;
ViewPort: TViewPortArray;
begin
glGetIntegerv(GL_VIEWPORT, @ViewPort[0]);
Width := ViewPort[2];
Height := ViewPort[3];
glDisable(GL_DEPTH_TEST); //turn off z buffer
glMatrixMode(GL_PROJECTION); //set projection matrix
glPushMatrix; //push it
glLoadIdentity(); //reset
glOrtho(0, Width, Height, 0, 0, 100); //ortho view
glMatrixMode(GL_MODELVIEW); //return to modelview
glLoadIdentity(); //reset
end;
procedure EndOrtho;
begin
glEnable(GL_DEPTH_TEST); //turn on z buffer
glMatrixMode(GL_PROJECTION); //set projection matrix
glPopMatrix; //restore projection
glMatrixMode(GL_MODELVIEW); //set modelview matrix
glLoadIdentity(); //reset
end;
I then would use it somewhat like this...
BeginOrtho;
glPushMatrix; //Save Current Matrix
glTranslatef((ScreenWidth div 2 - TileSize div 2) - (Player.X * TileSize) + ScreenX,
(ScreenHeight div 2 - TileSize div 2) - (Player.Y * TileSize) + ScreenY, 0);
if (OLD_WATER) then
glCallList(List_DrawWater[AniCounter mod 18]);
glCallList(List_DrawFloor);
glCallList(List_DrawSwitches);
glPopMatrix;
EndOrtho;
Any ideas or information appreciated. Thanks.
I use the following...
procedure BeginOrtho;
var
Width, Height: Single;
ViewPort: TViewPortArray;
begin
glGetIntegerv(GL_VIEWPORT, @ViewPort[0]);
Width := ViewPort[2];
Height := ViewPort[3];
glDisable(GL_DEPTH_TEST); //turn off z buffer
glMatrixMode(GL_PROJECTION); //set projection matrix
glPushMatrix; //push it
glLoadIdentity(); //reset
glOrtho(0, Width, Height, 0, 0, 100); //ortho view
glMatrixMode(GL_MODELVIEW); //return to modelview
glLoadIdentity(); //reset
end;
procedure EndOrtho;
begin
glEnable(GL_DEPTH_TEST); //turn on z buffer
glMatrixMode(GL_PROJECTION); //set projection matrix
glPopMatrix; //restore projection
glMatrixMode(GL_MODELVIEW); //set modelview matrix
glLoadIdentity(); //reset
end;
I then would use it somewhat like this...
BeginOrtho;
glPushMatrix; //Save Current Matrix
glTranslatef((ScreenWidth div 2 - TileSize div 2) - (Player.X * TileSize) + ScreenX,
(ScreenHeight div 2 - TileSize div 2) - (Player.Y * TileSize) + ScreenY, 0);
if (OLD_WATER) then
glCallList(List_DrawWater[AniCounter mod 18]);
glCallList(List_DrawFloor);
glCallList(List_DrawSwitches);
glPopMatrix;
EndOrtho;
Any ideas or information appreciated. Thanks.