вообщем а чембы ненаписать функцию гемора... ой... generate типа ланджафта ?
ну чтобы типа... типа генерить типа ланджафт из типа типа... короче картинки типа под типа названием в типа карта типа высот...
|
Вот повозился немного сегодня и сделал процедурку генерации террейна:
Function GenerateTerrain%(SizeX#,SizeZ#,MaxHeight#,HeightMapFile$,Detail,VertexColorsMap$="")
;#Region Собственно генератор террейна
Local StepX#=SizeX#/Float#(Detail)
Local StepZ#=SizeZ#/Float#(Detail)
Local Mesh%=CreateMesh()
Local Surface%=CreateSurface(Mesh)
Local X#,Z#,H#,K#=3*255
Local I#,J#
Local HeightImage%=LoadImage(HeightMapFile$)
ResizeImage(HeightImage%,Detail+1,Detail+1);Это проще чем изобретать алготитм сглаживания поверхности
;Расположение вертексов
SetBuffer ImageBuffer(HeightImage%)
For I=0 To Detail
X=-SizeX#/2+I*StepX#
For J=0 To Detail
GetColor(I,J)
H#=(ColorRed()+ColorGreen()+ColorBlue())/K ;H = 0 .. 1
Z=SizeZ#/2-J*StepZ#
AddVertex(Surface,X,MaxHeight#*H,Z,I/Float#(Detail),J/Float#(Detail))
Next
Next
SetBuffer BackBuffer()
FreeImage(HeightImage%)
;Создание поверхности
For I=0 To Detail-1
For J=0 To Detail-1
AddTriangle (Surface%,I+(Detail+1)*J,I+(Detail+1)*(J+1),I+1+(Detail+1)*(J+1))
AddTriangle (Surface%,I+(Detail+1)*J,I+1+(Detail+1)*(J+1),I+1+(Detail+1)*J)
Next
Next
;#End Region
;#Region Раскрашивание вертексов
If VertexColorsMap$<>"" Then
Local ColorImage%
EntityFX Mesh%,2;Использование режима 'use vertex colors instead of brush color'
ColorImage%=LoadImage(VertexColorsMap$)
ResizeImage(ColorImage%,Detail+1,Detail+1);Это чтобы упростить нахождение цвета вертекса
SetBuffer ImageBuffer(ColorImage%)
For I=0 To Detail
For J=0 To Detail
GetColor(I,J)
VertexColor(Surface%,J+(Detail+1)*I,ColorRed(),ColorGreen(),ColorBlue())
Next
Next
SetBuffer BackBuffer()
FreeImage(ColorImage%)
EndIf
UpdateNormals(Mesh%)
Return Mesh%
;#End Region
End Function
Вот и все.
А это измененный код примера...