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

Aktuelle Zeit: Mi Jul 16, 2025 21:32

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Grafikfehler
BeitragVerfasst: Fr Nov 21, 2003 18:54 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
Hi!

Ich bin grad anner engine fürn kleines rennspiel dran (nichts großes)
Ich hab aber nen texturproblem. Da ich kein Bild anhängen kann versuch ichs mal so zu beschreiben:

Ich habe einen Baum, der aus 2 Flächen besteht.
Da ich in meiner Engine Culling benutze, habe ich jede fläche einmal im und einmal gegen den Uhrzeigersinn gezeichnet (aber das seht ihr ja am code)

meine Textur ist ein Baum mit einem weißen Hintergrund, welche im jpg-format gespeichert ist.

aus dem Tut weiß ich ja, dass man Objekte, bei denen man Alpha-Blending einsetzt, als letztes gezeichnet werden sollten.

das habe ich auch gemacht und bei allen anderen Objekten gehts auch.
nur bei Bäumen bzw. mit Alpha-Blending versehene Flächen nicht!
bei denen siehts aus als wären sie ausgeblendet, wenn eine andere,
mit alphablending versehene Fläche darüber liegt.

wie kann ich das ändern???


und noch der code meines baums:

Code:
  1.  
  2. glEnable(GL_BLEND);
  3. glBlendFunc(GL_ZERO, GL_SRC_COLOR);
  4.  
  5.  
  6.  
  7. glBegin(GL_QUADS);
  8.         glColor4f(1, 1, 1, 1);
  9.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,0);
  10.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,0);
  11.         glVertex3f((width / 2), 0, 0);
  12.  
  13.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,0);
  14.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,0);
  15.         glVertex3f(-(width / 2), 0, 0);
  16.  
  17.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,1);
  18.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,1);
  19.         glVertex3f(-(width / 2), height, 0);
  20.  
  21.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,1);
  22.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,1);
  23.         glVertex3f((width / 2), height, 0);
  24.  
  25.  
  26.  
  27.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,0);
  28.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,0);
  29.         glVertex3f(0, 0, (width / 2));
  30.  
  31.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,0);
  32.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,0);
  33.         glVertex3f(0, 0, -(width / 2));
  34.  
  35.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,1);
  36.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,1);
  37.         glVertex3f(0, height, -(width / 2));
  38.  
  39.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,1);
  40.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,1);
  41.         glVertex3f(0, height, (width / 2));
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,0);
  49.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,0);
  50.         glVertex3f(-(width / 2), 0, 0);
  51.  
  52.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,0);
  53.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,0);
  54.         glVertex3f((width / 2), 0, 0);
  55.  
  56.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,1);
  57.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,1);
  58.         glVertex3f((width / 2), height, 0);
  59.  
  60.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,1);
  61.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,1);
  62.         glVertex3f(-(width / 2), height, 0);
  63.  
  64.  
  65.  
  66.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,0);
  67.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,0);
  68.         glVertex3f(0, 0, -(width / 2));
  69.  
  70.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,0);
  71.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,0);
  72.         glVertex3f(0, 0, (width / 2));
  73.  
  74.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,1);
  75.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,1);
  76.         glVertex3f(0, height, (width / 2));
  77.  
  78.         glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,1);
  79.         glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,1);
  80.         glVertex3f(0, height, -(width / 2));
  81. glEnd();
  82.  
  83. glDisable(GL_BLEND);
  84.  


Tschuldigung für den langen quelltext, weiß das ihr sowas net mögt :wink:

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Zuletzt geändert von Kyro am Fr Nov 21, 2003 19:32, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 21, 2003 18:58 
Offline
DGL Member

Registriert: Mo Nov 03, 2003 20:23
Beiträge: 66
als ein alpha-image hat 4 farbcomponenten.

R[ed] G[reen] B[lue] u. A[lpha]

wenn du ein JPG lädst, wirst du diesen alphachannel nicht haben können. dazu musst du noch ein 2. bild reinladen und von diesem:

- sei es ein 8bit bild (graustufen) kannst du diesen als alphachannel dem bereits geladenem bild zufügen

- sei es ein RGB bild, kannst du entweder den R, G o. B channel als Alpha benutzen.

nachtrag: TGA (Targa-image format) unterstüzt RGBA.

hier nur leider das problem, dass sowohl PaintShopPro als auch Photoshop (Korrigiert mich, wenn das jetzt nicht stimmt) nicht mit Alphachannel speichern. Ich persönlich habe einen PNG2TGA converter geschrieben


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

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
@Cyan : Er meint Blending und nicht Alphamasking!

@Kyro : Und genau das würde ich an deiner Stelle auch nutzen, da es sich besonders bei Baumtexturen lohnt und du nicht die selben Probleme wie beim Blending hast. Alphamasking funktioniert nämlich per-Fragment und nicht wie Blending nur auf den Framepuffer. Dazu brauchst du entweder ein Texturformat das Alpha unterstützt (TGA, PNG) oder du lädst den Alphakanal aus einer extra Textur. Wie genau das geht kannste auf meiner HP nachelesen, wos ein Tut zum Thema Alphamasking gibt in dem genau das gezeigt wird was du brauchst.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 21, 2003 19:37 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
danke für eure antworten!

un das ihr mein prob schon vorher gesehn habt, denn ich hatte den threat aus versehn mit strg+s (ein ICQ-Reflex? ^^) schon bevor er fertig war abgeschickt.

werd gleich mal das mit dem graustufenbild ausprobieren.
noch ne frage: soll ich das mit multitexturing oder mit ner 3. fläche machen?

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 21, 2003 21:10 
Offline
DGL Member

Registriert: Mo Nov 03, 2003 20:23
Beiträge: 66
:shock:

ne!

du lädst das bild doch rein. halt als RGB ohne A.

dann musst du, bevor du das bild in den grakaspeicher schiebst noch ein RGBA bild generieren, wo der content von deinem JPG bild drin sitzt und der alphachannel die daten der graustufenmap bekommt.

wie lädst du die textur derzeit in dem speicher?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 22, 2003 08:59 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
mit der Textures.Pas

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 22, 2003 10:58 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
habe das tut von dir jetzt mal gemacht und ich musste feststellen, das
weder dein Beispiel noch mein Projekt korrekt funktionert

die Fehler sind recht unterschiedlich:

dein programm kommt bis zur abfrage wegen dem fullscreen und dann stürzts ab.

mein programm startet zwar, aber es werden mit deiner methode die texturen zu laden keinerlei texturen angezeigt.
außerdem: die wohl wichtigste prozedur in meinem projekt hängt sich auf, wenn ich sie aufrufe.

gibts nich noch ne alternativmethode ?

vorher hab ich die texturen wie das beispiel aus dem tut mit den textur-effekten geladen.[/b]

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 30, 2003 18:50 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Genau das gleiche Problem hab ich auch mit der Textures.pas!
Die Fehler sind verschieden, je nachdem welche OpenGL Unit ich in der uses-Klausel hab. DGLOpenGL kennt zum Beispiel glu32.dll nicht.
Aber wenn ich die OpenGL von Borland nehme, dann gehts. Aber die OpenGL-Unit von Borland ist blöd. *g*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 30, 2003 18:53 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Wieso kennt dglOpenGL kein GLU - das wäre mir ja völlig neu, ich habe mehrfach Caradprojekte, die gluBuildMipmaps bzw. glu(Un)Project verwenden erfolgreich mit dglOpenGL kompiliert - du kannst dir theoretisch sogar aussuchen, welche OpenGL bzw. GLU dll du verwenden willst (theoretisch deshalb, weil da noch ein kleiner Bug drinnen ist)

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 30, 2003 19:13 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
function gluBuild2DMipmaps(Target: GLenum; Components, Width, Height: GLint; Format, atype: GLenum; Data: Pointer): GLint; stdcall; external glu32;

Diese Funktion wird ja benötigt, wenn man Texturen laden will. Die steht auch in der Textures.pas drin.
Die Textures.pas benutzt ja standardmäßig die Borland opengl.pas.
Da geht's. Ich bekomm keine Schutzverletzung oder so, wenn ich eine Textur lade, aber die Textur wird nicht angezeigt :-(.
Trag ich in der uses-Klausel von der Textures.pas aber dglopengl ein, nervt der Compiler damit, dass er glu32 nicht kennt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 30, 2003 19:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
SpaceJunky hat geschrieben:
function gluBuild2DMipmaps(Target: GLenum; Components, Width, Height: GLint; Format, atype: GLenum; Data: Pointer): GLint; stdcall; external glu32;


*grml* Du musst diese Deklaration auch entfernen, da die Funktion in der dglOpenGL.pas deklariert ist und obige Zeile daher nicht gebraucht wird. Der Grund warum dies in der Textures.pas drinsteht ist der, das die opengl.pas von Borland fehlerhaft ist und diese Funktion nicht kennt.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 30, 2003 19:32 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
wieso *grml*?
Woher sollte ich denn das wissen?

==> Problem gelöst. (Meins jedenfalls)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 30, 2003 19:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Weil man dieses Problem ganz einfach über die Suchfunktion lösen kann. Ausserdem finde ich es einfach nicht fair gleich dem Header die Schuld in die Schuhe zu schieben weil etwas nicht klappt. Ein Blick in die dglOpenGL.pas und du hättest gesehen das gluBuild2DMipMaps dort schon deklariert ist.

_________________
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  [ 13 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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 | 16 Queries | GZIP : On ]