texturieren von createmesh()
Übersicht

![]() |
darthBetreff: texturieren von createmesh() |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi,
ich kreiere eine mesh, schön mit Code: [AUSKLAPPEN] mesh=createmesh()
brush=createbrush() surface=createsurface(mesh,brush) dann füge ich mit addvertex() punkte und mit addtriangle() trigs hinzu. danach lade ich eine textur, schön mit Code: [AUSKLAPPEN] tex=loadtexture("tex.jpg")
dann möchte ich die mesh texturieren damit, also Code: [AUSKLAPPEN] entitytexture mesh,tex
aber das geht nicht. die mesh nimmt zwar eine andere farbe an, sonst passiert aber nichts => keine textur. als nächstes habe ich das hier probiert: Code: [AUSKLAPPEN] brush=loadbrush("tex.jpg"
paintmesh mesh,brush aber auch das hat leider nicht funktioniert. nun stellt sich die frage: ist es überhaupt möglich, selbst erstellte objekte (die eine brush haben, haben müssen - für das surface) "ordentlich" (mit verzerrungen halt, falls) zu texturieren? die meshs sind auf entityfx 16 ANM: farben gehen ohne problem, also entitycolor mesh,r,g,b |
||
Diese Signatur ist leer. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das mesh ist sauber texturiert.
Das Problem ist das du keine UV koordinaten angeben hast, also haben alle Vertices die UV Koordinate 0,0, was dem pixel links oben auf der Textur entspricht. Musst dir überlegen welche Texturteile wo auf dem Mesh zu liegen kommen sollen und die entsprechenden Werte bei addVertex mit einfügen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
- Zuletzt bearbeitet von Dreamora am Do, Feb 08, 2007 0:53, insgesamt einmal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei ql:AddVertex gibt es weitere Parameter [u],[v] damit machst du dir dein eigenes UV-Maping für jedes Vertice einzelnd. Zufuss sozusagen. ![]() Standardmässig ist u=0,v=0 links/oben eines Images und u=1,v=1 rechts/unten. Ausserdem empfielt sich LoadBrush() da ich mir jetzt nicht sicher bin, ob mit LoadTexture eigenes UV-Maping erlaubt? |
||
Problemchen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi, LoadTexture ist kein Problem in Verbindung mit Brushes, das funktioniert ganz gut. Hab's in etwa so eingesetzt:
Code: [AUSKLAPPEN] gtex_wand=LoadTexture ("textiles/wand/wand001.bmp")
BrushTexture gtex_wand_brush,gtex_wand [..] PaintSurface tempsurfacewand,gtex_wand_brush Problemchen |
||
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
@dremora,hectic:
also einfach die mappingmethode wählen (zylindermap z.b) und dann bei den addvertexen einfügen? und der triangle wird dann automat. ergänzt? angenommen also Code: [AUSKLAPPEN] addvertex(surf,0,0,0,0,1)
addvertex(surf,25,0,0,1,1) addvertex(surf,25,25,0,1,0) und dann wird alles dazwischen stetig ergänzt? (der punkt neben dem vertex hat dann die u von 0+1/breite usw.) @problemchen: geht nicht :/ |
||
Diese Signatur ist leer. |
Problemchen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@darth gamer: Natürlich geht es, nur musst du auch wie oben schon beschrieben die Texturkoordinaten setzen, das hatte ich nicht extra nochmal erwähnen wollen.
Code: [AUSKLAPPEN] Const xscr=1024
Const yscr=768 Const dscr=32 Graphics3D xscr,yscr,dscr,0 SetBuffer BackBuffer() SeedRnd MilliSecs() HWMultiTex True WBuffer enable camera=CreateCamera() PositionEntity camera,0,0,-25 CameraRange camera,.1,65535 light=CreateLight() PositionEntity light, 50,50,-10 ;Daten vorbereiten einetextur=LoadTexture ("1.bmp") einbrush=CreateBrush() BrushTexture einbrush,einetextur einmesh=CreateMesh() einesurface=CreateSurface(einmesh) ;Texturkoordinaten definieren (Hier mal Werte durchprobieren) t0u#=1 : t0v#=1 t1u#=0 : t1v#=1 t2u#=0 : t2v#=0 t3u#=1 : t3v#=0 ;Punkte zur Surface hinzufügen v0 = AddVertex (einesurface,0, 0, 0, t0u#,t0v#) v1 = AddVertex (einesurface,10, 0, 0, t1u#,t1v#) v2 = AddVertex (einesurface,10, 10, 0, t2u#,t2v#) v3 = AddVertex (einesurface,0, 10, 0, t3u#,t3v#) ;2 Dreiecke bilden AddTriangle(einesurface,v3,v2,v0) AddTriangle(einesurface,v2,v1,v0) ;Die Surface (eben die beiden Dreiecke) einfärben PaintSurface einesurface,einbrush ;Positionieren PositionEntity einmesh,0,0,0 ;Mainloop While Not KeyDown( 1 ) RenderWorld Flip Wend End Nimm eine beliebige Textur, gut wäre eine mit Schrift um Spiegelungen zu erkennen und spiele ein bischen mit den Werten bei t0u#/t0v# bis t3u#/t3v#, dann erkennst du den Zusammenhang ![]() Problemchen |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
darth gamer hat Folgendes geschrieben: @dremora,hectic:
also einfach die mappingmethode wählen (zylindermap z.b) und dann bei den addvertexen einfügen? und der triangle wird dann automat. ergänzt? angenommen also Code: [AUSKLAPPEN] addvertex(surf,0,0,0,0,1)
addvertex(surf,25,0,0,1,1) addvertex(surf,25,25,0,1,0) und dann wird alles dazwischen stetig ergänzt? (der punkt neben dem vertex hat dann die u von 0+1/breite usw.) Ja, die Texturkoordinate auf einem Dreckeck wird zwischen den UV Koordinaten der Vertices interpoliert. Allerdings hat die Textur nur koordinaten von 0,0 bis 1,0. Alles was drüber ist, kommt links wieder rein. (sag ich nur weil dein Satz in klammern den ich fett gemacht, nicht umbedingt sinn macht) Wenn du also zb ein Gitter machst, das 1x mit der Textur belegt sein soll, so musst du die UVs entsprechend berechnen (U / V Schritt ist 1.0 / AnzahlUnterteilungen = 1.0 / (AnzahlVerticesProSeite - 1) ) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
macht er doch :O
wenn man annimmt dass die breite des trigs dem abstand der beiden punkte entspricht (also nur eine koordinate verschieden) dann ist der bei einer stetigen unterteilung die verschiebung 1/breite also 1/abs(x2-x1). das war damit gemeint... gut, wenn das so ist werd ich wohl tippen müssen, thx |
||
Diese Signatur ist leer. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
In einem Dreieck gibt es keine Unterteilung. Und du sagtest das es von 0 - 1 geht in den UV. Deswegen machte die Formel da 0 Sinn, denn die UV Koordinate 1 ist bereits das Ende der Textur (sie geht nicht von 0 bis Texturbreite, sondern 0 bis 1).
Aber wenn du damit ein Gitter / QuadStreifen gemeint hast wo an einem Ende U = 0 und am anderen U = 1, dann machts Sinn. Auch wenn die Formel dann immer noch falsch ist ![]() Denn es wäre (x2 - x1) / gesamtBreiteStreifen Es müssen definitiv die beiden x und die Gesamtbreite vorkommen, wenn etwas davon fehlt kann sie nicht stimmen da die Relation nicht existiert von "Teil zum Ganzen = U zu 1" (einfach ausgedrückt) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Darth Gamer, weil deine Überschrift 'texturieren von createmesh()' heisst, will ich noch was hinzufügen. Wenn du zB LoadBursh bei den Parametern [,SkalU] und [,SkalV] jeweils die Texturbreite und Höhe angibst, dann brauchst du nichts umrechnen, da es dann BB für dich macht. Als Beispiel eine bild.png mit einer Kantenlänge von 256 Pixel geladen mit LoadBrush("bild.png",3,256,256) erlaubt dir dann das Angeben der UV-Koordinaten pixelweise. Lediglich muß beachtet werde, dass ein Pixel erst ab Position 0.5,0.5 beginnt. | ||
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
das umrechnen ist kein problem :/ das schaff ich. was mich nervt ist das doofe tippen... naja ![]() [edit] gut, ich habs geschafft. allerdings sieht es zT abartig doof aus ![]() ich arbeite mit zylindermapping. d.h die u koordinate ist ein winkel und v die höhe. für u multipliziere ich (skalarprodukt) den vektor (0/0/-1) mit dem vektor (xpunkt-entityx()/0/zpunkt-entityz()). das gibt einen wert zwischen -1 und 1. im code: Code: [AUSKLAPPEN] uk#=(EntityZ(o\mesh)-v\koo[3])/Sqr((v\koo[1]-EntityX(o\mesh))^2+(v\koo[3]-EntityZ(o\mesh))^2)+.5
If uk#>1 Then uk#=uk#-1 If uk#<0 Then uk#=1+uk# vk#=(EntityY(o\mesh)-v\koo[2])/MeshHeight(o\mesh)+.5 If vk#>1 Then vk#=vk#-1 If vk#<0 Then vk#=1+vk#[quote] im raytracer nachher sieht es eigentlich ganz iO aus, aber hier mit den "schrägen" dreiecken und der stetigen ergänzung gibt es seltsame resultate. mache ich irgendwo ein fehler in der rechnung?[/quote] |
||
Diese Signatur ist leer. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group