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

Aktuelle Zeit: Fr Jul 18, 2025 05:02

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Aug 28, 2003 16:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Hiho Leutz ! Ich hab mir mal ne Teekanne in Form von Vertex - Array und Indicien - Array in mein Programm geschreibselt und ich lasse diese im Moment mit Hilfe von glDrawElements darstellen. Das Prob im Moment ist nur, dass die Texturgenerierung die Teekanne weiss bleiben lässt und mit Texturkoordinaten auf Dreiecke zu gehen ist auch etwas besch ... eiden. Kann mir also jemand sagen, warum folgende Renderloop keine Textur anzeigt ? (Textur ist sicher geladen)
Code:
  1.   glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  2.   glLoadIdentity;
  3.   glTranslatef(0.0, 0.0, - 40);
  4.   glRotatef(GetTickCount()/80,0.5,0.5,0.5);
  5.   if not glIsEnabled(GL_TEXTURE_2D) then glEnable(GL_TEXTURE_2D);
  6.   glBindTexture(GL_TEXTURE_2D,Texture);
  7.   glTexGeni(GL_S,GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
  8.   glTexGeni(GL_T,GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
  9.   if not glIsEnabled(GL_TEXTURE_GEN_S) then glEnable(GL_TEXTURE_GEN_S);
  10.   if not glIsEnabled(GL_TEXTURE_GEN_T) then glEnable(GL_TEXTURE_GEN_T);
  11.   if not glIsEnabled(GL_VERTEX_ARRAY) then glEnableClientState (GL_VERTEX_ARRAY); //Vertex Arrays verfügbar ?
  12.  
  13.   glVertexPointer(3,GL_FLOAT,0,@Teapot_vertex_array); //Vertex - Pointer auf das Vertex - Array setzen
  14.   glDrawElements(GL_TRIANGLES,3069,GL_UNSIGNED_INT,@Teapot_indicies_array[0]); //Object mit(3 Eckpunkten *) 1023 Flächen zeichnen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 28, 2003 16:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn das dein kompletter Renderloop ist, dann fehlen da ganz einfach die Koordinaten auf deren Basis die automatische Texturengeneriereung funktioniert :
Code:
  1. const
  2.  tg : array[0..3] of Single = (0,0,1,0);
  3.  sg : array[0..3] of Single = (1,0,0,0);
  4. ...
  5. glTexGenfv(GL_T, GL_OBJECT_PLANE, @tg);
  6. glTexGenfv(GL_S, GL_OBJECT_PLANE, @sg);


Ansonsten wüsste ich nicht warum du automatische Texturkoordinatengenerierung bei der Nutzung von Vertexarrays nicht funzen sollte (habs selbst in nem Heightmapbeispiel gecoded, und es funzt ohne Probs, allerdings zeichne ich das VA via glDrawArrays, dürfte aber keinen Unterschied machen).

P.S. :
Code:
  1. if not glIsEnabled(GL_TEXTURE_GEN_S) then glEnable(GL_TEXTURE_GEN_S);

Ist kein guter Programmierstil, da das Abfragen des Status oft länger dauern kann als diesein einfach blind zu setzen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 28, 2003 16:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Also ich hab die Renderloop jetzt geändert auf :
Code:
  1. procedure TForm1.Render_Viewport;
  2. const
  3. tg : array[0..3] of Single = (0,0,1,0);
  4. sg : array[0..3] of Single = (1,0,0,0);
  5. begin;
  6.   glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  7.   glLoadIdentity;
  8.   glTranslatef(0.0, 0.0, - 40);
  9.   glRotatef(GetTickCount()/80,0.5,0.5,0.5);
  10.   glEnable(GL_TEXTURE_2D);
  11.   glBindTexture(GL_TEXTURE_2D,Texture);
  12.   glTexGenfv(GL_T, GL_OBJECT_PLANE, @tg);
  13.   glTexGenfv(GL_S, GL_OBJECT_PLANE, @sg);
  14.   glEnable(GL_TEXTURE_GEN_S);
  15.   glEnable(GL_TEXTURE_GEN_T);
  16.   glEnableClientState (GL_VERTEX_ARRAY); //Vertex Arrays verfügbar ?
  17.  
  18.   glVertexPointer(3,GL_FLOAT,0,@Teapot_vertex_array); //Vertex - Pointer auf das Vertex - Array setzen
  19.   glDrawElements(GL_TRIANGLES,3069,GL_UNSIGNED_INT,@Teapot_indicies_array[0]); //Object mit(3 Eckpunkten *) 1023 Flächen zeichnen
  20. end;

Leider bleibt die Teekanne noch weiss ... ich komm im Moment nicht drauf, wo der Wurm drin ist ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 28, 2003 17:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ich habs bei mir jetzt grad mal wieder getestet, und das Vertexarray wird im Zusammenspiel mit der automatischen Texturkoordinatengenrierung einwandfrei texturiert.

Daher geh ich mal davon aus, dass dein Problem evtl. gar nicht im obigen Quellcode liegt, sondern deine Textur nicht gültig ist.Geh also sicher das deine Textur korrekt geladen wird, denn Spezifikationen entspricht und teste mal ob diese auf nem einfachen Quad auch angezeigt wird.

Ansonsten hab ich ja bereits erwähnt das es bei mir funzt, also kannst du auch mal versuchen dein VA mittels glDrawArrays zu zeichnen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 28, 2003 18:03 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
das darf aber eigentlich auch nicht sein, da glDrawElements laut Spezifikation fast egnauso funktioniert wie glDrawArrays und in der Softwareimplementierung beide die Funktion ArrayElement benutzen sollten. Der Haken müsste anderswo zu suchen sein.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Aug 29, 2003 15:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Also das Prob lag an der Textur ... ich muss mir angewöhnen, zu überprüfen, ob eine Textur auch geladen wurde (mir gingen dadurch mehrere Lichtlein auf ....). Allerdings macht sich noch ein Prob breit : Die Textur wird ums Verrecken nicht geladen und ich weis nicht warum ... die Abmessungen sind 256 x 256 und die Pfadangaben stimmen auch ... ich dachte zuerst, es liegt daran, dass GL_TEXTURE_2D nicht enabled ist, aber dass wars auch nicht. Da ich nun schon mehrere Stunden an dem Prob rumwurschtel und ich den ganzen Quelltext hier nicht posten will, hab ich in einfach mal upgeloadet. Wenn mir jemand mal einen Blick in http://www.onkeltortysfiles.de/Matrix_Demo.zip reinwerfen würde, um mir zu sagen, wo da der Wurm drin ist, wäre das ein feiner Zug ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 29, 2003 15:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Habs mir grad angesehen und den Fehler recht schnell gefunden :
Du lädst deine Textur bevor du einen Renderkontext aktiviert hast, und da auch das Laden einer Textur einen aktiven Renderkontext voraussetzt schlägt das natürlich fehl.Nachdem ich das Laden der Textur in die Funktion SetupViewport (also nach dem wglMakeCurrent) gestetzt hatte ging es.

P.S. : Die Sache mit dem if not LoadTexture... bringt nicht viel, was wohl an der Textures.pas liegt, denn obwohl die Textur nach obigem Schritt geladen wurde lieferte diese Abfrage immernoch False zurück...aber die Textur wird trotzdem angezeigt.Muss wohl ein "Problem" in der Textures.pas sein...

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


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


Wer ist online?

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