Mehrere Texturen aufs Terrain legen
Übersicht

stepuhBetreff: Mehrere Texturen aufs Terrain legen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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! ![]() |
||
http://www.web13.shells24.de/banner.png |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jo.. stimmt schon ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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? ![]() |
||
http://www.web13.shells24.de/banner.png |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok danke! | ||
http://www.web13.shells24.de/banner.png |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group