3D "umwickeln"

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Schnuff

Betreff: 3D "umwickeln"

BeitragDo, März 09, 2006 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo, wie schaffe ich es ein 3D objekt zu umwickeln?also nicht, das die Textur immer wieder kommt, sondern dass ich zb: ein Glas habe und einen Aufdruck drumherum wickel
oder ein gesicht(sähe ziemlich blöd sonst aus Laughing )
also das hald in B3D selber!
Programmers dont die. They gosub without return...
 

Dreamora

BeitragDo, März 09, 2006 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach die UV Koordinaten entsprechend anpassen.

ty = höhe
tx = winkel/360.0 (winkel zb aus atan2(zdiff,xdiff))
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Schnuff

BeitragDo, März 09, 2006 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
das verstehe ich nicht, welche höhen, Winkel,...(die vom Bild?)
und wo soll ich die UV koordinaten eintragen?
und was sind UV Koordinaten(falls link, den würde ich auch nemen) Embarassed
Programmers dont die. They gosub without return...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, März 10, 2006 3:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast ein Bild mit verschiedenen Motiven drauf. Sagen wir mal das Bild hat eine größe von 512x512... Dann lädst du das Bild zB so: bild=LoadBrush("bild.bmp",4,512,512)... Danach kannst du jedem Vertex-Punkt beim erstellen 'sagen' von wo er das Bild anfangen zu lesen soll. Das sind dann die UV-Koordianten (UV~XY)...

x-pressive

BeitragFr, März 10, 2006 12:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß noch, das mich das anfangs auch ziemlich verwirrt hat, deshalb kurz mal

Grundsätzliches zu UV-Koordinaten:

Jeder einzelne Punkt eines 3D-Modells hat eine UV-Koordinate (oder sollte haben). Die UV-Koordinate ist ähnlich der XY-Koordinate eines Punkts, hat aber nichts damit zu tun, wo im Raum dieser Punkt liegt, sondern wo dieser Punkt auf der dem Modell zugewiesenen Textur liegt.

U bezeichnet dabei die horizontale Position auf der Texur, V die vertikale (also quasi wie X und Y -damit man das aber nicht mit Raumkoordinaten verwechselt, werden diese beiden Koordinaten eben als UV bezeichnet).

U und V können jeweils Werte zwischen 0.0 und 1.0 annehmen, wobei 0.0 links (U) und oben (V) auf der Texturgrafik bedeutet und 1.0 ganz rechts (U) bzw. unten (V).

Wozu braucht man das? Nehmen wir an, du hast ein simples, flaches Quadrat-Modell aus vier Punkten und möchtest den gesamten Inhalt einer Textur darauf darstellen. Du weist den vier einzelnen Punkten dann folgende Texturkoordinaten zu:

Punkt oben links: 0,0
Punkt oben rechts: 1,0
Punkt unten links: 0,1
Punkt unten rechts: 1,1

Anders gesagt: die UV-Koordinate eines Punkts bestimmt, wo genau er auf der Texturgrafik "festgetackert" wird.

Warum kann man dann nicht gleich Pixelwerte nutzen, sondern eine Zahl zwischen 0.0 und 1.0? Das hat einen riesigen Vorteil: stell dir vor, du hast eine 256x256 Pixel große Textur und entschliesst dich, dann eine 512x512 Pixel große Textur zu benutzen. Die UV-Koordinaten bleiben dabei aber gottseidank immer die gleichen: 0.0 ist immer links oben, 1.0 immer rechts unten, egal wie groß die Grafik ist. Würde man Pixelwerte nehmen, müsste man ja, je nach Größe der Textur, alles wieder umrechnen.

Wenn du dein Modell in einem 3D-Editor erstellst, werden UV-Koordinaten meist automatisch erstellt. Du kannst sie auch mit einem Freeware-Tool wie z.B. LithUnwrap mehr oder weniger komfortabel ändern.

In B3D kannst du UV-Koordinaten einem Punkt zuweisen, während du ihn erzeugst:

Code: [AUSKLAPPEN]
vertexnummer% = AddVertex (Surface%, x,y,z, u,v)


oder nachträglich ändern mit:

Code: [AUSKLAPPEN]
VertexTexCoords (Surface%, vertexnummer%, u,v)



Zu deinem Problem: am einfachsten lässt sich das lösen, in dem du schon im 3D-Editor ein Etikett für die Flasche erstellst und das so positionierst, das es ganz dicht vorne an der Flasche klebt. Diesem Etikett weist du eine Textur zu. Beim Exportieren des Modells darauf achten, das Unterobjekte erhalten bleiben (also nach .3ds oder .b3d exportieren). Dann kannst du dem Unterobjekt "Etikett" später in B3D immer wieder eine andere Textur zuweisen.

@Dreamora: du scheinst in der Mathematik die Liebe deines Lebens gefunden zu haben Wink
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

Schnuff

BeitragSa, März 11, 2006 10:58
Antworten mit Zitat
Benutzer-Profile anzeigen
also sprich, ich gebe ein mesh frei, verändere die Textur und lade es dann wieder?
Programmers dont die. They gosub without return...

x-pressive

BeitragSa, März 11, 2006 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Bezogen auf was? Wenn du nur die Textur eines Meshes austauschen willst, reicht es, einfach eine andere Textur reinzuladen und sie dem Mesh zuzuweisen. Die alte Textur halt löschen, wenn sie nicht mehr gebraucht wird.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

Dreamora

BeitragSa, März 11, 2006 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du ein Objekt zusätzliche zum jetzigen Material umwickeln lassen willst, kannst du auch eine zweite UV Koordinate zum Vertex hinzufügen und der Textur das zweite UV Set als Koordinatenset zuweisen.

Blitz3D unterstützt bis zu zwei UV Sets pro Vertex, nicht nur eines.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group