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

Aktuelle Zeit: Di Mai 14, 2024 04:28

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Probleme mit tiefe und transparent
BeitragVerfasst: Sa Jan 21, 2012 15:53 
Offline
DGL Member

Registriert: Sa Jan 21, 2012 15:35
Beiträge: 3
Programmiersprache: C/C++
Hallo,

ich benutze glOrtho(0,640,0,480,0,100);
weil sich um eine 2 Darstellung handelt. mit den Z-Werte 0-100 möchte ich festlegen
welches objekt vor dem anderen ist (überlappt)

sobald ich den tiefentest aber
aktiviere glEnable(GL_DEPTH_TEST);
werden nur noch objekte mit z-Wert 0 angezeigt

des weiteren sind alle objekte halb-transparent,
also ich sehe immer das darunterliegende objekt
leicht durchschimmernd



Code:
  1.  
  2. glMatrixMode(GL_PROJECTION);        // Select the modelview matrix
  3. glLoadIdentity();           // Reset the modelview matrix
  4. glOrtho(0,640,0,480,0,100);
  5. glEnable(GL_TEXTURE_2D);
  6. glShadeModel(GL_FLAT);
  7. glEnable(GL_DEPTH_TEST);
  8. //glDepthFunc(GL_LESS);
  9.  
  10. glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
  11. glClear(GL_COLOR_BUFFER_BIT);
  12. glBlendFunc(GL_SRC_ALPHA,GL_ONE);
  13. glBindTexture(GL_TEXTURE_2D, textures[2].texID);
  14. //glEnable(GL_BLEND);
  15.         glBegin(GL_QUADS);
  16.         glTexCoord2f(0.0f, 0.0f); glVertex3i(0, 0,  0); // Bottom left of the texture and quad
  17.         glTexCoord2f(1.0f, 0.0f); glVertex3i( 640, 0,  0);  // Bottom right of the texture and quad
  18.         glTexCoord2f(1.0f, 1.0f); glVertex3i( 640,  480,  0);   // Top right of the texture and quad
  19.         glTexCoord2f(0.0f, 1.0f); glVertex3i(0,  480,  0);  // Top left of the texture and quad
  20.         glEnd();
  21.  
  22.         glBindTexture(GL_TEXTURE_2D, textures[2].texID);
  23.         glBegin(GL_QUADS);
  24.         glTexCoord2f(0.0f, 0.0f); glVertex3i(ship[0][0]-32, ship[0][1]-32,  0); // Bottom left of the texture and quad
  25.         glTexCoord2f(1.0f, 0.0f); glVertex3i( ship[0][0]+32, ship[0][1]-32, 0); // Bottom right of the texture and quad
  26.         glTexCoord2f(1.0f, 1.0f); glVertex3i( ship[0][0]+32,  ship[0][1]+32,0); // Top right of the texture and quad
  27.         glTexCoord2f(0.0f, 1.0f); glVertex3i(ship[0][0]-32,  ship[0][1]+32, 0); // Top left of the texture and quad
  28.  
  29.     glEnd();
  30.  


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 21, 2012 18:39 
Offline
DGL Member

Registriert: Di Mai 10, 2011 19:38
Beiträge: 63
Habe zwar nicht allzu viel Ahnung aber ich probiere es mal.
Mit glBlendFunc(GL_SRC_ALPHA,GL_ONE); schaltet du das Blending ein.

Mit dem Tiefentest kann ich dir leider nichts zusagen.

//Edit
Probier mal das glOrtho(0,640,0,480,1,100);


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 21, 2012 21:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
glClearDepth hat einen Default-Wert von 1. D.h. bei einem glClear wird überall 1 in den Z-Buffer geschrieben. Vermutlich willst du das auf 100 setzen.

Edit: Und natürlich auch überhaupt mal den Z-Buffer mit clearen:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

Edit2:
Die Transparenz kommt wie mein Vorredner schon sagte vom Blending. Wenn du das Blending nicht benötigst solltest du es mit
glDisable(GL_BLEND) abschalten. Mit glEnable kannst du des wieder einschalten. glBlendFunc hat nur Auswirkungen wenn das Blending eingeschaltet ist.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 21, 2012 22:15 
Offline
DGL Member

Registriert: Di Mai 10, 2011 19:38
Beiträge: 63
Coolcat hat geschrieben:
...glBlendFunc hat nur Auswirkungen wenn das Blending eingeschaltet ist.

Okay dachte das Blending schaltet sich damit auch an.... was aber nicht so ist wie ich gerade festgestellt habe :wink:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 23, 2012 12:51 
Offline
DGL Member

Registriert: Sa Jan 21, 2012 15:35
Beiträge: 3
Programmiersprache: C/C++
Zitat:
Edit: Und natürlich auch überhaupt mal den Z-Buffer mit clearen:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


danke das problem mit dem Z.Buffer ist gelösst

das mit dem transparent nicht

ich habe
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE); schaltet du das Blending ein.

backround scheint aber noch durch

Code:
  1. glMatrixMode(GL_PROJECTION);        // Select the modelview matrix
  2.     glLoadIdentity();           // Reset the modelview matrix
  3.     glOrtho(0,640,0,480,-100,100);
  4.  
  5.     glEnable(GL_TEXTURE_2D);
  6.     glShadeModel(GL_FLAT);
  7.     glEnable(GL_DEPTH_TEST);
  8.     //glDepthFunc(GL_LESS);
  9. //glDisable(GL_BLEND);
  10.     glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
  11.     glEnable(GL_BLEND);
  12.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  13.     glBlendFunc(GL_SRC_ALPHA,GL_ONE);
  14.  
  15.  
  16.  
  17.     glBindTexture(GL_TEXTURE_2D, textures[2].texID);
  18.         glBegin(GL_QUADS);
  19.         glTexCoord2f(0.0f, 0.0f); glVertex3i(0, 0,  -7);    // Bottom left of the texture and quad
  20.         glTexCoord2f(1.0f, 0.0f); glVertex3i( 320, 0,  -7); // Bottom right of the texture and quad
  21.         glTexCoord2f(1.0f, 1.0f); glVertex3i( 320,  240,  -7);  // Top right of the texture and quad
  22.         glTexCoord2f(0.0f, 1.0f); glVertex3i(0,  240,  -7); // Top left of the texture and quad
  23.         glEnd();
  24.  
  25.  
  26.  
  27.         glBindTexture(GL_TEXTURE_2D, textures[2].texID);
  28.         glBegin(GL_QUADS);
  29.         glTexCoord2f(0.0f, 0.0f); glVertex3i(ship[0][0]-32, ship[0][1]-32,  -8);    // Bottom left of the texture and quad
  30.         glTexCoord2f(1.0f, 0.0f); glVertex3i( ship[0][0]+32, ship[0][1]-32, -8);    // Bottom right of the texture and quad
  31.         glTexCoord2f(1.0f, 1.0f); glVertex3i( ship[0][0]+32,  ship[0][1]+32,-8);    // Top right of the texture and quad
  32.         glTexCoord2f(0.0f, 1.0f); glVertex3i(ship[0][0]-32,  ship[0][1]+32, -8);    // Top left of the texture and quad
  33.  
  34.     glEnd();


komischerweise wird auch die transparenz immer anders interpretiert

bild2.gif ist wenn das 1. object oben liegt, dann scheint das rot vom background durch, das darunterliegende object ist aber überhaupt nicht zu sehen.

bild1.gif ist wenn das 2. objekt oben liegt, dann schimmert das rot vom hintergrund , das tieferliegende object durch
ich will aber nur den teil der texture transparent haben in dem sich nicht das sprite befindet.


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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 23, 2012 14:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Schau mal in den Wiki-Artikel zu glBlendFunc. Der Blendmodus, den du verwendest, lässt den Hintergrund durchscheinen. Du willst wahrscheinlich einen anderen.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.046s | 19 Queries | GZIP : On ]