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

Aktuelle Zeit: Fr Jul 18, 2025 15:07

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



Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Di Nov 29, 2005 21:21 
Offline
DGL Member

Registriert: So Nov 27, 2005 23:58
Beiträge: 4
Hallo,
Da bin ich wieder mit meinem nächsten Problem :)
Ich hab sämtliche Texturloader ausprobiert, auf die im Wiki verwiesen wurde (auch SDL), ich glaube nicht, dass es beim Laden der Texturen hapert. Trotzdem wird die gewünschte Textur nicht dargestellt (SwapBuffers hab ich nicht vergessen, die gewünschte Hintergrundfarbe sieht man!). An der Skalierung des Koordinatensystems liegt es glaub ich auch nicht (habe für die Z-Koordinate größere positive und negative Werte ausprobiert, normalerweise müsste man doch dann etwas erkennen können). Mir ist aber aufgefallen, dass ich innerhalb dieses Projektes auch keine einfach gefärbten Rectangles mehr darstellen kann (Es wird kein Fehler ausgegeben, sondern einfach nicht dargestellt). Ich finde meinen Fehler aber nicht, deshalb poste ich hier mal den Code.

Code:
  1.  
  2. procedure TForm1.Render;
  3. var
  4.   MyTex : glUInt;
  5. begin
  6.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  7.  
  8.   glMatrixMode(GL_PROJECTION);
  9.   glLoadIdentity;
  10.   gltranslatef(0,0,5);
  11.  
  12.   LoadTexture('./wall.jpg',MyTex, False);
  13.   glBindTexture(GL_TEXTURE_2D,MyTex);
  14.   glEnable(GL_TEXTURE_2D);
  15.   glColor3f(1,1,1);
  16.  
  17.   glBegin(GL_QUADS);
  18.     glTexCoord2f(0,0); glVertex3f(-1,-1,0);
  19.     glTexCoord2f(0,1); glVertex3f(-1,1,0);
  20.     glTexCoord2f(1,1); glVertex3f(1,1,0);
  21.     glTexCoord2f(1,0); glVertex3f(1,-1,0);
  22.   glEnd;
  23.  
  24.   SwapBuffers(DC);
  25.  
  26.   ErrorHandler;
  27. end;
  28.  


Als Texturloader benutze ich den von Textures.pas.
Vielen Dank im Vorraus!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 21:40 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Herzlich willkommen.

Einen passenden Texturloader findest du hier. Ist recht gut dokumentiert und wird am neusten Stand gehalten.

Anmerkung zum Code: Texturen soll man nur einmal laden ( beim FomrCreate Ereigniss z.b.) und nicht jedes Mal beim Zeichnen. Das sinkt das FrameRate gewaltig. Also , einmal laden ( am Programmstart ), vor dem "Gebrauch" binden.

Weitere Erklärungen findest du im Link oben.

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 21:46 
Offline
DGL Member

Registriert: Do Okt 20, 2005 17:28
Beiträge: 51
ganz spontan würde ich sagen, Du solltest glColor3f INNERHALB von glBegin/glEnd benutzen, damit es auch anerkannt wird :)

wenn ich das mach, zeigt er bei mir eine weiße fläche an ^^ ... ob das bei Deinem textur-problem hilft, kann ich dir aber leider nicht verraten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 21:52 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Zitat:
ganz spontan würde ich sagen, Du solltest glColor3f INNERHALB von glBegin/glEnd benutzen
In diesem Fall spielt das keine Rolle.

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Hmm... Is zwar wahrscheinlich ne bekloppte Idee, aber probier doch mal ZUERST Texturen zu aktivieren und dann die jetzige zu binden.
Und achte auch darauf, dass die datei, wo dieses loadtexture drin ist, den gleichen opengl-header nutzt wie du!

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Ich empfehle dir außerdem die Projektionsmatrix lediglich zum Setzen der "Kameraeinstellungen" zu verwenden z.B. mit gluPerspective oder glOrtho. Für die Ausrichtung der "Kamera" verwende besser die Modelviewmatrix.

Außerdem empfiehlt es sich die Primitive entgegen dem Uhrzeigersinn zu definieren. Das ist ein ungeschriebenes Gesetz, welches dir aber gerade als Einsteiger einige Probleme ersparen kann.

Das du keine farbigen Primitive mehr darstellen kannst kann an der Texturierung liegen. Wahrscheinlich hilft glDisable(GL_TEXTURE_2D) vor dem Zeichnen des farbigen Primitives weiter.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:53 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Magellan hat geschrieben:
Das du keine farbigen Primitive mehr darstellen kannst kann an der Texturierung liegen. Wahrscheinlich hilft glDisable(GL_TEXTURE_2D) vor dem Zeichnen des farbigen Primitives weiter.

Hm? Also Primitive konnte ich auch mit Texturen einfärben... Schwierig wurde es lediglich beim OpenGL-Licht... Aber die Texturen stören AFAIK nicht...

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 30, 2005 01:31 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Zitat:
Aber die Texturen stören AFAIK nicht...
Das tun sie doch. Versuch es mal. Binde z.b. eine "rote" Textur und zeichne sie via GL_QUADS. Dann anschliessend zeichne eine gerade Linie ( GL_LINES ).

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 30, 2005 04:31 
Offline
DGL Member
Benutzeravatar

Registriert: So Feb 06, 2005 17:29
Beiträge: 187
Programmiersprache: C, C++
Vielleicht geht es auch einfacher! Hab ich das richtig verstanden, dass du gar keine Primitiven wie Quads, Triangles un so weiter zeichnen kannst? Du siehst nur die Hintergrundfarbe?

In diesem Fall wechsel mal das
Code:
  1. gltranslatef(0,0,5);

in ein
Code:
  1. gltranslatef(0,0,-5);


In OpenGL ist die Z-Achse nach hinten (in den Bildschirm) negativ.

_________________
Flummi: Projektseite und Projektthread


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 30, 2005 14:22 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
sniper hat geschrieben:
Zitat:
Aber die Texturen stören AFAIK nicht...
Das tun sie doch. Versuch es mal. Binde z.b. eine "rote" Textur und zeichne sie via GL_QUADS. Dann anschliessend zeichne eine gerade Linie ( GL_LINES ).

Und? Die Linie ist mit der "roten" Textur texturiert. Eben dafür gibt es ja eindimensionale Texturen ;)

Wenn die Textur überwiegend rot ist und man versucht, diese Textur mit z.B. glColor3f(0.0, 1.0, 1.0) einzufärben, wird man nichts sehen, da OpenGL bei Vertex-Colors moduliert... Jedenfalls glaub' ich, dass es so heißt ;)
Somit fällt einfach die rote Komponente weg und man sieht... nichts. Das trifft aber nur für den Spezialfall zu, dass man einfarbige Texturen verwendet. Und dann kann man eh gleich Vertex-Colors nehmen ^^

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 30, 2005 22:10 
Offline
DGL Member

Registriert: So Nov 27, 2005 23:58
Beiträge: 4
Ich bin langsam echt verzweifelt. Ich habe wirklich alle Texturloader ausprobiert, die ich im Forum und in der Wiki gefunden habe. Bei jedem das Gleiche: OpenGL wurde initialisiert (es tritt kein Fehler auf!), der gewünschte Hintergrund (von rot über blau bis schwarz hab ich alles ausprobiert) wird dargestellt, aber von einer Textur gibts es keine Spur (wie oben schon gesagt, ich habe alle möglichen "Kameraeinstellungen" schon ausprobiert). Mittlerweile habe ich das Programm (es kompiliert ohne Fehler) auf nem andern PC ausprobiert, genau das Gleiche.
Von euren Tipps habe ich auch alles schon probiert bzw. beachtet. Ich hatte eigentlich gehofft, dass ich irgend einen blöden Anfängerfehler gemacht habe und ihr den sofort erkennt, scheint aber leider nicht so zu sein. Jetzt will ich es mal anders angehen:

Könnte mir einer von Euch ein funktionierendes, einfaches Delphi-Programm von sich schicken, das als Texturloader glBitmap (ich hab mich für den entschieden :wink: ) nutzt. Am Besten macht das Programm nicht mehr, als eine einfache Textur zu laden. Ich werde dann versuchen zu vergleichen und dann so den Fehler zu finden, irgendwo muss ja einer sein.

Voller Vorfreude, endlich eine einfache Textur zu sehen (wie lange ich darauf schon warte :D ) bedanke ich mich schon im Vorraus.

PS: Meine eMail-Adresse gibts per PM.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 30, 2005 22:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Ich werde es noch mal kurz zusammenfassen, da ich mir nicht vorstellen kann, dass der Fehler woanders liegt.

Beim Programmstart initialisierst du ganz normal OpenGL. Anschließend lädst du in deiner Initialisierungsfunktion deine Textur mittels:
Code:
  1. LoadTexture('./wall.jpg',MyTex, False);


In deiner Renderschleife musst du nichts weiter machen, als in die Modelviewmatrix zu schalten und die „Kamera“ ein stück zurückzuschieben:
Code:
  1. glMatrixMode(GL_MODELVIEW);
  2. glLoadIdentity;
  3. glTranslatef(0,0,-5);


Anschließend renderst du wie gehabt dein Primitiv in deiner Renderfunktion:
Code:
  1. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  2. glBindTexture(GL_TEXTURE_2D, MyTex);
  3. glEnable(GL_TEXTURE_2D);
  4. glColor3f(1,1,1);
  5.  
  6. glBegin(GL_QUADS);
  7.   glTexCoord2f(0,0); glVertex3f(-1,-1,0);
  8.   glTexCoord2f(0,1); glVertex3f(1,-1,0);
  9.   glTexCoord2f(1,1); glVertex3f(1,1,0);
  10.   glTexCoord2f(1,0); glVertex3f(-1,1,0);
  11. glEnd;
  12.  
  13. SwapBuffers(DC);

Das sollte klappen, wenn dein Viewport und deine Projektionsmatrix richtig eingestellt sind. Davon gehe ich jedoch aus, da du sonst nie etwas sehen würdest.

Wenn du Beispielprogramme suchst, empfehle ich dir einen Blick in unsere Filesektion zu werfen. Dort müssten auch die Beispielanwendungen für die Tutorials liegen, die auch dieses Thema behandeln.[/pascal]

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 30, 2005 22:47 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hast du mal glDisable(GL_CULL_FACE) ausprobiert?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 01, 2005 00:06 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Hier ein funktionierendes Projekt mit allen dazugehörigen Dateien ( dglOpenGL.pas, glBitmap.pas, back.bmp )

EDIT:
Nue Version wurde hochgeladen, einige Fehler sind behoben.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Zuletzt geändert von sniper am Do Dez 01, 2005 13:59, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 01, 2005 08:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
lass uns wissen woran es lag

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


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.010s | 15 Queries | GZIP : On ]