Показать сообщение отдельно
Старый 06.10.2005, 20:47   #13
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
вообщем а чембы ненаписать функцию гемора... ой... 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
Вот и все.

А это измененный код примера...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием