PositionTexture. Umrechnungsproblem
Übersicht

MatthiasBetreff: PositionTexture. Umrechnungsproblem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dank dir Mr.Keks.
Ist genau das was ich gesucht habe. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group