- ApplicationEventsIdle:
- glViewPort(0, 0, panMain.ClientWidth, panMain.ClientHeight);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity;
- gluPerspective(60, panMain.ClientWidth/panMain.ClientHeight, 0.1, 128);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
- Camera.UseMatrix;
- glScalef(zoom,zoom,-zoom); //Z-Achse umkehren
- glColor3f(0.5,0.5,0.5);
- if Map <> nil then
- Map.Draw;
- glColor3f(1,1,1);
- ShowText;
- SwapBuffers(DC);
- Done := False;
- Camera.UseMatrix:
- var RotMatrix : THomogeneousMatrix;
- begin
- RotMatrix := Rotation;
- MatrixInvert(RotMatrix);
- glMultMatrixf(@RotMatrix[0,0]);
- glTranslatef(-Position[0], -Position[1], -Position[2]);
- end;
- Map.Draw:
- Frustum.Calculate;
- for i := -100 to 100 do
- for j := -100 to 100 do
- if Frustum.IsPointWithin(i,0,j) then
- DrawPoint(i,j);
- DrawPoint:
- procedure DrawPoint(a,b:integer);
- var y:single;
- begin
- y := 0;
- //obenlinks
- glBegin(GL_LINE_LOOP);
- glVertex3f(a-0.5,0,b+0.5);
- glVertex3f(a-0.5,0,b);
- glVertex3f(a,y,b);
- glVertex3f(a,0,b+0.5);
- glEnd;
- //obenrechts
- glBegin(GL_LINE_LOOP);
- glVertex3f(a,0,b+0.5);
- glVertex3f(a,y,b);
- glVertex3f(a+0.5,0,b);
- glVertex3f(a+0.5,0,b+0.5);
- glEnd;
- //untenlinks
- glBegin(GL_LINE_LOOP);
- glVertex3f(a-0.5,0,b);
- glVertex3f(a-0.5,0,b-0.5);
- glVertex3f(a,0,b-0.5);
- glVertex3f(a,y,b);
- glEnd;
- //untenrechts
- glBegin(GL_LINE_LOOP);
- glVertex3f(a,y,b);
- glVertex3f(a,0,b-0.5);
- glVertex3f(a+0.5,0,b-0.5);
- glVertex3f(a+0.5,0,b);
- glEnd;
- end;