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

Aktuelle Zeit: Di Jul 08, 2025 23:56

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



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Texturen auf dem Kopf
BeitragVerfasst: Do Aug 24, 2006 20:33 
Offline
DGL Member

Registriert: Mi Aug 23, 2006 10:27
Beiträge: 42
In der 7ten Lektion hab ich ein Problem/Fehler entdeckt, der scheinbar bei mir schon immer drin war:

Alle Texturen stehen bei mir auf dem Kopf. Also ( in 2D betrachtet ) horizontal gespiegelt.

das zeichnen:
Code:
  1.   glBegin(GL_QUADS);
  2.      glTexCoord2f(0,0);
  3.      glVertex3f(-0.5, -0.5, 0);
  4.      glTexCoord2f(1,0);
  5.      glVertex3f( 0.5, -0.5, 0);
  6.      glTexCoord2f(1,1);
  7.      glVertex3f( 0.5,  0.5, 0);
  8.      glTexCoord2f(0,1);
  9.      glVertex3f(-0.5,  0.5, 0);
  10.   glEnd;


und das laden der texturen:

Code:
  1. var
  2.   tex : PSDL_Surface;
  3.   rock : gluInt;
  4. begin
  5.   tex := IMG_Load(PChar(ExtractFileDir(paramStr(0))+'/rock.jpg'));
  6.   if assigned(tex) then begin
  7.     glGenTextures(1, @rock);
  8.     glBindTexture(GL_TEXTURE_2D, rock);
  9.  
  10.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  11.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  12.  
  13.     glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB,
  14.                  GL_UNSIGNED_BYTE, tex^.pixels);
  15.  
  16.     SDL_FreeSurface(tex);
  17.   end;
  18. end;


wie ich leider feststellen musste, waren überall die texturen auf dem kopf, nur vorher fiel mir das nicht auf.

Die Texturen horizontal zu spiegeln ist ja nicht die welt, nur möcht ich wissen woran das liegt. also ob ich irgendwo was falsch lade, oder ob sowas normal ist ( im Tutorial konnte ich diesbezüglich nichts finden, weswegen ich davon ausgehe, dass der fehler bei mir liegt ).
was blöd wäre, wenn ich die texturen spiegle, aber bei anderen das ganze richtig herum angezeigt würde... und weil ich spiegle würde dann bei denen alles auf kopf stehen.

schonma danke für die hilfe ^^"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 21:49 
Offline
DGL Member

Registriert: Sa Okt 22, 2005 20:24
Beiträge: 291
Wohnort: Frauenfeld/CH
also so wie ich das sehe müsste der code:

glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex3f(-0.5, -0.5, 0);
glTexCoord2f(1,0);
glVertex3f( 0.5, -0.5, 0);
glTexCoord2f(1,1);
glVertex3f( 0.5, 0.5, 0);
glTexCoord2f(0,1);
glVertex3f(-0.5, 0.5, 0);
glEnd;

zu dem abgeändert werden:

glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex3f(0.5, 0.5, 0);
glTexCoord2f(1,0);
glVertex3f( -0.5, 0.5, 0);
glTexCoord2f(1,1);
glVertex3f( -0.5, -0.5, 0);
glTexCoord2f(0,1);
glVertex3f(0.5, -0.5, 0);
glEnd;

einfach vorzeichen kehren ;)

_________________
bester uo-shard: www.uosigena.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 21:55 
Offline
DGL Member

Registriert: Mi Aug 23, 2006 10:27
Beiträge: 42
also einfach spiegeln, was aber eigentlich falsch wäre?

denn die textur ist richtig rum.
und ich knüpfe doch zB an linke untere Ecke des Quads auch die links untere ecke der Textur?

Im Tutorial hats ja auch geklappt, dass da richtig angezeigt wird. ( und bis auf die stauchung ist bei mir der code gleich )
http://wiki.delphigl.com/index.php/Tuto ... gemacht.21

Oder ist das eine Eigenheit von SDL / OpenGL, dass die texturen gespiegelt werden beim laden? bzw was ich eher wissen will, dass es immer so ist, dass texturen gespiegelt werden? im Tutorial fand ich davon nichts und fand deshalb verwirrend meine textur auf dem Kopf zu sehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 21:58 
Offline
DGL Member

Registriert: Sa Okt 22, 2005 20:24
Beiträge: 291
Wohnort: Frauenfeld/CH
soviel ich weiss ist bei mir der linke obere punkt immer die textur koordinate 0,0.

Bist du im Ortho mode? weil wenn ja, dann kann es sein, dass du den orthomode anders initialisierst wie im tutorial, was aber nicht schlimm ist. Dann nimmt man einfach bottom für top und umgekehrt.

_________________
bester uo-shard: www.uosigena.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 22:08 
Offline
DGL Member

Registriert: Mi Aug 23, 2006 10:27
Beiträge: 42
ich weis leider nicht, was der ortho mode ist. ich hielt mich schon an das tutorial.
aber was ortho mode ist hab ich entweder noch nicht gehabt oder schon vergessen.


nach der abbildung + beschreibung lag ursprung links unten und nicht oben. etwas verwirrend das ganze.
http://wiki.delphigl.com/index.php/Bild ... _texuv.gif


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 22:18 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Halt STOP!!!
SDL lädt die Textur anders rum, daher ensteht das "Problem".
Welches richtig ist ist ne Glaubensfrage :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 25, 2006 08:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Japp. Ich glaube auch, dass man sich über diese Frage lange und laut streiten kann. Fakt ist, dass die meisten Texturenloader die Daten so einladen wie sich in der Datei befinden. Das bedeutet aber, dass die unterste Zeile als erstes im Speicher liegt. Wenn du jetzt aber Texturkoordinaten benutzt die es vorraussetzen, dass die Textur richtig herum im Speicher liegt, dann steht sie natürlich auf dem Kopf. Und leider zieht sich das auch bis zu gängigen 3D Programmen durch. Dort stehen die Texturen nämlich auch auf dem Kopf. Bei der Glut sieht es ähnlich aus. Bei Cubemaps müssen die Texturen aber wiederrum richtig im Speicher liegen, weswegen man teilweise gespiegelte Texturen auf der Platte finden kann. Aber auch nur weil die Koordinaten da per OpenGL berechnet werden.

Allerdings sind die Texturkoordinaten sehr flexibel und geduldig. Die lassen alles mit sich machen. Also von daher gibt es dort kein Richtig oder Falsch. Es gibt nur deinen Geschmack und den der Anderen. ;-)

PS: Mich fuchst das auch. Und ich wüsste zu gerne wer mit dem Scheiß angefangen aber leider ist es nicht Falsch sondern nur äußerst flexibel.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 25, 2006 08:57 
Offline
DGL Member

Registriert: Mi Aug 23, 2006 10:27
Beiträge: 42
danke, glaub es hat klick gemacht ^^

Ich glaub, ich werde das Problem lösen indem ich einfach rechts oben als ursprung nehme. Sozusagen im Programm dann die Texturen flippe
Und die Frage, ob das die beste Lösung wäre, ist wohl fehl am Platze, da jeder für sichd a ne Lösung finden muss.

Nur wie ist das zB in Milkshape geregelt?
Bloss wenn ich später dort meine Modells inkl Texturen erstelle, kann ich die später in mein Programm laden, ohne dass die texturen wieder auf dem Kopf stehen? Oder erledigt sich das Problem, da man selbst einen Parser schreiben wird, um diese Modelle laden zu können.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 25, 2006 09:11 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Werfe er einen Blick in unser SDL-Template der SDK. Dort hat Jonas eine Funktion eingefügt, die das flippen während des Ladens durchführt, so dass man sich so manchen ausgerenkten Hals vorm Bildbearbeitungsprogramm erspart. IMAO (Ich finde es nicht) gab es vor kurzem auf der SDL-ML auch eine Diskussion darüber, ob man dies vielleicht im Rahmen von 1.3 (bzw. 2.0) anpassen sollte.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 25, 2006 10:14 
Offline
DGL Member

Registriert: Mi Aug 23, 2006 10:27
Beiträge: 42
wie lautet diese funktion?

glaub, wärs sinnvoll diese funktion auch im entsprechendem tutorial kurz zu nennen.
man braucht die nicht sofort zu beschreiben was sie tut, aber reinnehmen, damit nicht wieder alles auf den kopf steht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 25, 2006 10:31 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Code:
  1. //----------------------------------------------------------------------------
  2. // help function to flip the texture
  3. //----------------------------------------------------------------------------
  4. procedure surfaceFlip(Surface: PSDL_Surface);
  5. var
  6.   x,y: Integer;
  7.   a,b: UInt32;
  8. begin
  9.   // we flip the surface
  10.   for y:=0 to ((surface.h-1) div 2) do
  11.     for x:=0 to surface.w-1 do
  12.     begin
  13.       a:=SDL_GetPixel(Surface,x,y);
  14.       b:=SDL_GetPixel(Surface,x,surface.h-1-y);
  15.       SDL_PutPixel(Surface,x,y,b);
  16.       SDL_PutPixel(Surface,x,surface.h-1-y,a);
  17.     end;
  18. end;


Es handelt sich dabei nicht um eine SDL-Funktion, daher könnte es zu Verwirrungen kommen. Insbesondere, weil (wie bereits angesprochen) es durchaus unterschiedlichen Glaube darüber gibt, wie herum eine Textur zu sein hat.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 25, 2006 10:44 
Offline
DGL Member

Registriert: Mi Aug 23, 2006 10:27
Beiträge: 42
hab die funktion eingefügt, aber delphi kan nichts mit 'SDL_GetPixel' und 'SDL_PutPixel' anfangen.

glaub, ich machs einfacher, indem ich annehme, ursprung wäre links oben, wenn ich ein objekt texturiere.

trotzdem danke.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 25, 2006 10:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Vor allem wenn ich mir das so anschaue dürfte das auch nicht unbedingt die schnellste Methode sein. Dort wird Pixel für Pixel kopiert und beim Flippen in dieser Richtung kann man bequemerweise Zeilenweise kopieren. Und es eigentlich nur reine Geschmackssache ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 25, 2006 13:20 
Offline
DGL Member

Registriert: Mi Aug 23, 2006 10:27
Beiträge: 42
aber man würde die textur eh nur einmal in dem speicher haben. daher würde flippen zu den fix-kosten gehören, die man vernachlässigen könnte.

aber die textur wird man am ende eh an objekt kleben müssen, und da ist es doch für openGL egal wie rum? also wenn man dort haltlinks oben 0,0 oder 0,1 hat ist für openGL kein unterschied, bis auf, dass am ende textur anders rumhängt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 25, 2006 13:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Klar. Für OpenGL ist es so etwas von egal. Aber bei den "Fix Kosten". Stell dir mal vor, dass diese Methode recht langsam ist. 200ms pro Flip. Und wenn dein Projekt irgendwann mal richtig groß wird und viele (100) Texturen hat. Da wird sich ganz schön etwas aufsummieren was eigentlich nicht nötig wäre. Aber okay. Ich bin vielleicht auch ein bisschen Optimierungssüchtig. Bzw Aufwand der nicht unbedingt nötig ist vermeide ich so häufig wie es geht. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]