forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Веселые секреты (http://forum.boolean.name/showthread.php?t=152)

Diplomat 07.10.2005 00:00

2 РАХ:
Очень симпатичный пример. :super:
И если о пользе введения повртексной генерации ландшафта можно было бы еще в принципе спорить, то вертексколоры вместо текстуры рулят очевидно и без вопросов. Респект адназначна. :bravo:

Заметка: стиль проганья классный, академичен до предела. Например, используешь "Local"(!) при обьявлении переменных в теле ф-и(!!), пишешь идентификаторы типа переменной "%"(!!), да еще и используешь их повторно... Где учился? /не покажусь нахальным?/ :ok:

pax 07.10.2005 00:07

Я самоучка :), просто много примеров переглядел за долгое время пока пишу игру:)

Правда незнаю когда допишу (Bombers3D).

Да и спасибо за приятный ответ. :@

jimon 07.10.2005 14:13

diplomat
у нас всех такой код
может новички пишут по другому
но тот кто прогает больше года приходит к такому стилю примерно

только не говори что ты скромный и пушистый :))

pax 08.10.2005 19:17

Я игрой (Bombers3D) занялся серьезно только этим летом, хотя задумал написать ее еще полтора года назад когда у меня Blitz появился :)

А пока вот усовершенствованная функция-генератор террейна:
Код:

Function GenerateTerrain%(SizeX#,SizeZ#,MaxHeight#,HeightMapFile$,DetailX%=0,DetailZ%=0,VertexColorsMap$="")
;#Region Собственно генератор террейна
        Local HeightMapImage%=LoadImage(HeightMapFile$)
        DetailX%=Abs(DetailX%): DetailZ%=Abs(DetailZ%)
;Автоматический выбор детализации используя HeightMap
        If DetailX%=0 Then
 DetailX%=ImageWidth(HeightMapImage%)
        EndIf
        If DetailZ%=0 Then
 DetailZ%=ImageHeight(HeightMapImage%)
        EndIf
;Это чтобы упростить нахождение высоты вертекса        при несоответствии HeightMap'a
;указанной детализации
        If DetailX%<>ImageWidth(HeightMapImage%) Or DetailZ%<>ImageHeight(HeightMapImage%) Then
 ResizeImage(HeightMapImage%,DetailX,DetailZ)       
        EndIf
       
        Local StepX#=SizeX#/Float#(DetailX-1)
        Local StepZ#=SizeZ#/Float#(DetailZ-1)
        Local Mesh%=CreateMesh()
        Local Surface%=CreateSurface(Mesh)
        Local X#,Z#,H#,K#=3*255
        Local I#,J#
       
;Расположение вертексов
        SetBuffer ImageBuffer(HeightMapImage%)
        For I=0 To DetailZ-1
 Z=SizeZ#*0.5-I*StepZ#
 For J=0 To DetailX-1
        GetColor(J,I)
        H#=(ColorRed()+ColorGreen()+ColorBlue())/K ;H = 0 .. 1
        X=-SizeX#*0.5+J*StepX#
        AddVertex(Surface,X,MaxHeight#*H#,Z,J/Float#(DetailX-1),I/Float#(DetailZ-1))
 Next
        Next
        SetBuffer BackBuffer()
        FreeImage(HeightMapImage%)
       
;Создание поверхности
        For I=0 To DetailZ-2
 For J=0 To DetailX-2
        AddTriangle (Surface%,DetailX*I+J, DetailX*I+J+1, J+1+DetailX*(I+1))
        AddTriangle (Surface%,DetailX*I+J, J+1+DetailX*(I+1), J+DetailX*(I+1))
 Next
        Next
;#End Region

;#Region Раскрашивание вертексов
        If VertexColorsMap$<>"" Then
 Local ColorImage%
 EntityFX Mesh%,2;Использование режима 'use vertex colors instead of brush color'
 ColorImage%=LoadImage(VertexColorsMap$)
        ;Изменение размера ColorMap при несовпадении с детализацией
 If DetailX%<>ImageWidth(ColorImage%) Or DetailZ%<>ImageHeight(ColorImage%) Then
        ResizeImage(ColorImage%,DetailX,DetailZ);Это чтобы упростить нахождение цвета вертекса       
 EndIf
 SetBuffer ImageBuffer(ColorImage%)
 For I=0 To DetailZ-1
        For J=0 To DetailX-1
  GetColor(J,I)
  VertexColor(Surface%,DetailX*I+J,ColorRed(),ColorGreen(),ColorBlue())
        Next
 Next
 SetBuffer BackBuffer()
 FreeImage(ColorImage%)
        EndIf
;#End Region
        UpdateNormals(Mesh%)
        Return Mesh%       
End Function

Решил что так будет универсальнее...

ABTOMAT 15.06.2007 20:58

Re: Веселые секреты
 
А если вот уж прям приспичило делать с альфлй - как от туннельного эффекта избавиться?

HolyDel 16.06.2007 01:11

Re: Веселые секреты
 
сортировать сюрфейс, немало либ для етих целей сделано.

piro 05.07.2007 14:53

Re: Веселые секреты
 
Люди, у меня первый прпимер выдаёт 70-80,а второй.... 450-500. Так что огромное пасибо дипломату.

HolyDel 07.07.2007 00:14

Re: Веселые секреты
 
я вот думаю каким макаром он может выдавать больше 50 фпс, если там стоит иммитация игровой логики в 20 мс?
Дипломату огромный респект за красиво отрендеренные местности, надо ету технику прихватизировать.

ABTOMAT 12.12.2010 21:33

Ответ: Веселые секреты
 
Ух ты ж, сколько лет прошло!
Я эту тему за неделю второй раз ищу, а она, оказывается "Весёлые секреты" называется! Случайно забрёл сегодня.
Люди! Называйте темы так, чтоб название отражало её суть!
И, кстати, пример из первого поста актуален по сей день. Кто из блицеров не видел - советую ознакомиться.

Nex 13.12.2010 10:15

Ответ: Веселые секреты
 
А как так "симпатично" раскрашивать ландшафт? Наложением текстуры у меня так не получалось..

ARA 13.12.2010 10:33

Ответ: Веселые секреты
 
Вероятно автор клал на нолевой слой карту цвета(растянутую на весь терайн), а на первый слой детайл текстуру с Мультиплай 2)

ABTOMAT 26.04.2013 02:01

Ответ: Веселые секреты
 
Если у кого-то остался аттач из первого поста, выложите, пожалуйста.

mauNgerS 26.04.2013 04:04

Ответ: Веселые секреты
 
Вложений: 1
Вот.

LLI.T.A.L.K.E.R. 26.04.2013 22:31

Ответ: Веселые секреты
 
Кратко, в чём суть (способ эффекта)?
AddMesh?

А ну да, имеются поклетчатые mesh-и (сетки 8х8 ), к которым addmesh близкие деревья.

Пробовал как то ещё с >1000 текстурированными ящиками.b3d позиции x=0 to 100 а y=rand(-3,3)
Так вот при AddMesh хоть ты видишь один уголочек меша - он программно весь рисуется. А если отдельными все Entity - то они авто-Hide-тся.
Так что по разному случаи бывают...

H@NON 27.04.2013 14:55

Ответ: Веселые секреты
 
Вложений: 1
Вот делал что-то подобное. Тут локация разбивается по сетке на сектора куда уже добавляется меш. Также есть возможность в дальнейшем обращаться к этому мешу(который уже добавился в сектор), позиционировать его, поворачивать, с текстурами на моделях проблем вроде не должно быть. Забирайте кому нужно.


Часовой пояс GMT +4, время: 15:52.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot