Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 09, 2025 22:24

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Tutorial 2: rendert nicht
BeitragVerfasst: Mo Mär 30, 2009 17:04 
Offline
DGL Member

Registriert: Sa Mär 28, 2009 09:25
Beiträge: 10
Hallo,

ich bekomm das Tutorial nicht ganz auf die Reihe...sehr gut erklärt und ich verstehe das Prinzip, aber ich
weiß nicht ganz, wo man den Quelltext reingeschreibt. Ich bin jetzt beim Tutorial 2 :oops: . Leider zeichnet es nichts...

Code:
  1.  
  2. var counter: integer;
  3.  
  4. procedure rendern();
  5. begin
  6. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  7.  
  8. glTranslatef(-1.5,0,0);
  9. glTranslatef(0, 0,-6);
  10. glBegin(GL_TRIANGLES);
  11.   glColor3f(1, 0, 0); glVertex3f(-1,-1, 0);
  12.   glColor3f(0, 0, 1); glVertex3f( 1,-1, 0);
  13.   glColor3f(0, 1, 0); glVertex3f( 0, 1, 0);
  14. glEnd;
  15. end;
  16. procedure TForm3.FormCreate(Sender: TObject);
  17. var DC, RC:HDC;
  18. begin
  19.   DC:=GetDC(Handle);
  20.   RC:=CreateRenderingContext(DC,          //Device Contest
  21.                              [opDoubleBuffered], //Optionen
  22.                              32,          //ColorBits
  23.                              24,          //ZBits
  24.                              0,           //StencilBits
  25.                              0,           //AccumBits
  26.                              0,           //AuxBuffers
  27.                              0);          //Layer
  28.   ActivateRenderingContext(DC, RC);
  29.  
  30.  
  31. end;
  32. procedure TForm3.FormResize(Sender: TObject);
  33. begin
  34.     glViewport(0, 0, Form3.ClientWidth, Form3.ClientHeight);
  35. end;
  36.  
  37.  
  38. procedure TForm3.Timer1Timer(Sender: TObject);
  39. begin
  40.     inc(counter);
  41.     if counter> 1  then
  42.         rendern();
  43. end;
  44.  


VIELEN VIELEN DANK im Vorraus!!!

Edit by Frase: code durch pascal-tags ersetzt

_________________
"Alles ist möglich, Unmögliches dauert nur ein bisschen länger!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 30, 2009 17:08 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Timer1.active := true?

evtl nochmal
Code:
  1.    glViewport(0, 0, Form3.ClientWidth, Form3.ClientHeight);

explizit nach dem Aktivieren des Kontextes ausführen.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 30, 2009 17:16 
Offline
DGL Member

Registriert: Sa Mär 28, 2009 09:25
Beiträge: 10
Also der Timer ist aktiv...das habe ich schon probiert...

Zitat:
evtl nochmal
Code:
glViewport(0, 0, Form3.ClientWidth, Form3.ClientHeight);

explizit nach dem Aktivieren des Kontextes ausführen.


Hilft leider auch nicht... :(

_________________
"Alles ist möglich, Unmögliches dauert nur ein bisschen länger!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 30, 2009 17:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Deine Anwendung rendert sehr wohl, allerdings siehst du das nicht weil du den hintern Puffer nicht nach vorne bringst (sprich : sichtbar machst). Dir fehlt also am Ende deines Rendervorgangs ein SwapBuffers.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 30, 2009 17:39 
Offline
DGL Member

Registriert: Sa Mär 28, 2009 09:25
Beiträge: 10
Cool...jetzt habe ich schonmal eine schwarze Fläche...

Doch das Dreieck zeichnet es nicht...

_________________
"Alles ist möglich, Unmögliches dauert nur ein bisschen länger!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 30, 2009 18:28 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
hmm.. ich kann an keiner stelle deines Codes sehen, dass du die perspektiv Matrix setzt.

Code:
  1. gluPerspective(45.0, Panel1.Width/Panel1.Height, NearClipping, FarClipping);


Dieser befehl beschreibt deinen Zeichenbereich im 3d-Raum, das ist notwendig, damit OpenGl weiß, wie Deine Geometrischendaten auf den Bildschirm umgerechnet werden sollen. In dem Beispiel gebe ich als zeichenfläche Panel1 an, bei dir wird das höchstwahrscheinlich die Form sein (je nach dem von welchem Objekt du mittels GetDC(Panel1.Handle) den DC bekommst).
wenn du nicht beabsichtigst deine Perspektive zu verändern während der Laufzeit, dann genügt es die Funktion am Ende von FormCreate aufzurufen, ansonsten kannst du das auch am Anfang der Render Routine einmal machen.

Edit:
so könnte das bei dir aussehen:


Code:
  1.  
  2. procedure TForm3.FormCreate(Sender: TObject);
  3. var DC, RC:HDC;
  4. begin
  5.   DC:=GetDC(Handle);
  6.   RC:=CreateRenderingContext(DC,          //Device Contest
  7.                              [opDoubleBuffered], //Optionen
  8.                              32,          //ColorBits
  9.                              24,          //ZBits
  10.                              0,           //StencilBits
  11.                              0,           //AccumBits
  12.                              0,           //AuxBuffers
  13.                              0);          //Layer
  14.   ActivateRenderingContext(DC, RC);
  15.  
  16.   glViewport(0, 0, Form3.ClientWidth, Form3.ClientHeight)
  17.   gluPerspective(45.0, Form3.ClientWidth/Form3.ClientHeight, NearClipping, FarClipping);
  18. end;
  19.  

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 30, 2009 19:28 
Offline
DGL Member

Registriert: Sa Mär 28, 2009 09:25
Beiträge: 10
Jetzt kommt bei mir die Fehlermeldung, dass NearClipping und FarClipping undefinierte Bezeichner sind...
also habe ich den Wert "1000" eingesetzt. Ist das richtig??

...zeigt dennoch nichts an

Aber bin ich denn der einzigste, der das Tutorial gemacht hat?? Gibt es da keine Musterlösung??

_________________
"Alles ist möglich, Unmögliches dauert nur ein bisschen länger!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 30, 2009 20:57 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
oh, das tutorial haben garantiert so einige durch gebastelt!!! das mit Near und Farclipping hab ich vergessen dazu zuschreiben, dass sind zwei konstanten, die beschreiben welche distanz ein gegenstand mindestens haben muss und maximal haben darf, damit er gezeichnet wird. Ich habe bei mir für Nearclipping einfach 1 und für farclipping 1024 genommen. In Codeform hab ich einfach direkt unter dem variablen Block der Unit folgendes geschrieben:

Code:
  1.  
  2. const
  3.   nearclipping = 1;
  4.   farclipping = 1024;
  5.  


Edit: Nearclipping sollte nicht viel kleiner sein als 1, da man sonst ziemlich hässlich verzogene geometrie bekommt, je näher man sich null nähert, auch die werte von Farclipping sollten nicht zu riesig sein!

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 31, 2009 15:24 
Offline
DGL Member

Registriert: Sa Mär 28, 2009 09:25
Beiträge: 10
VIELEN DANK an alle!!

Jetzt funktioniert es. :D

_________________
"Alles ist möglich, Unmögliches dauert nur ein bisschen länger!"


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.021s | 17 Queries | GZIP : On ]