Ein paar Fragen zu OpenGL beim Umstieg von Canvas

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Ein paar Fragen zu OpenGL beim Umstieg von Canvas

Beitrag von 400kmh »

Hallo, ich versuche derzeit, mir einige Grundfähigkeiten, die ich mit Canvas besitze, mit OpenGL anzueignen. Gewisse grundsätzliche Dinge scheinen sehr einfach zu funktionieren, bei anderen könnte ich etwas Hilfe gebrauchen.

Was ich bisher gemacht habe:

- lazopenglcontext über Projektinspektor hinzugefügt.

Code: Alles auswählen

uses lazopenglcontext, gl, glu

Code: Alles auswählen

var OpenGLControl1: TOpenGLControl;

Code: Alles auswählen

OpenGLControl1:=TOpenGLControl.Create(Form1); 
with OpenGLControl1 do begin
  Width:=800;
  Height:=800;
end;   

Code: Alles auswählen

Procedure TForm1.TimerTimer(Sender: TObject);
begin 

glClearColor(0.0, 0.0, 0.0, 1.0);           
glClear(GL_COLOR_BUFFER_BIT);      

glBegin(GL_POLYGON);
  glColor3f (0.0, 1.0, 0.0);
  glVertex2f (-0.5, -0.5);
  glVertex2f (+0.5, -0.5);
  glVertex2f (+0.5, +0.5);
  glVertex2f (-0.5, +0.5);
glEnd;

OpenGLControl1.SwapBuffers;  
  
end;
Das funktioniert. Es wird ein schwarzes 800x800 großes Feld mit farbigem Polygon in der Mitte gezeichnet. In Beispielen habe ich meist noch mehr Code gesehen, der aber anscheinend für so etwas einfaches nicht gebraucht wird. So weit - so gut.

Bisher habe ich an Canvas jedoch einige Anforderungen gehabt, bei denen ich noch nicht weiß, wie ich sie mit OpenGL umsetzen kann. Dazu zählen:

- Mehrere separate Zeichenflächen: Es soll eine Szene aus mehreren Blickwinkeln dargestellt werden. Dazu habe ich einfach mehrere Bitmaps mit Canvas benutzt, die über die unterschiedlichen Namen der Bitmaps separat angesprochen werden konnten. Bei den gl-Funktionen steht hingegen nicht dabei zu welcher OpenGLControl sie gehören. Sie scheinen einfach auf die erste erschaffene bezogen zu werden. Wie kann man separat mit mehrere OpenGLControls arbeiten?

- Verdeckte Zeichenflächen im Hintergrund: Manche Bitmaps habe ich lediglich dazu verwendet um auf ihnen nach einer Zeichnung die Farben an bestimmten Positionen zu messen. Sichtbar waren diese Bitmaps jedoch nicht. Wie kann ich eine OpenGLControl verstecken?

- Farben habe ich mit Canvas.Pixels[x,y] gemessen und dann mit einer TColor verglichen. Z. B. so:

Code: Alles auswählen

if Bitmap1.Canvas.Pixels[100,100]=RGBToColor(R,G,B) then
Wie lässt sich das mit OpenGL umsetzen?

- Beschriftung: Wie gebe ich Text mit OpenGL aus? Mit Canvas kann ich z. B. auch Schriftgröße und Schriftart festlegen. Wie geht das mit OpenGL?

Neben einer höheren Geschwindigkeit kann OpenGL auch Schnick-Schnack wie Kantenglättung bieten. Hat für mich zwar momentan keine Priorität, aber gibt es vielleicht eine einfache Möglichkeit Kantenglättung anzuschalten?

Antworten