geschickt Polygon mit Textur bekleben
-
Ich hab mir gedacht, ich mach für den Anfang mal so ne Art Level oder 3d Editor der primitivstn Art. Das heißt man verschiebt nen Cursor per tastatur und setzt einzelne Vertexe für die Polygone... das ganze wird natürlich schön dynamisch. Ist ja auch alles kein Problem.
Nur die Texturenausrichtung. Man hat für ne textur ja vier Koordinaten (0,0),(0,1),(1,0) und (1,1) (wenn man das gescale etc weglässt). Für die 3 Vertexe kann man dann ja drei dieser koordinaten in belibiger Reihenfolge benutzen... Das Problem ist nur, dass ich dann genau 30 Möglichkeiten habe, die textur auf dem polygon zu positionieren. Und jetzt hab ich leider keine Ahnung mehr, wie ich weiter machen soll... ich kann ja schlecht ne taste machen, mit der man dann alle 30 Möglichkeiten durchgehen kann.
Hat vieleicht irgend jemand ne Idee, nen Beispiel oder was auch immer um mir hier in diesem Möglichkeitenchaos weiterzuhelfen. Man kann die ganzen Möglichkeiten vieleicht auch irgendwie in ein paar Grundlegende aufteilen.. oder wie auch immer. Ihr müsst doch auch alle mal mit diesem problem zu tun gehabt haben.. oder?
Vielen Dank schon mal für eure Hilfe
-
Achja, ich benutze OpenGL, auch wenn das hier vieleicht eher zweitrangig ist
-
Nö, aber Du könntest ja Schalter für horizontal/vertikal spiegeln etc. einbauen...
-
ja.. irgendwie so könnte ichs machen, wenn ich nur wüsste, welche Möglichkeit jetzt was am Ende anzeigt. Gerade hab ich gemerkt, das ich bei den Texturkoordinaten auch was negatives nehmen kann (zb 1,-1) Jetzt hab ich leider keinen Plan mehr, was das jetzt genau bewirkt und wie ich das ins Gesamtkonzept integriere.....
Kann vieleciht nicht irgendjemand mehr als nur einen Satz sagen... wenn es doch so einfach is`t?
-
Also, ich bin auch kein rul0r auf diesem Gebiet, aber, so wie ich's mir denke:
Wenn Du eine Textur (meinetwegen eine BMP-Datei) mit 256 x 256 Pixeln hast, definieren die u,v-Koordinaten ja "nur" ein Quasi-Neues-Koordinaten-System darüber:
D.h. 0,0 ist die obere linke Ecke der Textur.
1,0 unten links (glaub' ich)
0,1 oben rechts
1,1 unten rechts
0.5,0.5 ist also genau der Mittelpunkt der Textur (128. Pixel jeweils)
Wenn ein Quadrat, auf dem die Textur gelagert wird, in der oberen linken Ecke 0.25,0.8 hat, und unten rechts halt 1,1 - dann beginnt die Textur auf dem Quadrat erst am 65. Pixel in y-Richtung und am (0.8 x 256). Pixel in x-Richtung. Wenn das Quadrat trotzdem 256 Pixel x 256 Pixel mißt, wird die Textur entsprechend gezerrt und gestaucht...Oder was meinst Du / verstehst Du nicht?!?
-
nach langem hin und her hab ich herausbekommen, dass 0,0 unten links und 1,1 oben rechts ist... hab nämlich auch gedacht, dass es so ist, wie du es dir gedacht hast.
Ich hab jetzt auch nochmal über den Rest intensiv nachgedacht, ich schreib die 4 Koordinaten in nen Array (von 0,0 bis 1,0) und nehm immer die ersten 3 des Arrays für die Vertexe des Polygons. Dann kann ich mit Hilfe von drei Optionen das ganze vertauschen... hier mal nen Schema:
(1) Das ganze um eins nach vorne rücken um die textur 90° (oder so ähnlich *g*) zu drehen
1->2
2->3
3->4
4->1
(2)+(3) fürs horzontale bzw diagonale spiegeln 1 <->3 oder 2 <->4 vertauschen
also
1->3
2
3->1
4
oder halt
1
2->4
3
4->2Ich glaube damit hätte ich so ziemlich alle Optionen zum Ausrichten.. oder fällt jemanden noch etwas wichtiges ein, dass ich jetzt vergessen bzw falsch gedacht habe?
Danke
-
Vertikales Spiegeln?
Um spezielle Winkel rotieren?
Scalen?
-
Du willst 'nen 3D-Editor (schwer) programmieren, wenn du noch nichtmal Texturkoordinaten(leicht) verstanden hast? Am besten du übst mal noch 1/2 Jahr...
-
ich will bestimmt keinen 3d Editor programmieren.... das ganze soll auf primitivste Art NUR zur Übung sein... (hab ich aber auch ganz oben geschrieben) und ich hab ja schon alles... bis aufs Texturausrichtung... außerdem hab ich die Texturkoordinaten ja verstanden. Mir geht es nur ums ausrichten.
Mir ist nur vorhin aufgefallen, dass ich in meinem Schema noch gar keine horizontalen Spiegelungen habe... das wäre dann zB
1->3
2->4
3->1
4->2Aber wenn du meinst ich soll erst mal 1/2 Jahr etwas anderes machen, dann sag mir bitte was... weil mir fällt leider nix einfacheres und sinnvolleres (sinnvoll zum Üben) ein.
Ach ja, wäre ganz nett wenn mir noch mal jemand sagen könnte, was neg. Texturkoordinaten bewirken, danke.
-
Hi,
i.d.R. verwendet man für einfache Objekte planares Mapping der Koordinaten. Das beudetet Du berechnest die Bounding Box mit Min, Max und Center Werten für das zu bemappende Objekt sowie der Size, also Max-Min. Dann berechnet man die Texturkoordinaten wie folgt:
case X_AXIS: u = (z - min.z) / size.z; v = (y - min.y) / size.y; break; case Y_AXIS: u = (x - min.x) / size.x; v = (z - min.z) / size.z; break; case Z_AXIS: u = (x - min.x) / size.x; v = (y - min.y) / size.y; break;
Wenn Du nur von den Werten 0 und 1 für die Koordinaten ausgehst, dann erhälst Du bei nicht rechteckiger Geometrie eine verzerrte Darstellung der Textur. Rotationen der Textur um 90 Grad sind durch Vertauschen der u und v Werte möglich, beliebige Rotationen durch rotieren der Koordinaten mit den normalen Rotationsformeln.
Ciao,
StefanEDIT: Spiegeln der Textur macht man über das Ändern des Vorzeichens für u bzw. v
[ Dieser Beitrag wurde am 19.04.2003 um 10:37 Uhr von Stefan Zerbst editiert. ]
-
Original erstellt von <noman>:
ich will bestimmt keinen 3d Editor programmierenOriginal erstellt von <noman>:
Ich hab mir gedacht, ich mach für den Anfang mal so ne Art [...] 3d EditorOriginal erstellt von <noman>:
außerdem hab ich die Texturkoordinaten ja verstandenOriginal erstellt von <noman>:
Ach ja, wäre ganz nett wenn mir noch mal jemand sagen könnte, was neg. Texturkoordinaten bewirkenZum Üben würde ich zum Beispiel erstmal die verschiedenen Primitivtypen probieren, wie man mit VBs und IBs umgeht und dann evtl. ein simples Terrain aus einer Heightmap. Die ganzen Beispiele anschauen und viel in der Doku lesen kann auch nicht schaden (Befehle aus der Doku lernen finde ich sinnvoler als aus Tuts raus c&p'en!).