- const
- Rotate_Local_X = 1;
- Rotate_Local_Y = 2;
- Rotate_Local_Z = 3;
- Rotation_Speed = 0.8;
- Move_Speed = 0.02;
- implementation
- procedure SetDCPixelFormat(Handle:HDC);
- .. Initialisierung
- procedure DrawTheObject;
- ... Objekt, ein 3D-Dreieck
- procedure UpdateRotation(RotAxis: Integer; Ang: Single);
- var
- TmpMat : TMatrix4f;
- begin
- Ang := DegToRad(Ang);
- if RotAxis = ROTATE_LOCAL_Y then
- begin
- TmpMat := CreateRotationMatrix(LocalY, Ang);
- LocalX := VectorTransform(LocalX, TmpMat);
- LocalZ := VectorTransform(LocalZ, TmpMat);
- ObjMat := MatrixMultiply(ObjMat, TmpMat);
- end else
- NormalizeVector(LocalX);
- LocalY := VectorCrossProduct(LocalZ, LocalX);
- NormalizeVector(LocalY);
- LocalZ := VectorCrossProduct(LocalX, LocalY);
- NormalizeVector(LocalZ);
- end;
- procedure glDraw;
- begin
- // glClearColor(0,0,0,0);
- // Den Ausgabe-Bereich und T-Buffer leeren.
- // glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
- //Einheitsmatrix wiederherstellen.
- glLoadIdentity;
- // Das Objekt positionieren.
- glTranslate( PosVect[0], PosVect[1], PosVect[2]);
- // Das Koordinatensystemzeichnen.
- // DrawCoordSys;
- // Die Matrix für die Korrekte Positionierung des Objektes setzen.
- glMultMatrixf(@ObjMat);
- //Das Objekt und das lokale Koodrinaten-System zeichnen.
- DrawTheObject;
- swapbuffers(DC);
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- LocalX[0]:=1;
- LocalX[1]:=0;
- LocalX[2]:=0;
- LocalY[0]:=0;
- LocalY[1]:=1;
- LocalY[2]:=0;
- LocalZ[0]:=0;
- LocalZ[1]:=0;
- LocalZ[2]:=1;
- dc:=getdc(form1.handle);
- setdcpixelformat(DC);
- glClearColor(0.6,0.6,0.6,1);
- glclear(GL_color_buffer_bit or gl_depth_buffer_bit);
- HRC:=wglCreateContext(dc);
- wglMakeCurrent(dc,HRC);
- ObjMat:=IdentityHmgMatrix;
- gldraw;
- wglMakeCurrent(0,0);
- end;
- procedure TForm1.Button1KeyPress(Sender: TObject; var Key: Char);
- UpdateRotation(Rotate_Local_Y,Rotation_Speed);