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

Aktuelle Zeit: So Jul 06, 2025 03:12

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Probleme mit Texturen
BeitragVerfasst: Sa Mär 31, 2007 20:49 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Hallo,

also ich will in meinem Programm einige Quads mit einer Textur rendern, und andere ohne.

Am Anfang lade ich eine Textur:

Code:
  1.   surface:= Img_Load(PChar(ExtractFilePath(ParamStr(0))+'Gras.bmp'));
  2.  
  3.   glGentextures(1,@tex[1]);
  4.   glBindTexture(GL_TEXTURE_2D, Tex[1]);
  5.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  6.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  7.   glTexImage2D(GL_TEXTURE_2D, 0, 3, surface^.w, surface^.h,0, GL_RGB, GL_UNSIGNED_BYTE, surface^.pixels);
  8.  
  9.   sdl_freesurface(surface);


Vorher habe ich GL_TEXTURE_2D angemacht.

Beim Rendern mache ich nichtmal glBindTexture oder glTexCoord2f.

Die ersten 3 Quads werden mit der Texture "bemalt", das will ich aber nicht.
Und später, wenn ich noch andere Polygone dazu rendere, sind die neuen schwarz, obwohl ich glColor3f aufgerufen habe.

Weiß jemand, was da falsch sein kann?

Code:
Code:
  1.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  2.   glLoadIdentity();
  3.  
  4.   glTranslatef(0,0,-5);
  5.  
  6.   glColor3f(0.4,0.4,0.4);
  7.   glBegin(GL_QUADS);
  8.     glVertex3f(-3.1 , -0.3, 0);
  9.     glVertex3f(-3.1 ,-1.1 , 0);
  10.     glVertex3f( -1  ,-1.1 , 0);
  11.     glVertex3f( -1  , -0.3, 0);
  12.  
  13.   //glBindTexture(GL_TEXTURE_2D, Tex[1]);
  14.   //glNormal3f(0, 0, 0);
  15.     //gltexcoord2f(0,0);
  16.      glVertex3f(-1 , -1.1, 0);
  17.     //gltexcoord2f(1,0);
  18.      glVertex3f( -0.2 ,-1.1, 0);
  19.     //gltexcoord2f(1,1);
  20.      glVertex3f( -0.2 ,1.6, 0);
  21.     //gltexcoord2f(0,1);
  22.      glVertex3f(-1 ,   1.6, 0);
  23.  
  24.  
  25.   glEnd();
  26.  
  27.   glTranslatef(2.9,1.9,0);
  28.  
  29.   glBegin(GL_QUADS);
  30.     glVertex3f(-3.1 , -0.3, 0);
  31.     glVertex3f(-3.1 ,-1.1 , 0);
  32.     glVertex3f( 0,-1.1 , 0);
  33.     glVertex3f( 0,-0.3, 0);
  34.   glEnd();


// edit Lossy: Code durch Pascaltags ersetzt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 31, 2007 21:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Im Anschluss an meine Antwort verschiebe ich das Thema mal.

Und zu deinem Problem kann ich nur sagen, dass OpenGL eine Statemaschine ist. Also wenn du etwas aktiviert hast ist es so lange an bis du es wieder deaktivierst. Und wenn du etwas an einer Stelle nicht haben willst musst du es deaktivieren.

Soll bedeuten, wenn du irgendwann keine Texturen haben willst sie aber vorher irgendwann aktiviert wurden musst du glDisable(GL_TEXTURE_2D) aufrufen.

Wenn du irgendwann Texturen haben willst, dann musst du aber auch Texturkoordinaten setzen, weil OpenGL sonst eine Textur aufbringt aber mit der zu letzt benutzten Texturkoordinate. Diese Stelle wird dann auf die komplette Fläche aufgetragen. Das dürfte in deinem Falle ein schwarzes Pixel sein. Wenn gar nichts gesetzt wurde ist es 0, 0.

Das alles kannst du auch in unserem Texturen Tutorial nachlesen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 31, 2007 21:29 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Danke für die Antwort.

Das hat funktioniert, bis ich zum ersten Mal glColor() benutzt habe. Danach wird die Textur auch mit der Farbe übermalt...

Also wie mache ich "die Farbe wieder aus"

komischer Satz :D

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 31, 2007 22:44 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Die Farbe der Texture wird mit der gesetzen Farbe multipliziert. Mit glColor3f(1,1,1) setzt man sie auf weiß. Dann wird mit 1 multipliziert, so dass die Texturefarbe erhalten bleibt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 01, 2007 10:07 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Danke, funktioniert soweit.

Habe nurnoch ein Problem: die Textur wird ein wenig dunkler, bzw. die Farbe geht ein wenig ins blaue.
Ist eine 24bit Bmp 256x512. Woran könnte das liegen?!

Habe noch eine zweite Frage, und zwar ist im Moment die linke/rechte Seite meines Windows in OGL bei -3/3,
und die obere/untere auch. Kann ich irgendwie einstellen, dass die Matrix von -100 bis +100 geht?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 01, 2007 12:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Als erstes bitte eine Bitte. Vermische bitte nicht zu viel Fragen in einem Thema. Wenn diese inhaltlich zusammen passen dann ist das okay. Aber sollten sie komplett voneinander abweichen ist es besser, wenn du dafür ein eigenes Thema erstellst. Nicht jeder der sich mit den Ansichten auskennt wird so etwas in einem Thema über Texturen vermuten. ;) Außerdem trägt es dann nicht gerade zur Übersicht bei.

Farbe der Textur. Dies kann durch aktiviertes OpenGL Licht beeinflusst werden. Deaktivieren kannst du dieses mit glDisable(GL_LIGTHNING) bzw musst du darauf achten auch wirklich weiß als Farbe einzustellen. Sollte das alles nichts bringen hilf im Zweifel immer ein Bild auf dem man das Problem erkennen kann. Oftmals erkennen wir dann schon genau wo das Problem ist.

Ansicht: Dafür wäre erst einmal hilfreich zu wissen ob du eine Perspektive hast oder dich im orthogonalen Modus befindest. Also benutzt du 3D oder 2D? In 2D kannst du so etwas erreichen in dem du die Parameter von glOrtho entsprechen anpasst. Befindest du dich aber in 3D ist das nicht (nicht einfach) möglich, da diese Werte sehr stark von der Tiefe, des FOV und allen anderen Sachen abhängig sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 01, 2007 13:21 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Ok, ich mache bei der nächsten Frage einen neuen Thread auf.

Ich habe grade nochmal das Texturen Tutorial durchgelesen, und da ist mir das GL_RGB und GL_BGR aufgefallen.
Das war das Problem.

Und ja, ich will im Moment nur 2D rendern. Kannst du mir da bitte ein Beispiel geben, wie ich das benutze?

Ich werde auf dem Wiki beitrag nicht richtig schlau.

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 01, 2007 14:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich weiß leider nicht welchen Wiki Beitrag du meinst aber wir haben eine spezielles 2D Tutorial.

Nach dem Initialisieren bzw. bei der Änderung der Fenstergröße muss OpenGL immer gesagt werden wie er das alles darzustellen hat. Normal wird dort eine Perspektive gesetzt aber in deinem Fall muss du dann den Orthomodus setzen. Typischerweise wird dies im OnResize erledigt.

Code:
  1. glViewport(0, 0, ClientWidth, ClientHeight);
  2. glMatrixMode(GL_PROJECTION);
  3. glLoadIdentity;
  4. glOrtho(0, ClientWidth, ClientHeight, 0, 0, 128);


In deinem Fall müsstest du dann entsprechend -100 und 100 einsetzen.

Im Zweifel kannst du dir Unter Files -> VCL Source die Quellen des 2D Tutorials downloaden oder du postest hier ein bisschen Code dann am lebenden Objekt.


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


Wer ist online?

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