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

Aktuelle Zeit: So Sep 07, 2025 21:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 11:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
Welche Unit soll ich benutzen welche ist besser?
Ich habe bis jetzt mit der Unit OpenGL gearbeitet und habe meine Engine jetzt auf OpenGL12 umgestellt, doch jetzt wird nichts mehr gezeichnet. Bevor ich da jetzt Rumfummel wollte ich fragen was besser ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 11:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn du mit OpenGL.pas die von Borland mitgelieferte Unit meinst, dann lass die Finger davon.Nicht nur das dort sehr viele neue OpenGL-Additionen fehlen (AFAIK ist die OpenGL.pas nur OpenGL 1.1 oder 1.2), Borland hat dort einige Sachen sogar falsch definiert.Außerdem wird das Teil wohl kaum weiterentwickelt.

Deshalb nutz auf jeden Fall die OpenGL12.pas, denn die bringt sehr viele neuere OpenGL-Features mit die der origignal Unit vo Borland fehlen.

Bis auf klein Änderungen und einige Dinge dies bei der Intialisierung zu beachten gibt, sollte eine Umstellung recht schnell und unkompliziert von Statten gehen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 11:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
Aber ich verstehe nicht wieso meine Bilder nicht mehr gezeichnet werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 11:44 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
TOpenGL hat geschrieben:
Aber ich verstehe nicht wieso meine Bilder nicht mehr gezeichnet werden.

Ich auch nicht :D

Ne genaue Fehlerbeschreibung wäre deshalb wünschenswert.Werden deine Texturen überhaupt geladen?Das lässt sich einfach prüfen, in dem du die TexturenID prüftst.Wenn diese = 0 ist, dann wurde die Textur nicht geladen.Kannst ja als Alternative auch die glBMP-Library nutzen.Das tue ich auch, und die läuft tadellos mit der OpenGL12.pas

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 11:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
Son of Satan hat geschrieben:
TOpenGL hat geschrieben:
Aber ich verstehe nicht wieso meine Bilder nicht mehr gezeichnet werden.

Ich auch nicht :D

Ne genaue Fehlerbeschreibung wäre deshalb wünschenswert.Werden deine Texturen überhaupt geladen?Das lässt sich einfach prüfen, in dem du die TexturenID prüftst.Wenn diese = 0 ist, dann wurde die Textur nicht geladen.Kannst ja als Alternative auch die glBMP-Library nutzen.Das tue ich auch, und die läuft tadellos mit der OpenGL12.pas

da kommt ja keine Fehlermeldung, das ist es ja und die TexturID ist auch <> 0. Ich benutze glBMP.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 11:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Eigenartig.Wie bindest du die Textur denn?Über glBindTexture oder TglBMP.Bind?Ich würde dir (wenn du's nicht schon tust) letztere Variante empfehlen.Die sollte auf jeden Fall funzen.
Was auch möglich wäre, ist das du irgendwo den Alphatest aktivierst, aber du den Alphakanal deiner Texturen beim Speichern leer gelassen hast (für den Fall das du ein Format mit Unterstützung für Alphamasken wie z.B. TGA oder PNG nutzt).Dann wird natürlich nichts von deiner Textur angezeigt.

Poste zur Not mal deinen Zeichencode, dann ists einfacher mit der Fehlersuche.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 12:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
Code:
  1.  
  2. procedure TImageItem.Draw;
  3. var
  4.  &nbsp;r,g,b : Word;
  5. begin
  6.  &nbsp;glEnable(GL_DEPTH_TEST);
  7.  
  8.  &nbsp;if FLoadIdentity then
  9.  &nbsp; &nbsp;glLoadIdentity;
  10.  &nbsp;glEnable(GL_TEXTURE_2D);
  11.  
  12.  &nbsp;if FPosZ < -8 then
  13.  &nbsp; &nbsp;FPosZ := -8;
  14.  &nbsp;if FPosZ > 1 then
  15.  &nbsp; &nbsp;FPosZ := 1;
  16.  
  17.  
  18.  &nbsp;glTranslatef(FPosX,FPosY,FPosZ);
  19.  &nbsp;glBmp.Bind;
  20.  &nbsp;glShadeModel(GL_SMOOTH);
  21.  &nbsp;glColor3f(1,1,1);
  22.  
  23.  &nbsp;if FBitmapColor <> clWhite then begin
  24.  &nbsp; &nbsp;WinColorToRGB(FBitmapColor,r,g,b);
  25.  &nbsp; &nbsp;glColor3f(r,g,b);
  26.  &nbsp;end;
  27.  
  28.  
  29.  &nbsp;if FTransparent then begin
  30.  &nbsp; &nbsp;glEnable(GL_ALPHA_TEST);
  31.  &nbsp; &nbsp;glAlphaFunc(GL_GREATER, 0.1);
  32.  
  33.  &nbsp; &nbsp;glEnable(GL_BLEND);
  34.  &nbsp;end;
  35.  
  36.  &nbsp;if FBlending then begin
  37.  &nbsp; &nbsp;glBlendFunc(GL_SRC_ALPHA, GL_ONE);
  38.  &nbsp;end;
  39.  
  40.  &nbsp;glBegin(GL_QUADS);
  41.  &nbsp; &nbsp;glTexCoord2f(0,1); glVertex2f(0 &nbsp; &nbsp; ,0 &nbsp; &nbsp; );
  42.  &nbsp; &nbsp;glTexCoord2f(1,1); glVertex2f(FWidth,0 &nbsp; &nbsp; );
  43.  &nbsp; &nbsp;glTexCoord2f(1,0); glVertex2f(FWidth,FHeight);
  44.  &nbsp; &nbsp;glTexCoord2f(0,0); glVertex2f(0 &nbsp; &nbsp; ,FHeight);
  45.  &nbsp;glEnd;
  46.  &nbsp;if FBlending then
  47.  &nbsp; &nbsp;glDisable(GL_BLEND);
  48. end;
  49.  

Hier ist der Code


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 12:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
:D ICH HABE ES!!!!! :D

es lag an
Code:
  1.  
  2. glEnable(GL_CULL_FACE); //Backface Culling aktivieren
  3.  

wenn ich diese Zeile streiche aus meinen Sourcen funktioniert es.
trotzdem Danke für deine mühen :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 14:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
TOpenGL hat geschrieben:
:D ICH HABE ES!!!!!  :D

es lag an
Code:
  1.  
  2. glEnable(GL_CULL_FACE); //Backface Culling aktivieren
  3.  

wenn ich diese Zeile streiche aus meinen Sourcen funktioniert es.
trotzdem Danke für deine mühen :D

Hi,

du solltest nach Möglichkeit diese Zeile drin lassen! Das bringt teilweise noch mal einen satten Performanceschub. Um dann trotzdem deine Flächen sehen zu können, kannst du 2 wege gehen.
Du erstellst deine Flächen andersherum. Und zwar die Punkte deiner Flächen in anderer Reihenfolge. Und zwar macht opengl die Vorderseite deiner Fläche daran fest, wie du die Punkte setzt.
Code:
  1.  &nbsp;glTexCoord2f(0,1); glVertex2f(0 &nbsp; &nbsp; ,0 &nbsp; &nbsp; );
  2.  &nbsp;glTexCoord2f(1,1); glVertex2f(0 &nbsp; &nbsp; ,FHeight);
  3.  &nbsp;glTexCoord2f(1,0); glVertex2f(FWidth,FHeight);
  4.  &nbsp;glTexCoord2f(0,0); glVertex2f(FWidth,0 &nbsp; &nbsp; );

Das sollte schon ausreichen.

Oder du sagst opengl, er soll dir frontseite weglassen. Das geht mit glCullFace(GL_FRONT);
Wobei die erste Variante die wohl Bessere ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 20:10 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 29, 2002 10:37
Beiträge: 251
Wohnort: Ulm
um das mit dem cullface nochmal zur verdeutlichen:

opengl zeichnet GEGEN die uhr! also in einem koordinaten system (2D) sind A(1|1), B(1|-1), C(-1|-1), D(-1|1). um die "frontseite" zu erhalten, darfst du nicht diese reihenfolge: ABCD nehmen, sondern diese: ADCB.

ansonsten, wenn du schon viel quellcode geschrieben hast und überall "clockwise" vorgegangen bist, dann kannst du allgemein die regel ändern, indem du

glFrontFace(GL_CW);

aufrufst.

die (c++) syntax ist : void glFrontFace(GLenum mode);
wobei mode entweder CW (ClockWise) oder CCW (CounterClockWise) und CCW standard ist, wenn du die funktion nicht gesondert aufrufst.. beide modes zu mixen solltes du vermeiden!

_________________
http://www.rochus.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 20:13 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
s.a. Tut5

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 21 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.009s | 14 Queries | GZIP : On ]