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

Aktuelle Zeit: Fr Jul 04, 2025 15:55

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: alles schwarz mit glortho
BeitragVerfasst: Mo Sep 01, 2008 13:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 13, 2008 12:39
Beiträge: 26
Wohnort: Berlin
Hallo,
ich habe mal wieder ein Problem (wie sollte es auch anders sein). Ich erstelle zwei quads im Perspective Mode ... soweit so gut, alles schön in Farbe so wie es sein soll. Doch wenn ich anschließend in den glortho Modus wechsel und ein weiteres Quad zeichne, dann ist alles schwarz und ich kann den Fehler einfach nicht finden. also büdde helft mir. ich hänge das Projekt'chen mal einfach an

http://rapidshare.com/files/141783077/Textur2.rar.html


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2008 15:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich würde dir gerne helfen, aber ich habe hier im Moment kein Winrar zur verfügung. Es wäre klasse, wenn du einfach mal deinen Code um glOrtho und den Code für deine Quads posten würdest. Das sollte ja nicht allzu viel sein und wahrscheinlich liegt in einem der beiden Bereiche auch der Fehler.

Gruß Lord Horazont

_________________
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  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2008 15:44 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 13, 2008 12:39
Beiträge: 26
Wohnort: Berlin
Da will ich natürlich nicht nein sagen. Ich stelle einfach mal die Renderschleife rein.

Code:
  1.  
  2. procedure TForm1.Render;
  3. var   x,y:integer;
  4. begin
  5.   x:= ClientWidth;
  6.   y:= ClientHeight;
  7.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  8.  
  9.   glMatrixMode(GL_PROJECTION);
  10.   glLoadIdentity;
  11.  
  12.   gluPerspective(45.0, ClientWidth/ClientHeight, 1, 1000 );
  13.  
  14.   glMatrixMode(GL_MODELVIEW);
  15.   glLoadIdentity;
  16.  
  17.   gluLookAt(0,0,3,
  18.             0,0,0,
  19.             0,1,0);
  20.  
  21.   textur.Bind(true);
  22.   glBegin(GL_QUADS);
  23.     glTexCoord2f(0,0);glVertex3f(-0.5, -0.5, 0);
  24.     glTexCoord2f(1,0);glVertex3f(0.5, -0.5, 0);
  25.     glTexCoord2f(1,1);glVertex3f(0.5, 0.5, 0);
  26.     glTexCoord2f(0,1);glVertex3f(-0.5, 0.5, 0);
  27.   glEnd;
  28.  
  29.   glEnable(GL_BLEND);
  30.   glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  31.  
  32.   Textur2.Bind(true);
  33.   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);  //In X-Richtung Kacheln
  34.   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);  //In Y-Richtung Kacheln
  35.   glBegin(GL_QUADS);
  36.     glTexCoord2f(0,0);glVertex3f(0.0, 0.0, 0.2);
  37.     glTexCoord2f(2,0);glVertex3f(1.0, 0.0, 0.2);
  38.     glTexCoord2f(2,2);glVertex3f(1.0, 1.0, 0.2);
  39.     glTexCoord2f(0,2);glVertex3f(0.0, 1.0, 0.2);
  40.   glEnd;
  41.  
  42.   glDisable(GL_BLEND);
  43.  
  44.   glpushmatrix();
  45.   glMatrixMode(GL_PROJECTION);
  46.   glLoadIdentity;
  47.   glViewport(0,0,ClientWidth,ClientHeight);
  48.   glOrtho(0, x, 0, y, 0, 128);
  49.   glMatrixMode(GL_MODELVIEW);
  50.   glLoadIdentity;
  51.  
  52.   glBegin(GL_QUADS);
  53.     glColor3f(0, 0, 0); glVertex3f(x-200, 0, 0);
  54.     glColor3f(1, 1, 1); glVertex3f(x, 0, 0);
  55.     glColor3f(1, 1, 1); glVertex3f(x, y, 0);
  56.     glColor3f(0, 0, 0); glVertex3f(x-200, y, 0);
  57.   glEnd;
  58.   glpopmatrix();
  59.  
  60.   SwapBuffers(DC);
  61. end;
  62.  



soooo ich hoffe das kann weiter helfen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2008 15:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich bin mir gerade nicht sicher, ob das beabsichtigt ist, aber bei dir ist bottom = 0 und top = ClientHeight. Eventuell solltest du das umdrehen (3. und 4. Parameter von glOrtho).

Was aber auch Probleme machen kann ist, dass deine NearClippingPlane beim Ortho auf 0 liegt, dein Quad aber auch. Für solche Fälle (vorallem, da glVertex2f die Z-Koordinate als 0 annimmt) habe ich beim Orthomodus bei der NearClippingPlane immer eine negative Zahl stehen (meistens ein Bereich von -10 bis 10).

Gruß Lord Horazont

_________________
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  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2008 16:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 13, 2008 12:39
Beiträge: 26
Wohnort: Berlin
vielen Dank für die Hilfe, aber es das Problem ist immernoch da. Das mit den Parametern dürfte glaube ich stimmen, wenn ich die Parameter umdrehe, dann wird mein Ortho Quad garnicht mehr gezeichnet. Ich habe die NearClippingPlane auf -10 gesetzt, aber auch das hat nichts geändert.
Ich habe das Problem jetzt zum Teil gelöst, ich habe als zum schluss (vor dem buffer swap) noch mal glcolor3f(1,1,1,); hingesetzt. Nun sind die Quads, die im Perspective Modus gerendert werden wieder in Farbe (warum auch immer ???). Nur das Quad im Ortho Modus bleibt schwarz


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2008 17:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ah ok, dann habe ich dich eingangs falsch verstanden, ich dachte, nur das Quad im Ortho wäre nicht zu sehen.

Dass dein Perspective Quad dadurch sichtbar wird, ist logisch. Nach dem letzten aufruf von glColor sind die farben auf (0,0,0) gesetzt. Der Farbwert wird aber mit der Texturfarbe multipliziert, daher kam es zu dem unsichtbaren (resp. schwarzen) Quad.

Dass dein Ortho-quad nicht zu sehen ist, kann auch an der Reihenfolge der Punkte, die du angegeben hast liegen. Eventuell pfuscht dir hier das Backfaceculling rein. Probier mal, deine Reihenfolge umzudrehen oder schalt mal testweise das Backfaceculling aus (glDisable(GL_CULL_FACE); ).

Gruß Lord Horazont

_________________
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  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2008 17:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 13, 2008 12:39
Beiträge: 26
Wohnort: Berlin
Soooo ich konnte das Problem jetzt endlich lösen ( ich habe nun 2 Tage davor gesessen ). Der Fehler lag einerseits darin ( wie oben geschrieben ) das ich am Ende noch ein glcolor3f( 1, 1, 1); ransetzten musste. Der andere Fehler lag daran, dass ich vergessen hatte die Textur zu unbinden, deshalb war das Quad im Ortho Modus auch schwarz. Ich hänge einfach mal die korrigierte Version ran, damit leute mit dem selben Problem die Lösung finden können.

Code:
  1.  
  2. procedure TForm1.Render;
  3. var   x,y:integer;
  4. begin
  5.   x:= ClientWidth;
  6.   y:= ClientHeight;
  7.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  8.  
  9.   glMatrixMode(GL_PROJECTION);
  10.   glLoadIdentity;
  11.  
  12.   gluPerspective(45.0, ClientWidth/ClientHeight, 1, 1000 );
  13.  
  14.   glMatrixMode(GL_MODELVIEW);
  15.   glLoadIdentity;
  16.  
  17.   gluLookAt(0,0,3,
  18.             0,0,0,
  19.             0,1,0);
  20.  
  21.   textur.Bind(true);
  22.   glBegin(GL_QUADS);
  23.     glTexCoord2f(0,0);glVertex3f(-0.5, -0.5, 0);
  24.     glTexCoord2f(1,0);glVertex3f(0.5, -0.5, 0);
  25.     glTexCoord2f(1,1);glVertex3f(0.5, 0.5, 0);
  26.     glTexCoord2f(0,1);glVertex3f(-0.5, 0.5, 0);
  27.   glEnd;
  28.  
  29.   glEnable(GL_BLEND);
  30.   glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  31.  
  32.   Textur2.Bind(true);
  33.   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);  //In X-Richtung Kacheln
  34.   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);  //In Y-Richtung Kacheln
  35.   glBegin(GL_QUADS);
  36.     glTexCoord2f(0,0);glVertex3f(0.0, 0.0, 0.2);
  37.     glTexCoord2f(2,0);glVertex3f(1.0, 0.0, 0.2);
  38.     glTexCoord2f(2,2);glVertex3f(1.0, 1.0, 0.2);
  39.     glTexCoord2f(0,2);glVertex3f(0.0, 1.0, 0.2);
  40.   glEnd;
  41.  
  42.   glDisable(GL_BLEND);
  43.   Textur2.Unbind(true); // Hier Lag der erste Fehler, das also nicht vergessen
  44.  
  45.   glpushmatrix();
  46.   glMatrixMode(GL_PROJECTION);
  47.   glLoadIdentity;
  48.   glViewport(0,0,ClientWidth,ClientHeight);
  49.   glOrtho(0, x, 0, y, -10, 10);
  50.   glMatrixMode(GL_MODELVIEW);
  51.   glLoadIdentity;
  52.  
  53.   glBegin(GL_QUADS);
  54.     glColor3f(0, 0, 0); glVertex3f(x-200, 0, 0);
  55.     glColor3f(1, 1, 1); glVertex3f(x, 0, 0);
  56.     glColor3f(1, 1, 1); glVertex3f(x, y, 0);
  57.     glColor3f(0, 0, 0); glVertex3f(x-200, y, 0);
  58.   glEnd;
  59.   glpopmatrix();
  60.  
  61.   glcolor3f( 1, 1, 1);  // Und das hier auch nicht vergessen
  62.  
  63.   SwapBuffers(DC);
  64. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2008 17:52 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
also um es komplett richtig zu machen müsste das letzte glColor eigentlich vor das erste glBegin in dem perspective teil, da du ja die Farbe für dieses Quad haben willst.
Wenn du es am Ende setzt ist die information in diesem Render durchgang gesetzt, macht sich allerdings erst beim nächsten Quad bemerkbar, was bei dir ja erst im
nächsten render stattfindet. Würdest du also nur ein einziges mal deine render prozedur ausführen würdest du wieder nichts sehen, erst beim zweiten aufruf werden deine texturierten quads sichtbar sichtbar durch das setzen der Farbe im letzten render.
Allgemein setz ich immer am Anfang nach dem einstellen der perspektive glcolor auf weiß, um quasi die farbe zu "reseten".

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2008 18:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das kann ich so nicht ganz unterstützen. Standardmäßig steht glColor auf 1, 1, 1. Somit wird auch bei einmaligem Aufrufen das Quad sichtbar sein, denn anfangs steht glColor ja schon auf weiß.

Gruß Lord Horazont

_________________
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  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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