hi ich bin neu hier und wollte eigendlich mit openGL anfangen nachdem ich in delphi mein 3D Rennspiel weit gebracht habe und schliesslich an einem (anscheinen unlösbaren) problem mit der Z-Axe hängen blieb... wie auch immer... wo war ich?
mein ergebnis war dann am ende ein leeres fenster (man bin ich stolz auf mich) das genauso aussah wie wenn ich garnichts mache-also weiss und nichts drauf
hier is mien quellcode kine ahnung was da fehlt...
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Na ja. So viel anders als eine Canvas ist das gar nicht. Du musst nur halt deine Canvas zu Begin einmal erstellen und diverse Einstellungen setzen damit die Richtige Darstellung erzielt wird.
Du hast in deinem Falle sofort nach dem Erstellen des RCs dein Dreieck gezeichnet. Anschließen löscht du aber den Inhalt des RCs.
Code:
procedure TForm1.FormCreate(Sender:TObject);
begin
// Kontex erstellen
DC := GetDC(Handle);
RC := CreateRenderingContext(...);
ActivateRenderingContext(DC, RC);
// Resize wird nicht automatisch aufgerufen deswegen muss
// das hier einmal per hand aufgerufen werden.
// Ansicht setzen
FormResize(Self);
// Hier solltest du noch ein paar globale Einstellungen setzen.
glClearColor(0.4,0.4,0.4,0.0);// Löschfarbe
glClearDepth(1.0);// Tiefenlöschwert
glEnable(GL_DEPTH_TEST);// Tiefentest
// Ich weiß nicht ob die Zeichenrichtung der Fläche stimm deswegen
// erst einmal Deaktivieren bis etwas sichtbar ist. Anschließend kann
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
// Modelview zurücksetzen
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
// Dinge zeichnen
glTranslatef(-1.5,0,-6);
// Farbe sollte vor dem Zeichnen gesetzt werden
glColor3f(1,0,0);
glBegin(GL_TRIANGLES);
glVertex3f(-1,-1,0);
glVertex3f(1,-1,0);
glVertex3f(0,1,0);
glEnd;
// Dafür sorgen, dass das gezeichnete auch dargestellt wird.
// Den hinteren Buffer nach vorne holen
SwapBuffers(DC);
end;
Ich habe den Code nicht getestet aber es besteht die Chance einer wagen Möglichkeit, dass wenigstens etwas davon funktioniert. In diesem Sinne. Es ist spät.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Ich glaube, die gegenwärtigen Templates sind auf SDL eingestellt. Und ich erinnere mich daran, dass ich, als ich anfing, mir Beispiele anzuschauen, immer verwirrt war: Delphi-Programme, die nicht die VCL benutzen, wirken für einen VCL-ianer fremdartig.
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Nein, wir haben ein sehr breites Sortiment an Templates für alle möglichen wiederkehrenden Szenarien und Header... lediglich die Tutorials werden auf etwas SDL nahem umgestellt, da uns dies die Portierung erleichtert und wer daran scheitert den Fenster-Code und OpenGL-Code voneinander zu unterscheiden, ohnehin seine Probleme haben wird.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Na ja. So viel anders als eine Canvas ist das gar nicht. Du musst nur halt deine Canvas zu Begin einmal erstellen und diverse Einstellungen setzen damit die Richtige Darstellung erzielt wird.
Du hast in deinem Falle sofort nach dem Erstellen des RCs dein Dreieck gezeichnet. Anschließen löscht du aber den Inhalt des RCs.
Code:
procedure TForm1.FormCreate(Sender:TObject);
begin
// Kontex erstellen
DC := GetDC(Handle);
RC := CreateRenderingContext(...);
ActivateRenderingContext(DC, RC);
// Resize wird nicht automatisch aufgerufen deswegen muss
// das hier einmal per hand aufgerufen werden.
// Ansicht setzen
FormResize(Self);
// Hier solltest du noch ein paar globale Einstellungen setzen.
glClearColor(0.4,0.4,0.4,0.0);// Löschfarbe
glClearDepth(1.0);// Tiefenlöschwert
glEnable(GL_DEPTH_TEST);// Tiefentest
// Ich weiß nicht ob die Zeichenrichtung der Fläche stimm deswegen
// erst einmal Deaktivieren bis etwas sichtbar ist. Anschließend kann
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
// Modelview zurücksetzen
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
// Dinge zeichnen
glTranslatef(-1.5,0,-6);
// Farbe sollte vor dem Zeichnen gesetzt werden
glColor3f(1,0,0);
glBegin(GL_TRIANGLES);
glVertex3f(-1,-1,0);
glVertex3f(1,-1,0);
glVertex3f(0,1,0);
glEnd;
// Dafür sorgen, dass das gezeichnete auch dargestellt wird.
// Den hinteren Buffer nach vorne holen
SwapBuffers(DC);
end;
Ich habe den Code nicht getestet aber es besteht die Chance einer wagen Möglichkeit, dass wenigstens etwas davon funktioniert. In diesem Sinne. Es ist spät.
Lol funktioniert ... ein rotes dreieck keine ahnung was ich da falsch gemacht hatte ich werd mir den code mal genauer anschaun...
Mitglieder in diesem Forum: 0 Mitglieder und 13 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.