|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
cadrat
Anmeldungsdatum: 09.08.2008 Beiträge: 14 Wohnort: Jork
|
Verfasst am: 13.08.2008, 19:20 Titel: openGL Textur unter Free Basic |
|
|
Hallo Ihr,
ich versuche gerade Stormys openGL-Tutorial (http://other.paul-grunewald.de/ogl/) und bleibe bei den Texturen hängen. Die Bibliothek 2d_opengl.bi hab ich in das Quelltextverzeichnis (inc/) entpackt.
Code: | #include "inc/2d_opengl.bi"
dim Textur as GFXType
call load_texture("Y05.bmp", Textur)
glBindTexture GL_TEXTURE_2D, Textur.Handle
glTranslatef 100,100,0
glBegin GL_QUADS
glTexCoord2f 0, 0
glVertex2i 0, 50
glTexCoord2f 1, 0
glVertex2i 50, 50
glTexCoord2f 1, 1
glVertex2i 50, 0
glTexCoord2f 0, 1
glVertex2i 0, 0
glEnd
glLoadIdentity
glBindTexture GL_TEXTURE_2D, 0 |
Fehlermeldung:'gl2.bas(3) error 135: Only valid in -lang deprecated or fblite or qb, found 'call' in 'call load_texture("Y05.bmp", Textur)
Nächster Versuch mit -lang deprecated kompiliert
Fehlermeldung:/usr/share/freebasic/bin/linux/ld: cannot find -lpng_load_linux
Oder anders gefragt: Wie lade ich ein .bmp (besser .tga laut Empfehlung des Tutorials)
openGL-gerecht? Hat da jemand Erfahrungen?
Gruß und Dank
Stefan
Zuletzt bearbeitet von cadrat am 14.08.2008, 18:13, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Stormy
Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
|
Nach oben |
|
|
cadrat
Anmeldungsdatum: 09.08.2008 Beiträge: 14 Wohnort: Jork
|
Verfasst am: 13.08.2008, 19:44 Titel: |
|
|
Hallo Stormy,
der 'call' ist gelöscht. Nu kömmt:
/usr/share/freebasic/bin/linux/ld: cannot find -lpng_load_linux
... wenn das ein Indiz für die png_lib ist ?
Wäre toll wenn Du deine Bibliothek aktualisieren könntest, dein Tutorial find ich super und würde es gerne bis zum Ende durcharbeiten.
Gruß
Stefan |
|
Nach oben |
|
|
Stormy
Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 13.08.2008, 20:02 Titel: |
|
|
Hallo,
also meine Linux-Distri ist gerade kaputt, aber du könntest die Library noch so zum Laufen bekommen (allerdings dann ohne PNG-Support):
Öffne "\inc\2d_opengl.bi" und darin kommentiere folgende Zeilen weg:
Zeile 45-46:
Code: | #include "zlib.bi"
#include "ogl_load_png.bi"
|
Zeile 64-68:
Code: | ELSEIF extention = "png" THEN
if (not LoadPNG(@texture, filename)) then '' Load The Texture
WriteToConsole "Error: Loading texture... " + filename
return 1
end if |
_________________ +++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial |
|
Nach oben |
|
|
cadrat
Anmeldungsdatum: 09.08.2008 Beiträge: 14 Wohnort: Jork
|
Verfasst am: 14.08.2008, 20:28 Titel: |
|
|
Nu geht Dein Beispielcode ohne Fehler durch den Compiler. Leider bleibt das Rechteck leer. Die Größe passt sich aber an das jeweils probehalber geladene tga/ bmp/ jpg an.
Vielleicht hast noch einen Tip?
Code: | ' Einbindung von OpenGL
#include once "GL/gl.bi"
#include once "GL/glu.bi"
#include "inc/2d_opengl.bi"
const scrnX = 640
const scrnY = 480
const depth = 32
const fullscreen = &h0 ' Vollbildmodus ( &h0 = aus, &h1 = an )
dim Textur as GFXType
load_texture("xxx.tga", Textur)
screenres scrnX,scrnY,depth,,&h2 OR fullscreen
' Konfiguration von OpenGL
glMatrixMode(GL_PROJECTION) ' Matrix definieren
glLoadIdentity
glViewport(0,0,scrnX,scrnY) ' Achse festlegen
glOrtho(0,scrnX,scrnY,0,-128,128)
glMatrixMode(GL_MODELVIEW) ' Deaktivierung des Rendern der Rückseiten
glEnable(GL_CULL_FACE)
glCullFace(GL_BACK)
glEnable GL_TEXTURE_2D ' Texturen aktivieren
glLoadIdentity
glEnable(GL_DEPTH_TEST) ' Tiefentest
glDepthFunc(GL_LESS)
glEnable(GL_ALPHA_TEST) ' Alphatest
glAlphaFunc(GL_GREATER, 0.1)
do
glClear GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT
' !! Hier kommen die Zeichenbefehle rein !!
glBindTexture GL_TEXTURE_2D, Textur.Handle ' Texture binden
glTranslatef 100,100,0 ' z = 0
glBegin GL_QUADS
glTexCoord2f 0, 0
glVertex2i 0, textur.height
glTexCoord2f 1, 0
glVertex2i textur.width, textur.height
glTexCoord2f 1, 1
glVertex2i textur.width, 0
glTexCoord2f 0, 1
glVertex2i 0, 0
glEnd
glLoadIdentity
glBindTexture GL_TEXTURE_2D, 0 ' Texture freigeben
'
glFlush ' Verarbeitung der Befehle
flip
screensync
loop until multikey(&h01) ' Verlasse die Schleife sobald Escape gedrückt wird
end |
|
|
Nach oben |
|
|
Eastler_dart
Anmeldungsdatum: 25.09.2005 Beiträge: 177 Wohnort: Baden-Würtemberg + Sachsen
|
Verfasst am: 14.08.2008, 22:14 Titel: |
|
|
Hallo Leute, hallo cadrat,
versuch mal, im Bereich von "Konfiguration von OpenGL"
mit dem Befehl glDisable GL_BLEND das Blending
auszuschalten.
Bei mir mußte ich das immer tun.
Aber das soll jetzt nicht heißen, daß Texturen unter Blending
nicht funktionieren. Falls mein Tip zu einem ersten Erfolg
führt, hast du die Richtung, wo du weiter suchen mußt.
Irgendwie fehlen dann noch Einstellungen zu einem
korrekten Blending.
Auf der Seite http://www.freebasic-portal.de/ hab ich ein
Tutorial angefangen, um unter FreeBasic mit OpenGL
zu agieren.
Jedoch fehlt (noch) der Bereich Texturen und Blending,
kommt zwar irgendwann noch dazu, aber du brauchst
es ja gleich.
Hoffe es hilft
Eastler _________________ Kaum macht mans richtig, schon geht's |
|
Nach oben |
|
|
Stormy
Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
|
Nach oben |
|
|
cadrat
Anmeldungsdatum: 09.08.2008 Beiträge: 14 Wohnort: Jork
|
Verfasst am: 16.08.2008, 20:24 Titel: |
|
|
Hallo Ihr,
glDisable GL_BLEND brachte leider keinen Erfolg. Die Konsole meldet ein korrektes Programmende. Zweier Potenz passt (64x64 bzw 128x128), .jpg, .bmp, tga mit Ursprung oben links und ohne hab ich probiert. Ich denke das ist, was Stormy meinte, mit seinem Link. Das weiße Viereck passt immer brav seine Größe an das Bitmap an nur es bleibt weiß. Lediglich die Farbtiefe hab ich mit GIMP nich so steuern können, bietet bei .tga nur pauschal RGB an, kann es daran liegen?
Sollte ich da mal ganz tief in die Bildformate einsteigen? Oder von FreeImage hab ich da was gelesen ... Muss doch irgendwie klappen, vielleicht hab ihr einen Tip in welche Richtung ich da meine Recherchen lenken sollte.
Nachtrag #01: Ich glaube ich fange an die Nuss zu knacken. Ich berichte später
Nachtrag #02: Es klappt. Ich seh ein Bild eines Baumes auf dem Schirm.
Code: | ' ╒════════════════════════════════════════════════════════════════════╕
' │ │
' ╘════════════════════════════════════════════════════════════════════╛
#include once "GL/gl.bi"
#include once "GL/glu.bi"
#include "inc/2d_opengl.bi"
' ╒════════════════════════════════════════════════════════════════════╕
' │ │
' ╘════════════════════════════════════════════════════════════════════╛
dim tex as GFXType
' ╒════════════════════════════════════════════════════════════════════╕
' │ │
' ╘════════════════════════════════════════════════════════════════════╛
load_texture("pic/aaa.tga", tex, GL_LINEAR,1)
screen 20, 32, 2, &H02
' ╒════════════════════════════════════════════════════════════════════╕
' │ │
' ╘════════════════════════════════════════════════════════════════════╛
glMatrixMode(GL_PROJECTION) ' Matrix definieren
glLoadIdentity
glViewport(0, 0, 1024 ,768) ' Achse festlegen
glOrtho(0 ,1024 ,768 ,0 ,-128 ,128)
glMatrixMode(GL_MODELVIEW)
glEnable(GL_CULL_FACE)
glCullFace(GL_BACK)
glEnable (GL_TEXTURE_2D) ' Texturen aktivieren
glLoadIdentity
glEnable(GL_DEPTH_TEST) ' Tiefentest
' glDisable (GL_BLEND)
glDepthFunc(GL_LESS)
glEnable(GL_ALPHA_TEST) ' Alphatest
glAlphaFunc(GL_GREATER, 0.1)
glClear GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT
' ╒════════════════════════════════════════════════════════════════════╕
' │ │
' ╘════════════════════════════════════════════════════════════════════╛
glGenTextures(1, @tex.Handle)
glBindTexture GL_TEXTURE_2D, tex.Handle ' Texture binden
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glTexImage2D GL_TEXTURE_2D, 0, 3, _
tex.Height, tex.Width,0 , tex.textype, _
GL_UNSIGNED_BYTE, tex.imageData
glTranslatef 500,100,0 ' z = 0
glBegin GL_QUADS
glTexCoord2f 0, 1: glVertex2i 0 , tex.height
glTexCoord2f 1, 1: glVertex2i tex.width, tex.height
glTexCoord2f 1, 0: glVertex2i tex.width, 0
glTexCoord2f 0, 0: glVertex2i 0 , 0
glEnd
glLoadIdentity
glBindTexture GL_TEXTURE_2D, 0 ' Texture freigeben
' ╒════════════════════════════════════════════════════════════════════╕
' │ │
' ╘════════════════════════════════════════════════════════════════════╛
glFlush ' Verarbeitung der Befehle
flip
screensync
do
loop until multikey(&h01) ' Escape
end
|
|
|
Nach oben |
|
|
Lloyd
Anmeldungsdatum: 27.06.2008 Beiträge: 37 Wohnort: Nähe Frankfurt
|
Verfasst am: 21.09.2008, 00:42 Titel: |
|
|
Hallo!
Sorry,wenn ich den Thread jetzt etwas rauskrame, aber ich hab eigentlich genau das gleiche Problem, wie im erten Post geschildert.
Dann, wenn ich die Datei 2d_opengl.bi importiere, erhalte ich den Fehler:
Zitat: | FreeBASIC\bin\win32\ld.exe: cannot find -lpng_load_windows
|
Ich verstehe nicht, wie ich dem Fehler entgegenwirken kann. ich hab heute extra die neusete Version von Freebasic runtergeladen etc.
Ich konnte nur herausfinden, dass der Fehler nicht kommt, wenn ich den Code im Ordner Freebasic speichere. Das ist nur sehr ungünstig, da sonst die Übersicht völlig flöten geht. Hoffe, mir kann geholfen werden! xD
Bye! |
|
Nach oben |
|
|
Stormy
Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
|
Nach oben |
|
|
Lloyd
Anmeldungsdatum: 27.06.2008 Beiträge: 37 Wohnort: Nähe Frankfurt
|
Verfasst am: 21.09.2008, 14:28 Titel: |
|
|
Aber, das hieße dann doch, dass ich keine PNGs laden kann, oder? Das wäre schon etwas doof, weil ich hauptsächlich mit denen arbeite.
Allerdings hab ich die Zeilen nun auskommentiert, und es kommt keine Fehlermeldng, deswegen schon mal danke!
Trotzdem, wenn ich das doch noch umgehen könnte, wäre das fantastisch!
Hm.... Ich wollte eine Textur ( Bmp ) laden und auf ein Dreieck legen.
In der Console kommt keine Fehlermeldung, weswegen ich davon ausgehe, dass der Fehler nicht beim Laden passiert ist. Evtl. mache ich auch was bei den befehlen für die Textur falsch.
Code: |
glBindTexture GL_TEXTURE_2D, Textur(0).Handle
glBegin GL_Triangles
glTexCoord2i 0, textur(0).height
glVertex3i PositionX(i, 1) + PanX , PositionY(i, 1) + PanY, 2
glTexCoord2i textur(0).width, 1
glVertex3i PositionX(i, 2) + PanX , PositionY(i, 2) + PanY, 2
glTexCoord2i textur(0).width, textur(0).height
glVertex3i PositionX(i, 3) + PanX , PositionY(i, 3) + PanY, 2
glEnd
glBindTexture GL_TEXTURE_2D, 0
|
Die Koordinaten stimmen, das dreieck wird gezeichnet. Nur das ist jetzt vollkommen grün. Die Textur ist übrigens 128x128 Pixel groß. Vielleicht stimmt auch was mit der ordnerangeba nicht:
Code: |
Dim Shared As GFXType Textur(0)
load_texture("Texturen/Wall.bmp", Textur(0))
|
Der ordner Texturen liegt in der gleichen, wie die .bas Datei auch.
Edit:
Hm, ich bräuchte auch die Befehle um Text anzeigen zu lassen und auch eine Eingabe wie Input in eine Variable. Wäre nett, wenn mir das einer sagen könnte! |
|
Nach oben |
|
|
Stormy
Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 21.09.2008, 16:57 Titel: |
|
|
Hallo,
zu der PNG-Geschichte: Kopier die Datei libpng_load_windows.a ins Projekt-Verzeichnis. Damit wäre das Problem gelöst.
Zum zweiten Problem:
Schreib mal glEnable GL_TEXTURE_2D nach dem Texturladen.
Zitat: | Hm, ich bräuchte auch die Befehle um Text anzeigen zu lassen und auch eine Eingabe wie Input in eine Variable. Wäre nett, wenn mir das einer sagen könnte! |
In meinem Tutorial ist eine - wenn auch langsame - Variante vorgestellt. Im Forum wurde auch eine Routine vorgestellt, die FreeType nutzt. Die Input-Routine könntest du dir damit selbst basteln (Stichwort: INKEY$). _________________ +++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial |
|
Nach oben |
|
|
Eastler_dart
Anmeldungsdatum: 25.09.2005 Beiträge: 177 Wohnort: Baden-Würtemberg + Sachsen
|
Verfasst am: 21.09.2008, 17:20 Titel: |
|
|
hallo Alle, hallo Lloyd,
zu deinen Problemen:
1) Textur wird nicht angezeigt
a)prüfe die Texturkoordinaten, laß per:
Code: |
DIM AS INTEGER DateiNr
DateiNr=FreeFile
Open "protokoll.txt" for append as DateiNr
PRINT #Dateinummer, Date & Time & "Texturkoordinaten 1 = 0," & textur(0).height
PRINT #Dateinummer, Date & Time & " 3d-Punkt 1 = 0," & PositionX(i, 1)+PanX & "," & PositionY(i, 1) + PanY & ", 2"
.
.
.
CLOSE DateiNr
''CODE AUS GEDÄCHNTINS, NICHT GETESTET !
|
die Variableninhalte in eine Datei Schreiben.
Alternativ kannst du in obigem Code die Zeile mit dem OPEN durch folgende Zeile ersetzen:
Code: |
Open "CONS" for output as DateiNr
|
dann erscheinen die Ausgaben auf dem Konsolenfenster, das bedeutet auch, daß du dein Programm nicht mit den parametern für Grafikfenster kompilieren darfst, weil dabei das Konsolenfenster dann nicht geöffnet wird und entsprechend deine Variablen nirgends angezeigt werden können.
Es fällt mir noch auf, daß du dein Texturbild erst mit glBindTexture "bindest", um im Nachgang diese Bindung mit parameter "0" zu wiederholen.
Vielleicht lieg ich ja falsch, wenn ich vermute, du willst das Texturieren "An-" und Aus-Schalten", das geht anders:
glEnable GL_Texture_2D schaltet Texturierung ein
glDisable GL_Texture_2D schaltet Texturierung aus
glBindBindTexture bindet ein Texturbild. Solange kein anderes gebunden wird, wird bei jeglichem, nachfolgendem Texturieren dieses Bild verwendet. Diese Bindung muß nicht zwingend aufgehoben werden, wenn man Objekte erstellt, die NICHT texturiert werden sollen, einfach vor solchen Objekten ein glDisable GL_Texture_2D setzen, schon wird nicht mehr Texturiert. Also sind Bind-Befehle erst notwendig, wenn kein oder ein falsches Bild grad gebunden ist.
Wie du schon weißt, arbeite ich grad an dem Tutorial zum Texturieren. Ein erstes Stück ist fertig. Um die Anzeigeoptionen (Umbruch, Einteilung etc.) zu testen, hau ich immer mal ein Stück davon auf meine Benutzer-Seite im FreeBasic-Portal, sozusagen als "Sandbox". Dort steht deshalb ein Stück, wie es laufen kann. Es enthält auch noch ein paar Aufbaufehler, aber das nur im Zusammenhang mit er Tutorial-Ablauf-Reihenfolge, so wie du schon angreifst, kannst du bestimmt einiges aus dem dort stehenden verstehen/verwenden. Klicke einfach: http://www.freebasic-portal.de/index.php?s=userpage&id=156
2) Eingaben:
Schau auf der Portalseite nochmal meine ersten, fertigen Tutorials an, dort frag ich die Tastatur ab, wenn auch (ertst mal) nur die Cursortasten. Geht am besten mit INPUT(1), TextVariable aber ein einziges mal in der GL-Schleife auch mit INKEY. Die Tutorials stehen unter:
http://www.freebasic-portal.de/index.php?s=tutorials&cat=3
3) Anzeigen:
das ist ein kleines Problem. Print, Circle und Co. arbeiten nicht auf einem OpenGL-Fenster. Behilf dich mit dem am Anfang gesagten,
Open "Cons" for output as #DateiNr, um Ausgaben auf dem Konsolefenster auszulösen. Du hast dort zwar keine Grafik, aber um das Programm zu checken ist es völlig ausreichend.
Irgendwann sind meine Tutorials fertig, dann findest du auch die zwei Lösungen, um entweder auf den Anzeigeframe was zu schreiben oder per Textur auf Objekte zu legen.
Falls du es nicht erwarten kannst, soviel kann ich sagen:
du erstellst ein Texturbild, in dem organisiert alle Buchstaben/Zahlen/Zeichen in fiktiven gleich großen Feldern drin sind.
Dann mußt du eine neue Textur anmelden, und innerhalb dem Grafikkartenspeicher aus dem Gesamtbild aller Buchstaben je nach zu schreibendem Text diejenigen in die neu erstellte Textur per OpenGL-Befehl kopieren, die dein Text ergeben. Danach die neue Textur "Binden" und auf ein Objekt setzen.
Nun hoffe ich, daß ich mich halbwegs verständlich ausgedrückt hab
und natürlich, daß es dir hilft
Eastler _________________ Kaum macht mans richtig, schon geht's |
|
Nach oben |
|
|
Lloyd
Anmeldungsdatum: 27.06.2008 Beiträge: 37 Wohnort: Nähe Frankfurt
|
Verfasst am: 21.09.2008, 19:08 Titel: |
|
|
Nach langem rumprobieren, bin ch auf den Fehler gekommen. Was sehr simples, was ich aber nicht wusste:
Ich hatte versucht, die Datei zu laden, noch bevor ich einen Bildschirm "erstellt" hatte. Jetzt gehts! \o/
Hm... ich will eigentlich ja nicht ständig wegen kleinigkeiten fragen, gibts irgendwie sowas wie ne Befehlsreferenz dazu? Jetzt müsste ich wissen, wie ich die Textur exakt so wie sie ist, also ohne drehen und verzerren, auf ein Objekt legen kann. Also, dass ich mehrere Dreiecke nebeneinander hab, und diese beispielsweise eine Mauer bilden. |
|
Nach oben |
|
|
Eastler_dart
Anmeldungsdatum: 25.09.2005 Beiträge: 177 Wohnort: Baden-Würtemberg + Sachsen
|
Verfasst am: 21.09.2008, 20:07 Titel: |
|
|
hallo Alle, hallo Lloyd,
hab grad eben wieder eine erweiterte Version des Textur-Tuts in die Sandbox gespeichert, da ist das was du meinst beschrieben, wenn auch (noch) sehr einfach.
selbst auf die Gefahr hin, daß du das sowieso schon weißt, folgende Hinweise:
a) ohne verdrehen: das kriegst du hin
- Du legst für jeden Objekt-3D-Punkt je einen Punkt auf dem Texturbild an.
- Schaue (virtuell) immer von außen her auf dein Objekt im 3D-Raum auf die zu texturierende Fläche.
- So, wie du die Punkte auf deiner Objektfläche siehst, positionierst du dann die Punkte auf dem Texturbild.
- also, was auf der Objektfläche links oben ist, ist auf dem Texturbild auch links oben (der gesetzte Punkt), für rechts unten auf dem Objekt gleichfalls den Punkt rechts unten auf dem Texturbild setzen.
b) nicht verzerren/Verziehen
- wenn du (virtuell) alle auf dem Texturbild gesetzten Punkte mit Strichen verbindest, sollte die gleiche Form zu sehen sein, wie sie die zu texturierende Fläche hat.
Wenn du also eine sternförmige Fläche texturierst, dann müssen die mit virtuellen Strichen verbundenen Punkte auf der Textur genau diesen Stern auch zeigen.
c) verkleinern/vergrößern
- das gibt es nicht, bzw. ist immer unabstellbar vorhanden. Wenn du z.B. ein Viereck texturierst und auf dem Texturbild das gleiche Viereck mit den Punkten abbildest, stimmts schon.
- Ob das Texturbild nun beim Anzeigen auf dem Objekt/Monitor vergrößert oder verkleinert werden muß, hängt in erster Linie von dem Abstand zwischen "Kamera" und Objekt ab.
- Klar, wenn du eine 256x256-Pixel-Textur auf dein Viereck klebst, ist es bei Kamera-nah-dran viel detailreicher, als z.B. eine 64x64-Pixel-Textur. Aber das liegt in der Natur der Sache.
-Sicher kannst du auch vom Texturbild per Punkte-Setzen nur das linke obere Viertelsquadrat der Fläche auf dein viereckiges Objekt setzen, anstatt das gesamte Texturbild in voller Größe draufkleben, wenn man dein Objekt nur aus weiter Ferne sieht, kann das Sinn machen
-Das Gegenteil davon ist, dein Objekt sieht man sehr nah. Dabei ist eine hochauflösende Textur sinnvoll. Um (Textur-)Speicher zu sparen kannst du für solche Fälle Texturbilder verwenden, die man mehrfach nebeneinander kleben kann, also der rechte Rand des Bildes an den Linken paßt und der Obere auch an den Unteren Rand. So eine quadratische Textur auf deine quadratische Objektseite fünf mal nebeneinander und davon 5 Reihen untereinander kleben geht mit Texturkoordinaten 5.0, 5.0
Was so mancher (ich auch) im Anfang nicht gleich erkennt, man muß nicht für jede zu texturierende Fläche eine eigenes Texturbild an OpenGL schicken. Ein Bild einmal an OpenGL schicken und auf z.B. 20 Flächen kleben ist normal. Sobald man die gl_Beginn Schleife beendet kann man eine nächste Schleife beginnen und mit jetzt anders gesetzten Texturpunkten auf demselben Texturbild ein ganz anderes Objekt tapezieren.
Noch ein Hinweis, bezüglich "richtigrum". Wenn du (wie in meinem Tut) Bitmap-Bilder per BLOAD in den Ram kopierst, sind Oben und Unten im Ram und ergo dann auch auf der Grafikkarte vertauscht/gespiegelt. Das liegt am Speicherformat von Bitamp-24bit, mit welchem FreeBasic in einem solchen Fall arbeitet.
Solltest du mit Bitmap-Dateien arbeiten, dann hast du zwei Möglichkeiten:
1) vor dem Übergeben an OpenGL im Ram zurückspiegeln (empfohlen)
2) Bei jeglichem Setzen von Texturpunkten ebenfalls Oben und Unten vertauschen (nicht empfohlen, zuviel Durcheinander)
hoffe, ich hab mich einigermaßen verständlich ausgedrückt
Eastler _________________ Kaum macht mans richtig, schon geht's |
|
Nach oben |
|
|
Lloyd
Anmeldungsdatum: 27.06.2008 Beiträge: 37 Wohnort: Nähe Frankfurt
|
Verfasst am: 21.09.2008, 20:57 Titel: |
|
|
Nunja, ich hatte mir das so vorgestellt:
Ich hab eine Art Teppich oder Fliesen aus der Textur. Also so, dass sie sich in allen Richtungen wiederholt.
Nun hab ich mehrere Objekte, die diese Textur bekommen sollen.
Hier mal ein Bild ( zugegeben, etwas übertrieben, aber ich denk, es wird klar, was gemeint ist. )
Hoffe, mir kann geholfen werden! ^.^°
Achja, ich bin jetzt erstmal für ne Woche auf klassenfahrt, deswegen ist es nicht mehr so dringend... |
|
Nach oben |
|
|
Eastler_dart
Anmeldungsdatum: 25.09.2005 Beiträge: 177 Wohnort: Baden-Würtemberg + Sachsen
|
Verfasst am: 21.09.2008, 22:09 Titel: |
|
|
hallo Lloyd,
in deinem Beispiel fällt mir Eines auf:
du verwendest die Befehle von OpenGL glTexCoord2i und glVertex3i.
Dazu ist zu sagen, daß die Endung i für INTEGER steht.
Das bedeutet, auch wenn du 1.235 übergibst, OpenGL nimmt dafür den Wert 1. (Integer heißt Ganzzahlen = keine Kommastellen)
Für Texturen gibt man die Positionen der Punkte auf den Bildern Werte von 0 bis 1 mit Kommastellen an, die Mitte des Bildes ist also 0.5 , 0.5
Wenn du dem Befehl glTexCoord mit der Endung 2 und i also sagst, du kriegst 2 Parameter als Ganzzahlen, dann werden deine Kommastellen verschluckt.
Für 3D-Pos und Textur verwende ich immer die Endung f für Float = Floatingpoint = Kommazahlen.
Somit sollten deine Befehle:
glTexCoord2f
glVertex3f
heißen.
Für die Umsetzung deiner beiden Dreiecke auf die Textur gilt folgendes Schema:
Die wirklichen Positionswerte für X und Y auf der Textur kriegst du bestimmt selber hin, sind ja genau genommen die Positionen in der 3D-Welt, nur halt umzurechnen auf Kommawerte zwischen 0 und 1, solange du das Dreieck mit dem Bild 1:1 belegen willst.
Hoffe es hilft
Eastler _________________ Kaum macht mans richtig, schon geht's |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|