Dann ist Texid definiert - initialisiert wird es dann von glGenTextures. Wahrscheinlich musst Du TexID globl definieren, damit Du dann von überall darauf zugreifen kannst. In den http://www.delphigl.com/launcher.php?em=files Files müssten immer auch im wesentlichen Lauffähige Sourcen herumliegen
nur was ich nun nicht genau verstehe ist das mein Bild aufm Kopf steht
Ich hab es so stehen:
Code:
glBegin(GL_QUADS);
glTexCoord2f(0,0); glVertex3f(-1,-1,0);
glTexCoord2f(0,1); glVertex3f(-1,1,0);
glTexCoord2f(1,1); glVertex3f(1,1,0);
glTexCoord2f(1,0); glVertex3f(1,-1,0);
glEnd;
das bedeutet doch lege
die Textur (0,0) also links unten auf den Punkt (-1,-1,0) also links unten
die Textur (0,1) also links oben auf den Punkt (-1,1,0) also links oben
die Textur (1,1) also rechts oben auf den Punkt (1,1,0) also rechts oben
die Textur (1,0) also rechts unten auf den Punkt (1,-1,0) also rechts unten
Registriert: Do Aug 25, 2005 16:00 Beiträge: 189
Programmiersprache: Java, C#
Lucifer hat geschrieben:
Vielen dank Hatt sich erledigt
nur was ich nun nicht genau verstehe ist das mein Bild aufm Kopf steht
Ich hab es so stehen:
Code:
glBegin(GL_QUADS);
glTexCoord2f(0,0); glVertex3f(-1,-1,0);
glTexCoord2f(0,1); glVertex3f(-1,1,0);
glTexCoord2f(1,1); glVertex3f(1,1,0);
glTexCoord2f(1,0); glVertex3f(1,-1,0);
glEnd;
das bedeutet doch lege die Textur (0,0) also links unten auf den Punkt (-1,-1,0) also links unten die Textur (0,1) also links oben auf den Punkt (-1,1,0) also links oben die Textur (1,1) also rechts oben auf den Punkt (1,1,0) also rechts oben die Textur (1,0) also rechts unten auf den Punkt (1,-1,0) also rechts unten
aber meine jpg wird aber nicht richtig angezeigt
Eigentlich schon. Allerdings gibt es Bilderformate, die die Bilder auf dem Kopf speichern. Das Standart Windows BMP ist so ein Fall wo Bilder auf dem Kopf stehen, bei Targa's gibt es ein Flag das angibt ob das Bild auf dem Kopf steht oder nicht.
Ich weiß allerdings nicht wie das bei .jpg Dateien ist.
Es wird also aller wahrscheinlichkeit nach richtig angezeigt
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
JPEG sind sowieso ganz anders komprimiert als tga oder bmp. Außerdem wird mit SDL geladen und dann müssen sie immer richtig herum geladen werden, denn SDL hat dafür kein Flag bei den Surfaces.
Wenn du dich in 3D befindest, dann ist es aber so, dass die Y Richtung (nach oben) positive Werte hat und nach unten sind negative Werte. Umgedreht zu dem was du normal in 2D (GDI) hast. In OpenGL 2D kann man das frei bestimmen. Der eine mag es so wie in 3D der Andere mag eher wie im Windows.
Im Zweifel lass mal die Textur weg und färbe die obere Kante deines weißen Quads mit Blau ein. Die Kannte sollte laut meiner Aussage jetzt unten erscheinen. Bzw wenn du Backface Culling aktivierst sollte deine Fläche auch verschwunden sein, da aktuell die Rückseite sichbar sein müsste.
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
Und bevor du später stundenlang fehler suchst:
Die Fläche wird verschwinden, wenn du Backface Culling aktivierst.
Also entweder die Frontfacing Fläche umdrehen oder direkt dein Quad in Umgekehrter Reihenfolge (Gegen den Uhrzeigersinn) zeichnen.
Kommt natürlich auf den Blickwinkel an.
_________________ Es werde Licht. glEnable(GL_LIGHTING); Und es ward Licht.
Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Noch eine kleine Anmerkung zu deinem Post. Die Texturkoordinate (0, 0) ist nicht links unten sondern links oben. Zu mindest aus der Sicht von SDL. Es gibt einige Textureloader, die BMPs und TGAs so eingelesen wie sie auf der Festplatte abgelegt sind. Und damit befanden sich die Texturen gespiegelt im Speicher und aus dieser Sicht wäre (0, 0) links unten. Aber SDL packt sie richtig herum in den Speicher weswegen (0, 0) links oben entspricht. Nichts desto trotz steht dein Quad auf dem Kopf. Reihenfolge der Vertexe. Es genügt, wenn du die Vorzeichen der Y Werte bei glVertex umdrehst.
da ist dann nur noch eine sache was ich gerne wissen möchte was ich nicht sondelrich verstanden hab:
Ich hab mir eine procedure geschrieben um sagen wir mal ein Feld zu zeichnen welches ich eigentlich mit texturen belegen wollte.
Wahrscheinlich ist meine Art sehr umständlich und es ginge vielleicht auch einfacher.
Also was ich nicht genau weiss ist wie ich es hinbekommen kann dass:
- entweder das ganze feld mit 1 textur überdeckt wird
- oder dass jeder einzelne quader dieselbe textur erhält
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Na ja. Du arbeitest mit QUAD_STRIPS und da hast du das Problem, dass es EIN Primitiv. Alles zwischen glBegin und glEnd ist ein Primitiv. Und du kannst Einstellungen nur außerhalb ändern. Texturen sind solche Einstellungen. Vertexattribute wie Farbe, Normale und TexturKoordinaten kannst du für jeden Vertex individual festlegen.
Ich würde dir empfehlen QUADS zu benutzen. Auf halbwegs aktuellen Systemen gibt es kaum noch unterschiede. Das ist beides gleich langsam. Und für große Datenmengen gibt es VBOs.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Um sicher eine Bitmap laden zu können, egal welches Format, musst du sie vorher umwandeln oder die von SDL gegebenen Daten interpretieren und entsprechend an OpenGL weiterreichen (die erste Variante ist der weg des geringsten Widerstandes).
Ich habe gerade leider keinen Zugriff auf meinen Code, sonst würde ich dir aushelfen, vielleicht kann das jemand anders tun.
Ich habe das so Gelöst, dass ic mit SDL_CreateRGBSurface eine Zwischensurface erstelle, die das Pixelformat für GL_RGBA hat. Dort blitte ich dann mittels SDL_BlitSurface die ursprüngliche Bildsurface drauf und das schicke ich dann an OpenGL.
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 network • my 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
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Mach dafür einen eigenen Thread auf, es lohnt sich
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 network • my 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
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.