Mehrere Texturen aufs Terrain legen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

stepuh

Betreff: Mehrere Texturen aufs Terrain legen

BeitragSa, Jul 10, 2004 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

..also ich hab mal angefangen mir B3D anzulernen... mit relativen erfolg..

jetzt mein prob:
ich möchte mehrere texturen auf ein terrain machen.
da man aber nur eine texur auf ein mesh machen kann gestaltet sich
das als recht schwierig (multitexturing nicht gemeint)

ich habe mit jetzt selber ein terrain erstellt, welches sich aus vielen Surfaces zusammensetzt und dadurch man jedes einzelne Surface seperat texturieren kann.
allerdings habe ich das problem das dadurch 4 mal soviele Vertex-Punkte
erzeugt und auch berechnet werden müssen als ein normales terrain..


hier mal ein wenig code:

Code: [AUSKLAPPEN]


Function Create_Main(Breite,Hoehe)

   ;Erstellt ein Mesh mit seiner Oberfläche (Surface)
   Mesh = CreateMesh()
   Surf = CreateSurface(Mesh)

   ;Die Array-Größen werden Scaliert
   Dim vert(Breite,Hoehe,1,1)
   Dim Surface(Breite,Hoehe)
   Dim Brush(Breite,Hoehe)


   ;Die Surfaces und Vertex-Ponts werden erstellt und dann verbunden
   For i = 0 To Breite
      For k = 0 To Hoehe

         ;Erstellt die Oberfläche
         Surface(i,k) = CreateSurface(Mesh,Brush(i,k))

         ;Erstellt die Vertexpunkte
         vert(i,k,0,0)=AddVertex(Surface(i,k),i+0, 5 ,k+0  ,0,1)
         vert(i,k,0,1)=AddVertex(Surface(i,k),i+0, 5 ,k+1  ,0,0)
         vert(i,k,1,1)=AddVertex(Surface,i,k),i+1, 5 ,k+1  ,1,0)
         vert(i,k,1,0)=AddVertex(Surface(i,k),i+1, 5 ,k+0  ,1,1)
         
         ;Verbindet die Vertexpunkte
         AddTriangle Surface(i,k),vert(i,k,0,0),vert(i,k,1,1),vert(i,k,1,0)
         AddTriangle Surface(i,k),vert(i,k,0,0),vert(i,k,0,1),vert(i,k,1,1)

      Next
   Next

   
   

   ;Liefert die Identität der Map zutück   
   EntityFX Mesh,32
   UpdateNormals Mesh
   Return Mesh


End Function




das hat dann zum vorteil, dass ich mit hilfe des Brush-Systems
im nachhinein die einzelnen "Vierecke", aus denen sich die map zusammensetzt, unabhängig texturieren kann.
nur leider eben sehr speicher/leistungsfressend.
ausserdem sind die vertexpunkte der vierecke nicht zusammenhängend
sodass ich einzelne stücke heraustrennen könnte.. ..ich glaube ihr wisst was ich meine Smile


eine andere variante:
Code: [AUSKLAPPEN]



Function Create_Main(Breite,Hoehe)

   ;Erstellt ein Mesh mit seiner Oberfläche (Surface)
   Mesh = CreateMesh()
   Surf = CreateSurface(Mesh)

   ;Die Array-Größen werden Scaliert
   Dim vert(Breite,Hoehe,1,1)
   Dim Surface(Breite,Hoehe)
   Dim Brush(Breite,Hoehe)


   Surf = CreateSurface(Mesh)
   For i = 1 To Breite
      For k = 1 To Hoehe
         vert(i,k,0,0)=AddVertex(Surf,i,5,k,i Mod 2,k Mod 2)
      Next
   Next

   For i = 1 To Breite -1
      For k = 1 To Hoehe -1
         AddTriangle Surf,vert(i,k,0,0),vert(i+1,k+1,0,0),vert(i+1,k,0,0)
         AddTriangle Surf,vert(i,k,0,0),vert(i,k+1,0,0),vert(i+1,k+1,0,0)
      Next
   Next

   ;Liefert die Identität der Map zutück   
   EntityFX Mesh,32
   UpdateNormals Mesh
   Return Mesh


End Function






hier ist der Nachteil, dass ich nicht mehrere texturen auf das Terrain
legen kann


...kann mir jemand helfen?
mache ich vllt alled falsch und es geht viel einfacher?
..danke im voraus! Very Happy
http://www.web13.shells24.de/banner.png

Markus2

BeitragSa, Jul 10, 2004 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht doch schon gut aus ,
also du hast ein Mesh als Terrain mit einer Texture .
Diese Meshes kannst du ja nebeneinander anordnen .
Als Texturegröße so ca. 512x512 nehmen pro Mesh .
Und dann könntest du eine Texture für alle zum überblenden
nehmen das es besser aussieht .
 

stepuh

BeitragSa, Jul 10, 2004 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
jo.. stimmt schon Smile

aber dann habe ich ja wieder den nachteil, dass ich für jedes "viereck"
dann auch vier Vertex-punkte habe. das ist dann 4 mal langsamer
als ein großes, zusammenhängendes mesh zu haben

...ich hatte mir gedacht, dass man aus 4 Vertexpunkten an einer stelle
einen machen könnte.. allerdings klappt das dann wieder mit den
surfaces nicht
http://www.web13.shells24.de/banner.png
 

stepuh

BeitragSa, Jul 10, 2004 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
dann noch was: wenn ich dieses verfahren nehme, wie auch Izewind
https://www.blitzforum.de/view...hlight=ale
dann muss ich doch bei der kollision mit der map für jedes einzelne viereck ein eine kollisionsabfrage mit dem player machen .. (oder nicht? Confused )
http://www.web13.shells24.de/banner.png

Markus2

BeitragSo, Jul 11, 2004 3:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube du hast nicht verstanden was die UVs bedeuten .
UV Koordinaten sind nichts anderes als XY nur das die im Bereich
von 0-1 sind . 0,0 heißt also links/oben der Texture und
1,1 rechts/unten von der Texture .
Also dein ganzes Mesh was ja viereckig ist kann ruhig viele
kleine Vierecke haben und die Vertices kannst du ruhig teilen
mit anderen Dreiecken .
Die UVs mußte so umrechnen das oben/links (vom Mesh) 0,0 ist und
unten/rechts 1,1 . Die UVs setzte dann für jeden Vertex .
Es reicht eine Collision für jeweils ein Mesh .
Dein Terrain setzt du dann so aneinander
wie du es gern hättest , also z.B. 4x4 Meshes das es
ein Viereck ergibt oder hintereinander für eine Rennstrecke .
 

stepuh

BeitragSo, Jul 11, 2004 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
jo... das ist mir schon klar...
...hmm..
stelle ich meine frage mal anders:

kann ich in einem zusammenhängendem gitterobjekt, welches nicht aus
vielen kleinen zusammenhängt mehrere surfaces erstellen?
ja oder nein.. wenn ja: wie?


..ums nochmal zu verdeutlichen:
Izewinds variante bestand aus vielen kleinen vierecken die alle ein surface hatten.. zusammen ergaben sie ein mesh..
ich will das aber mit nur einem(!!) gitterobjekt machen
http://www.web13.shells24.de/banner.png

Markus2

BeitragSo, Jul 11, 2004 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Mesh kann mehrere Surfaces haben und die wiederum Vertices .
Optimaler wäre aber mehere Meshes mit jeweils eine Surface weil man
das Entity dann ausblenden kann wenn es nicht im sichtbaren Bereich ist .
Also wenn das ganze Terrain eh immer sichtbar ist kannst du auch
ein großes Mesh nehmen .

Ich sag mal so wenig Surfaces benutzen wie geht ,
allerdings hat eine Surface nur eine Texture , alles andere
kannste da nur drüber blenden .
Zu groß dürfen die Texturen auch nicht sein weil die extrem Speicher
fressen . Pro Surface solltest du eben genug Dreiecke benutzen
das dein Terrain gescheit aussieht und an flachen Stellen evtl.
weniger benutzen wenn die eh in einer Ebene liegen , das
kann man an steilen Stellen genaus so anwenden , ist aber
ne komplizierte Angelegenheit wenn man das direkt in BB macht .

Also ich benutze für ein 250x250m Terrain eine Texture von 512x512 .
Davon habe ich im Moment 16 Stück und eine gesamt Spielfläche
von 1x1km was nicht gerade viel ist aber wenn man immer nur
1x1 km anzeigt und andere nachladet könnte man auch größere
Flächen machen .
Auch sind kleinere Meshes bei der Collision schneller .

Bei deiner Funk. müßtest du noch nen Offset angeben für
die Vertices die erzeugt werden , dann haste mehrere Surfaces
bei nur einem Mesh . Und das Mesh darfst du dann auch nur einmal
erzeugen was klar sein dürfte .

Zitat:
Izewinds variante bestand aus vielen kleinen vierecken die alle ein surface hatten.. zusammen ergaben sie ein mesh..


Das ist zwei deutig ,
hatte jede Surface nun ein Viereck oder benutzen alle Vierecke die gleiche .
 

stepuh

BeitragSo, Jul 11, 2004 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
also erstmal danke!


er hat es so gemacht:
(mal vorweg: sein ziel war es eine tileengine auf ein terrain zu bringen)

er hat ein surface erstellt
und dazu vier vertexes -> zum viereck verbunden

...das hat er dann entsprechend oft gemacht
(je nachdem wie groß seine tilemap war)


so.. und alles zusammen wurde in jeweils einem mesh gespeichert

dh. hatte er eine map von 5,5 hatte er 25 meshs

ich mach das dagegen alles in einem mesh
dh auch bei einer map von 5,5 hab ich nur ein mesh

..ich hoffe das konnte man jetzt verstehen Embarassed


so.. dann gleich ne neue frage hinterher:
ich bin grad dabei einen editor zu machen:
wie bekomme ich es hin, dass ein mesh an die stelle bewegt wird,
wo die maus ist?
also wie kann ich 2d-koordinaten in 3d umwandeln?
http://www.web13.shells24.de/banner.png

Markus2

BeitragSo, Jul 11, 2004 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Also eine Surface mit nur einem Viereck ist nicht gerade sinnvoll ,
kommt eben drauf an was man machen will .
Zumindest hätte er alle Vierecke mit gleicher Texture auf eine
Surface unterbringen können wenn es der Fall wäre .

Was du suchst ist CameraPick ( camera,viewport_x#,viewport_y# )
Zurück bekommst du PickedEntity , Picked X Y Z etc.
Zur hilfe kannst du ein Plane nehmen und den Pickmode setzen .
Du mußt also was im Raum haben zum anfassen ,
ist die einfachste Lösung .
 

stepuh

BeitragSo, Jul 11, 2004 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke!
http://www.web13.shells24.de/banner.png

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group