PositionTexture. Umrechnungsproblem

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Matthias

Betreff: PositionTexture. Umrechnungsproblem

BeitragSo, Dez 21, 2008 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.

Ich habe da sone Idee. Functioniert nur nicht so wie ich es mir vorstelle.

Ich habe mir eine MeshPlane gemacht die aus 64x64 Vertexpunkten besteht.
Dieses wird nun jedesmal wenn mann die Camera Bewegt mit neuen Höhendaten aus einem HeightMap gefüttert.

Das Functioniert ja auch wunderbar. Nun habe ich da aber eine Gekachelte Textur drauf. Die eigentlich mit verschoben werden müste.

Aber ich weis nicht wie mann das umrechnen könnte das sie sich mit bewegt.

Ich hoffe ihr könnt mir helfen.


Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
Global MeshPlane
Dim Map(200,200)
Global CamPivot=CreatePivot()
Global Camera=CreateCamera(CamPivot)
Global MeshTexture

TurnEntity Camera,50,0,0
PositionEntity Camera,0,30,0
PositionEntity CamPivot,0,0,-200
CreateMeshPlane(63)
CreateMap()
CreateMTexture()

T=CreateTimer(60)
SetBuffer BackBuffer()

Repeat:
   UpdCamera()
   UpdMeshPlane(63,10)
   RenderWorld
Flip 0:WaitTimer(T)
Until KeyDown(1)=1

Function UpdCamera()
   If KeyDown(208) Then MoveEntity CamPivot,0,0,-5
   If KeyDown(200) Then MoveEntity CamPivot,0,0,+5
   If KeyDown(203) Then MoveEntity CamPivot,-5,0,0
   If KeyDown(205) Then MoveEntity CamPivot,+5,0,0
End Function


Function UpdMeshPlane(Seg,MapScal)
     Local Wert#=-.01
     Surf=GetSurface(MeshPlane,1)
 
     CX#=EntityX(CamPivot,1)
     CZ#=EntityZ(CamPivot,1)
   
     TX=Floor(CX/MapScal):TZ=Floor(CZ/MapScal)
     
     PositionEntity MeshPlane,CX-32,0,CZ-32
     PositionTexture MeshTexture,CX*Wert#,CZ*Wert#

     
     For X=0 To Seg:For Z=0 To Seg
         MX=TX+X:MZ=TZ+Z:H=0
         If MX>-1 And MX<200 And MZ>-1 And MZ<200
             H=Map(MX,MZ)
         End If
         VertexCoords Surf,V,X,H,Z:V=V+1
     Next:Next

End Function

Function CreateMap()
   For X=20 To 40:For Z=20 To 40
       Map(X,Z)=5
   Next:Next
End Function

Function CreateMTexture()
   MeshTexture=CreateTexture(32,32) 
   SetBuffer TextureBuffer(MeshTexture)
   
   Color 255,0,0:Rect 0,0,32,32
   Color 255,255,255:Rect 2,2,30,30
   EntityTexture MeshPlane,MeshTexture,0,0
   ScaleTexture MeshTexture,8,8
End Function


Function CreateMeshPlane(Seg)
   Local Area[40000]
 
   MeshPlane=CreateMesh():Surf=CreateSurface(MeshPlane)
 
   For ZX=0 To Seg:For ZY=0 To Seg
      Area[ZX*200+ZY]=AddVertex(Surf,0,0,0,ZX,ZY)
   Next:Next
   
   For X=0 To Seg-1:For Y=0 To Seg-1:V=X*200+Y
      AddTriangle Surf,Area[V],Area[V+1],Area[V+201]
      AddTriangle Surf,Area[V],Area[V+201],Area[V+200]
   Next:Next:UpdateNormals MeshPlane
   
End Function
     

Mr.Keks

BeitragSo, Dez 21, 2008 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
hi matthias!

ich würde einiges anders machen.
erstens in createmeshplane Code: [AUSKLAPPEN]
Area[ZX*200+ZY]=AddVertex(Surf,0,0,0,Float(ZX)/seg,Float(ZY)/seg)

zweitens demnach natürlich auch in updtmeshplane Code: [AUSKLAPPEN]
Local Wert#=-.1/seg/faktor_mit_dem_man_die_textur_skaliert_hat#

drittens muss dann die textur entsprechend anders skaliert werden. 1,1 entspricht jetzt dem gesamten angezeigten bereich.

ach, ein detail noch: für die sehr steilen kanten sollte man vielleicht ein anderes surface mit einer anderen textur verwenden.
MrKeks.net
 

Matthias

BeitragSo, Dez 21, 2008 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Dank dir Mr.Keks.

Ist genau das was ich gesucht habe.

Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group