Level mit mehreren Texturen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

JPD

Betreff: Level mit mehreren Texturen

BeitragMo, Aug 09, 2004 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich bin ein Anfänger in Blitz3D. Ich versuche jetzt mal mein Problem zu beschreiben:

Ich habe eine Art Labyrinth. Jede Wand besteht aus 2 Triangeln, also 4 Vertex. Ich möchte jeder Wand eventuell ne andere Textur zuweißen können, oder zumindest zwischen 40 verschiedenen Texturen auswählen können. Das Labyrinth lade ich mit Hilfe einer externen Datei, welche die Positionen der Vertexe beinhaltet und die dazugehöroge Grafik (z.B. 1-40). Wie kann ich nun ein Mesh erstellen, welches mir die Möglichkeit gibt, soviele Texturen zu verwenden?

Währe um eine Antwort dankbar, mfg JPD Rolling Eyes Wink

JPD

BeitragMo, Aug 09, 2004 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Um mein Problem zu verdeutlichen:

Code: [AUSKLAPPEN]

mesh=CreateMesh()

surface1 = CreateSurface( mesh )
surface2 = CreateSurface( mesh )

v1 = AddVertex(surface1,-1,1,0,0,0)
v2 = AddVertex(surface1,1,1,0,1,0)
v3 = AddVertex(surface1,1,-1,0,1,1)
v4 = AddVertex(surface1,-1,-1,0,0,1)

AddTriangle surface1,v1,v2,v4
AddTriangle surface1,v4,v2,v3



b=LoadBrush( "test.bmp" )
PaintSurface surface1,b

v1 = AddVertex(surface2,-1,1,1,0,0)
v2 = AddVertex(surface2,1,1,1,1,0)
v3 = AddVertex(surface2,1,-1,1,1,1)
v4 = AddVertex(surface2,-1,-1,1,0,1)

AddTriangle surface2,v1,v2,v4
AddTriangle surface2,v4,v2,v3

b2=LoadBrush( "logo.bmp" )
PaintSurface surface2,b2


Muss ich jetzt bei jeder neuen Textur ein neues Surface herholen?

JPD

Markus2

BeitragMo, Aug 09, 2004 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Texturen nur einmal laden und dann brauchste
für jede Texture eine Surface .
Du kannst also deine Wände (Vertices) die die gleiche Texture haben
an ein Mesh mit einer Surface hängen .

Möglichkeiten
40 Meshes mit 1 Surface und einer Texture
1 Mesh mit 40 Surfaces und jeweils einer Texture
40 einzelne Wände und CopyEntity benutzen .
Etc...

JPD

BeitragMo, Aug 09, 2004 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Aja, also kann ich zum Beispiel folgendes machen:

Code: [AUSKLAPPEN]

Dim surface(40)


... und kann dann so die Texturen zuordnen. Wieviel Surfaces kann ich maximal verwenden?

JPD Razz [/code]

Markus2

BeitragMo, Aug 09, 2004 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja so in der Art
dim Brush(40)
brush(x)=LoadBrush("...") <- macht ein brush direkt mit Texture
s=CreateSurface ( mesh,brush(x))


Wieviele Surface man erstellen kann weiß ich nicht ,
weiß nur das weniger schneller sind .

Auch sind einzelne Meshes wiederum schneller weil diese
ausgeblendet werden können .
Am besten ist da wohl nen Baukasten aus fertig Wänden
die du dir zusammen setzt .
Und wo ne Wand auf eine andere stößt solltest du
keine Polys verschwenden .
  • Zuletzt bearbeitet von Markus2 am Mo, Aug 09, 2004 20:17, insgesamt einmal bearbeitet

JPD

BeitragMo, Aug 09, 2004 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm ... ich dachte das geht nicht, da man ja nur maximal 8 Brushes pro Surface anwenden kann.

Daher dachte ich mir, die Surfaces durchzuzählen, und jedem Surface ein Brush zuweißen?

Müsste doch gehen?

Markus2

BeitragMo, Aug 09, 2004 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Was du meinst ist was anderes , man kann Texturen übereinander legen .
z.B. Überblenden .

JPD

BeitragMo, Aug 09, 2004 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne, also das geht leider ned ...

Code: [AUSKLAPPEN]

mesh=CreateMesh()

surface1 = CreateSurface( mesh )

Dim b(10)

b(1) = LoadBrush( "logo.bmp" )
b(2) = LoadBrush( "test.bmp" )
b(3) = LoadBrush( "logo.bmp" )
b(4) = LoadBrush( "test.bmp" )
b(5) = LoadBrush( "logo.bmp" )
b(6) = LoadBrush( "test.bmp" )
b(7) = LoadBrush( "logo.bmp" )
b(8) = LoadBrush( "test.bmp" )


For K = 1 To 8

v1 = AddVertex(surface1,K,-1,1,0,0)
v2 = AddVertex(surface1,K,1,1,1,0)
v3 = AddVertex(surface1,K,1,-1,1,1)
v4 = AddVertex(surface1,K,-1,-1,0,1)

AddTriangle surface1,v1,v2,v4
AddTriangle surface1,v4,v2,v3

PaintSurface surface1,b(K)

Next


Das macht Blitz3D net mit ...
wie macht man das denn richtig?

Markus2

BeitragMo, Aug 09, 2004 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab soch gesagt 1 Surface = 1 Texture = 1 Brush

Wenn du Vertices erzeugst mußte auch an die Normale denken
oder nimmst einfach UpdateNormals . (Wegen Licht)
Und für jede Fläche eigene Vertices ist wichtig .

JPD

BeitragMo, Aug 09, 2004 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja sorry. Wie machen das dann die andereren Spieleengines. Z.B. 300 Bitmaps, welche jede einzeln zu einem Triangle zugeordnet werden können... ?

Vielleicht verstehst du jetzt mein kleines Problem .... Sad

Erstellen die zu jeder Bitmap ne andre Mesh? Dann hab ich doch Probleme mit der Kollisionsabfrage. Oder was steckt denn da dahinter?

JPD

Markus2

BeitragMo, Aug 09, 2004 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kann man durch die UVs also Texturekoordinaten machen ,
also eine Bitmap die in wirklichkeit viele kleine Texturen hat wie
nen Schachbrett .
Da sagste mit den UVs einfach von wo bis wo die Texture angezeigt
werden soll .
Also UV ist das gleiche wie XY nur im Bereich von 0-1
wobei 0,0 links oben von der Texture ist und 1,1 rechts unten .
Ich glaube aber das ist für dich zuviel fürn Anfang Wink

JPD

BeitragMo, Aug 09, 2004 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne, ich habe schon mal davon gehört. Es gibt von dem auch n Beispiel in Blitz3D, nur habe ich da die Erfahrung gemacht, dass wenn das nebenstehe Bild weiß ist und mein aktuelles Bild rot, dass an den Rändern des rotes nachher noch Teile vom weißen zu sehen sind. Liegt vielleicht an der Grafikkarte oder so. Aber das ist dann ja total umständlich.

Also. Du kennst ja z.B. Monster Truck Madness. Die Landschaft ist ja genau so aufgebaut. Viele Tiles aneinander welche eine art Terrain darstellen. Ich hab jetzt nur noch Probleme, jedem Tile (2 Triangles) ne Grafik zuzuweißen. Mit Brush gehts net so richtig, Mit Surface lahm ich das Programm zu. Was kann ich denn noch tun?

Markus2

BeitragMo, Aug 09, 2004 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Was du meinst ist
16: Clamp U
32: Clamp V

das verhindert das die Texture gekachelt wird .
Das Problem hatte ich bei einem Terrain wo ich
auch gerätselt habe warum ich nen Rand von der
anderen Seite sehe .

Wie jedes Viereck eine Texture aus einer großen Texture bekommt
habe ich ja oben geschrieben .
Wenn du z.B. die große Texture 4x4 unterteilst haste
bei U oder V z.B. ca. diese Werte
0-0.25
0.25-0.5
0.5-0.75
0.75-1.0

JPD

BeitragMo, Aug 09, 2004 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
wie und wo muss ich dann den befehl einsetzen?

JPD

BeitragMo, Aug 09, 2004 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ah, jetzt unter LoadBrush als Option ...

ja, jetzt sind die Ränder weg. Juhu. Erstes Problem gelöst.

Als zweites müsste ich jetzt nur noch das mit der UV-Map hinbekommen. Meine Tiles würde ich als größe 64x64 wählen, das müsste für ne kleine Racing-Landschaft reichen. Mal etwas rumprobieren.

Ich meld mich dann wieder unter nem neuem Topic.

Danke erstmal 8)

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group