Meshterrain und Terrainforming
Übersicht

![]() |
hamZtaAdministratorBetreff: Meshterrain und Terrainforming |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alsoooo
ich erstell mir ein Meshterrain (thx 2 eizdealer) und zwar so: Code: [AUSKLAPPEN] For x = 0 To 40
For y = 0 To 40 map(x,y) = CreateMesh() ;maptex(x,y) = LoadTexture("world\ground1.jpg") tmpbrush = CreateBrush() BrushTexture tmpbrush,m\tex1 tmpsurface= CreateSurface(map(x,y),tmpbrush) v0 = AddVertex(tmpsurface,0,0,0,0,0) v1 = AddVertex(tmpsurface,0,0,1,0,0.5) v2 = AddVertex(tmpsurface,1,0,0,0.5,0) tri = AddTriangle(tmpsurface,v0,v1,v2) v0 = AddVertex(tmpsurface,0,0,1,0,0.5) v1 = AddVertex(tmpsurface,1,0,1,0.5,0.5) v2 = AddVertex(tmpsurface,1,0,0,0.5,0) tri2 = AddTriangle(tmpsurface,v0,v1,v2) v0 = AddVertex(tmpsurface,1,0,1,0.5,0.5) v1 = AddVertex(tmpsurface,0,0,1,0,0.5) v2 = AddVertex(tmpsurface,0,0,2,0,1) tri3 = AddTriangle(tmpsurface,v0,v1,v2) v0 = AddVertex(tmpsurface,0,0,2,0,1) v1 = AddVertex(tmpsurface,1,0,2,0.5,1) v2 = AddVertex(tmpsurface,1,0,1,0.5,0.5) tri4 = AddTriangle(tmpsurface,v0,v1,v2) v0 = AddVertex(tmpsurface,1,0,2,0.5,1) v1 = AddVertex(tmpsurface,2,0,2,1,1) v2 = AddVertex(tmpsurface,2,0,1,1,0.5) tri5 = AddTriangle(tmpsurface,v0,v1,v2) v0 = AddVertex(tmpsurface,2,0,1,1,0.5) v1 = AddVertex(tmpsurface,1,0,1,0.5,0.5) v2 = AddVertex(tmpsurface,1,0,2,0.5,1) tri6 = AddTriangle(tmpsurface,v0,v1,v2) v0 = AddVertex(tmpsurface,2,0,0,1,0) v1 = AddVertex(tmpsurface,1,0,1,0.5,0.5) v2 = AddVertex(tmpsurface,2,0,1,1,0.5) tri7 = AddTriangle(tmpsurface,v0,v1,v2) ;........... ;und noch ein paar dazu PaintMesh map(x,y),tmpbrush UpdateNormals map(x,y) ScaleEntity map(x,y),0.5,0.5,0.5 PositionEntity map(x,y),x*1.5,0,y*1.5 EntityPickMode map(x,y),2 EntityType map(x,y), 1 tmpBrush = 0 ;tmpsurface = 0 Next Next soo funktioniert auch wunderbar, ist aber nich mein problem. mein problem is jetzt das Terrainforming, also das verschieben der vertices usw. Ich wollt das mit folgendem code lösen: Code: [AUSKLAPPEN] If MouseDown(2) Then
ent = CameraPick(m\camera,MouseX(),MouseY()) For x = 0 To 40 For y = 0 To 40 If map(x,y) = ent Then cSurf = PickedSurface() eX = EntityX(map(x,y)) eZ = EntityZ(map(x,y)) For i = 0 To CountVertices(cSurf)-1 vX = VertexX(cSurf, i) vZ = VertexZ(cSurf, i) If PickedX() > (eX+vX)-0.1 And PickedX() < (eX+vX)+0.1 Then If PickedZ() > (eZ+vZ)-0.1 And PickedZ() < (eZ+vZ)+0.1 Then VertexCoords cSurf, i, vX,VertexY(cSurf, i)+0.1,vZ End If End If Next End If Next Next End If aber es entstehen seltsame formen, die absolut unbrauchbar sind: Bild könnt ihr mir helfen? wäre sehr nett cya all hamZta |
||
Blog. |
![]() |
hamZtaAdministratorBetreff: na |
![]() Antworten mit Zitat ![]() |
---|---|---|
na kommt schon, einer wirds doch wissen? | ||
Blog. |
![]() |
eizdealer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also das Problem ist, dass du nur den gepickten Mesh / das gepickte Surface ermittelst und dementsprechend nur diesen Vertexpunkt höher machst. Ein "Punkt" in deinem Terrain entspricht ja 4 Vertexpunkten (am Rand auch 1 oder 2) von 4 verschiedenen Meshes und Surfaces.
Wie wäre es, wenn du die Vertexpunkte in einem Array zwischenspeicherst, ermittelst, welcher Punkt betroffen ist und dann alle Vertexe dieses Punktes erhöhst? |
||
![]() |
hamZtaAdministratorBetreff: hm |
![]() Antworten mit Zitat ![]() |
---|---|---|
das versteh ich nich ganz..
ein punkt vom terrain is doch ein vertex oder? und warum gleich von 4 verschiedenen meshes? |
||
Blog. |
![]() |
eizdealer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube, du hast das noch nicht ganz verinnerlicht, wie das mit den Meshes, Triangles und Vertexpunkten funktioniert.
Du änderst wie gesagt den Vertex eines Meshes, dort treffen allerdings 4 Meshes zusammen, die genau an dieser stelle jeweils einen Vertexpunkt haben. Also musst du 4 Vertexpunkte anheben, um den Effekt zu erzielen. Die Denkensweise ist eigen und nicht, wie man das von der Natur aus annehmen könnte. Aber überlege dir einfach nochmal genau, woraus dein Terrain besteht! |
||
![]() |
ViciouS |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich kann also die identität der 8 meshes um das mit der ausgewählten surface und dem ausgewählten vertex herausfinden und dann davon die surfaces checken..
dann einfach prüfen, ob dort ein vertex die gleichen x un z koordinaten hat, wie mein ausgewähltes und die y coordinate anpassen..... Oder?? Hier mal mein Ansatz: Code: [AUSKLAPPEN] Function high_terrain(picked_entity)
picked_surface = PickedSurface() For vertex = 0 To CountVertices(picked_surface)-1 vertex_x = VertexX(picked_surface,vertex) vertex_z = VertexZ(picked_surface,vertex) vertex_y = VertexY(picked_surface,vertex) If PickedX() > (vertex_x+EntityX(picked_entity)-0.5) And PickedX() < (vertex_x+EntityX(picked_entity)+0.5) Then If PickedZ() > (vertex_z+EntityZ(picked_entity)-0.5) And PickedZ() < (vertex_z+EntityZ(picked_entity)+0.5) Then VertexCoords picked_surface,vertex,vertex_x,VertexY(picked_surface,vertex)+0.01,vertex_z For check_surface = 0 To CountSurfaces()-1 For check_vertex = 0 To CountVertices(picked_surface)-1 If VertexX(check_surface,check_vertex) = vertex_x And VertexZ(check_surface,check_vertex) = vertex_z Then VertexCoords check_surface,check_vertex,vertex_x,VertexY(picked_surface,vertex)+0.01,vertex_z End If Next Next End If End If Next End Function Hab allerdings noch nicht die umliegenden meshes herausgefunden... mach ich jetzt oder morgen |
||
Skaten ist scheisse...
Bilanz: 3 Knochenbrüche in 4 Jahren... und es werden mehr ![]() |
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hm. mal ein vorschlag zur rangehensweise aus einer anderen richtung: wieso erstellt ihr nicht die terrains aus einer heightmap (pixel für pixel lesen und entsprechend die z-werte setzen). und dann zeichnet ihr einfach mit einem pinsel auf die heightmap und aktualisiert an den stellen die vertices...
so machen es meines wissens auch moderne 3D engines ala far cry und unreal und es ist nicht zu langsam... |
||
![]() |
hamZtaAdministratorBetreff: hm |
![]() Antworten mit Zitat ![]() |
---|---|---|
wär auch keine schlechte möglichkeit @ojay...
ich werd mich mal rumspielen.. thx @all! |
||
Blog. |
![]() |
ViciouS |
![]() Antworten mit Zitat ![]() |
---|---|---|
und die texturierung der einzelnen tiles????
es geht ja um eine art 3d-tile-engine.. |
||
Skaten ist scheisse...
Bilanz: 3 Knochenbrüche in 4 Jahren... und es werden mehr ![]() |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group