Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 29.05.2007, 20:13   #16
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Re: Реализую много травы

В-общем, действительно лушше на квады сделаю
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 29.05.2007, 23:49   #17
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: Реализую много травы

Незнаю как вы, но Дипломат говорит верно!
ЗЫ\
Я ето делаю просто, может показатся что несильно просто и быстро- но у меня нет СУПЕР гиганской базы и вот что я делаю:
Я вмаксе ставлю всю трову куда мне надо, и потом соеденяю секции премерно 10 в один большой ТРАВ...
Потом-же в блице гружу всю базу Анимом и нахожу всю ету растительность, трава распределена поименно, чем больше её размер тем дольше ана будет сохранятся в зоне видемости, а чем она менше и в зависимосте от настроек которые поставит Юзер- она прячется(действует безотказно, и скорость бешаная).

Да ешо, если ты будеш делать чтото типа горной месности, то твоя трава будет тупо торчать на склонах(ели ты её конечно несобираешся по вектору выравнивать)

И не советую юзать текстуру с альфой, лутше с маской(один куст с альфой = ~20 кустов с маской)
(Offline)
 
Ответить с цитированием
Старый 30.05.2007, 01:41   #18
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Реализую много травы

vlad, тут речь шла о Очень большой местности, а как нам известно блиц не может держать Огромное колличество объектов в памяти, поэтому их нужно загружать\выгружать из файлов содержащих о них информацию.

Насчёт склонов, он пошёл по другому пути, он как я понял собирается делать карту растительности: картинка с пикселями разных цветов, как уже было написано выше, она же должна быть пропорциональна карте высот 1 пиксель карты растительности на 1 пиксель карты высот, или 1 растительности на 4 высоты. Таким образом, будет трава расти не где угодно, а где "сказано" .
(Offline)
 
Ответить с цитированием
Старый 30.05.2007, 12:20   #19
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: Реализую много травы

Господа! Ну так что же вы спорите? Создайте свою Очень Большую Местность, реализуйте алгоритм- благо он не сложен- и проверьте. Это сразу и навеки решит все вопросы.


как нам известно блиц не может держать Огромное колличество объектов в памяти, поэтому их нужно загружать\выгружать из файлов
Товарищи, вы собрались прямо в динамике с файлами на винчестере работать?.. В целях сохранения производительности и долговременной целостности железа не рекомендую этого делать. Изыскивайте другие пути.
(Offline)
 
Ответить с цитированием
Старый 31.05.2007, 01:44   #20
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Реализую много травы

самое интересное что неподалеку есть аналогичная тема.
загрузите свою травяную карту в оперативку.
загрузите модели травяного участка (квад 64 на 64) например.
затем читая из оперативки (еще раз повторюсь что последовательное чтение из файла ради 9-16-25-36 и т.д. значений нерулит, а с seek-ами вы, господа, пожалуй возиться нестанете) вы ставите траву туда, куда надо. из оперативки считать 100, да хоть 1000, ето тьфу, ничто, вы даже задержки непочуствуете, объекты с травой кже загружены, и пресловутое копиентити - которе как известно геометрию некопирует (поетому очень быстрое) тормозить небудет, удаля то что уже ненужно - freeentity и всёёё.
(Offline)
 
Ответить с цитированием
Старый 31.05.2007, 03:39   #21
Matt Merkulov
Модератор
 
Аватар для Matt Merkulov
 
Регистрация: 23.10.2005
Сообщений: 219
Написано 62 полезных сообщений
(для 247 пользователей)
Re: Реализую много травы

Может проще будет создать n травяных кустов, по мере их выхода из зоны видимости помечать, как "свободные", и брать из списка "свободных" кусты для размещения на новом месте? Грубо говоря, перемещать всю траву вместе с игроком.
(Offline)
 
Ответить с цитированием
Старый 31.05.2007, 14:33   #22
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: Реализую много травы

2 Matt Merkulov: И ты, Брут! (с)

2 HolyDel: Идея жизнеспособная, но что придётся делать, если твоим скопированным травяным участком придётся засадить не-плоскую-по-определению гору?

2 Господа новички! Простите пожалуйста, но читать приводимые домыслы попросту надоело.
Вот два примера, которые, надеюсь, разьяснят новичкам то, что всем остальным давно понятно и так.
Сорри за сумбурность кода- я и так потратил на него 30 минут времени, которое мог потратить с заметно большей пользой, чем на демонстрации элементарных истин.
Заметьте, что соотношение производительностей 1 к 2 (возможное отклонение зависит от соотношения производительностей процессор/виеокарта конкретной машины) не является константным. При увеличении площади участка отображаемой травы, различие производительностей первого и второго примера будет расти практически по экспотенте.
Должен также заметить, что ускорить и первый, и второй пример можно приблизительно в полтора-два раза, что, впрочем, никак не повлияет на соотношение их производительностей.
[blitz]
; Пример 1. "Многокустье"

;Инициализация графики
Graphics3D 1024,768,32,1

;Коллизия камера-уровень
Const Env=1;окружение
Const Unt=2;юнит
Collisions Unt,Env,2,1

;Камера. Она же игрок
cam=CreateCamera()
CameraRange Cam,0.5,257
PositionEntity Cam,128,2,128
EntityType Cam,Unt

;солнце
Sun=CreateLight(1)
TurnEntity Sun,45,45,0
LightColor Sun,250,200,150

;Поле, по которому мы буем ходить
Ground=CreatePlane()
TexGround=CreateTexture(64,64,1)
EntityTexture Ground,TexGround
SetBuffer TextureBuffer(TexGround)
For x=0 To 63
For y=0 To 63
Color Rnd(64),Rnd( 128 ),Rnd(32)
Plot x,y
Next
Next

;небо, ограничивающее наше поле
Sky=CreateSphere( 8 )
PositionEntity Sky,128,0,128
EntityType Sky,Env
ScaleEntity Sky,128,128,128
FlipMesh Sky
TexSky=CreateTexture(64,64,1)
EntityTexture Sky,TexSky
SetBuffer TextureBuffer(TexSky)
For y=0 To 63
Color y*3,y*4,128+y*2
Line 0,y,63,y
Next

;Модель куста травы
MGrass=CreateCube()
ScaleMesh MGrass,0.5,0.9,0.5
PositionMesh MGrass,0,1,0
EntityFX MGrass,16
TexGrass=CreateTexture(64,64,4)
EntityTexture MGrass,TexGrass
SetBuffer TextureBuffer(TexGrass)
Col= 0 Shl 24 Or 0 Shl 16 Or 0 Shl 8 Or 0 Shl 0
For x=0 To 63
For y=0 To 63
WritePixel x,y,col
Next
Next
For q=0 To 20
Color Rnd( 128 ),Rnd(255),Rnd(64)
Line 20+Rnd(20),60,5+Rnd(55),5+Rnd(30)
Next
HideEntity MGrass

;создаём тип кустов травы
Type Grass
Field Model
End Type

;создаём карту растительности
Dim GrassMap(256,256),GrassOnMap(256,256)
For i=0 To 256
For j=0 To 256
GrassMap(i,j)=1
Next
Next

;Гл.Цикл
SetBuffer BackBuffer()
While Not KeyHit(1)

;Таймер
If M<MilliSecs() Then
M=M+40
If M+40<MilliSecs() Then M=MilliSecs()+40
;игрок ходит
If KeyDown(203) Then TurnEntity cam,0,5,0
If KeyDown(205) Then TurnEntity cam,0,-5,0
If KeyDown(200) Then MoveEntity cam,0,0,0.3
If KeyDown( 208 ) Then MoveEntity cam,0,0,-0.2
EndIf

;управление травой с некой периодичностью
If GrassDelay<MilliSecs() Then
GrassDelay=MilliSecs()+100

;создание нужной травы
PlayerX=EntityX(cam)
PlayerZ=EntityZ(cam)
For ScanX=PlayerX-32 To PlayerX+32
For ScanZ=PlayerZ-32 To PlayerZ+32
If ScanX>=0 And ScanZ>=0 And ScanX<=256 And ScanZ<=256 Then
If GrassMap(ScanX,ScanZ)=1 And GrassOnMap(ScanX,ScanZ)=0 Then
grs.grass=New grass
grs\Model=CopyEntity(MGrass)
ScaleEntity grs\Model,Rnd(2),Rnd(1),Rnd(2)
PositionEntity grs\Model,ScanX,0,ScanZ
GrassOnMap(ScanX,ScanZ)=1
NGrass=NGrass+1
EndIf
EndIf
Next
Next
;удаление ненужной травы
For grs.grass=Each grass
If EntityDistance(grs\Model,cam)>32 Then
GrassOnMap(EntityX(grs\Model),EntityZ(grs\Model))= 0
NGrass=NGrass-1
FreeEntity grs\Model
Delete grs.grass
EndIf
Next

EndIf

;Подсчёт FPS
If MFPS<MilliSecs() Then
MFPS=MilliSecs()+1000
CurrentFPS=FPS
FPS=0
Else
FPS=FPS+1
EndIf

UpdateWorld()
RenderWorld()
Flip(0)
Color 255,255,255
Locate 10,10
Print "FPS: "+CurrentFPS
Print "Number of grass bushes: "+NGrass
Print "Triangles in frame: "+TrisRendered()
Wend

End[/blitz]

====================================

[blitz]
;Пример 2. "Синглсёрфейс".

;Инициализация графики
Graphics3D 1024,768,32,1

;Коллизия камера-уровень
Const Env=1;окружение
Const Unt=2;юнит
Collisions Unt,Env,2,1

;Камера. Она же игрок
cam=CreateCamera()
CameraRange Cam,0.5,257
PositionEntity Cam,128,2,128
EntityType Cam,Unt

;солнце
Sun=CreateLight(1)
TurnEntity Sun,45,45,0
LightColor Sun,250,200,150

;Поле, по которому мы буем ходить
Ground=CreatePlane()
TexGround=CreateTexture(64,64,1)
EntityTexture Ground,TexGround
SetBuffer TextureBuffer(TexGround)
For x=0 To 63
For y=0 To 63
Color Rnd(64),Rnd( 128 ),Rnd(32)
Plot x,y
Next
Next

;небо, ограничивающее наше поле
Sky=CreateSphere( 8 )
PositionEntity Sky,128,0,128
EntityType Sky,Env
ScaleEntity Sky,128,128,128
FlipMesh Sky
TexSky=CreateTexture(64,64,1)
EntityTexture Sky,TexSky
SetBuffer TextureBuffer(TexSky)
For y=0 To 63
Color y*3,y*4,128+y*2
Line 0,y,63,y
Next

;Модель куста травы
MGrass=CreateCube()
ScaleMesh MGrass,0.5,0.9,0.5
PositionMesh MGrass,0,1,0
EntityFX MGrass,16
HideEntity MGrass


;создаём карту растительности
Dim GrassMap(256,256),GrassClaster(16,16)
;создаём синглмешевую траву, разбитую на участки-кластеры
For x=0 To 16
For z=0 To 16
NGrass=NGrass+1
GrassClaster(x,z)=CreateMesh()
PositionEntity GrassClaster(x,z),x*16+8,0,z*16+8
EntityAutoFade GrassClaster(x,z),30,32
Next
Next
For x=0 To 256
For z=0 To 256
GrassMap(x,z)=1
If GrassMap(x,z)=1 Then
TempGrass=CopyMesh(MGrass)
ScaleMesh TempGrass,Rnd(2),Rnd(1),Rnd(2)
PositionMesh TempGrass,x,0,z
AddMesh TempGrass,GrassClaster(x/16,z/16)
FreeEntity TempGrass
EndIf
Next
Next
TexGrass=CreateTexture(64,64,4)
SetBuffer TextureBuffer(TexGrass)
Col= 0 Shl 24 Or 0 Shl 16 Or 0 Shl 8 Or 0 Shl 0
For x=0 To 63
For y=0 To 63
WritePixel x,y,col
Next
Next
For q=0 To 20
Color Rnd( 128 ),Rnd(255),Rnd(64)
Line 20+Rnd(20),60,5+Rnd(55),5+Rnd(30)
Next
For x=0 To 16
For z=0 To 16
PositionMesh GrassClaster(x,z),-x*16-8,0,-z*16-8
EntityTexture GrassClaster(x,z),TexGrass
Next
Next

;Гл.Цикл
SetBuffer BackBuffer()
While Not KeyHit(1)

;Таймер
If M<MilliSecs() Then
M=M+40
If M+40<MilliSecs() Then M=MilliSecs()+40
;игрок ходит
If KeyDown(203) Then TurnEntity cam,0,5,0
If KeyDown(205) Then TurnEntity cam,0,-5,0
If KeyDown(200) Then MoveEntity cam,0,0,0.3
If KeyDown( 208 ) Then MoveEntity cam,0,0,-0.2
EndIf

;Подсчёт FPS
If MFPS<MilliSecs() Then
MFPS=MilliSecs()+1000
CurrentFPS=FPS
FPS=0
Else
FPS=FPS+1
EndIf

UpdateWorld()
RenderWorld()
Flip(0)
Color 255,255,255
Locate 10,10
Print "FPS: "+CurrentFPS
Print "Number of grass bushes: "+NGrass
Print "Triangles in frame: "+TrisRendered()
Wend

End[/blitz]

Я сожалею, что мне пришлось выполнить ту небольшую и несложную работу, которую должен был выполнить автор темы, прежде, чем заводить сеё лишенное смысла и давно решенное обсуждение.
Надеюсь, приведенные примеры кому-то действительно помогут.
Удачи.

--Добавлено--
Первый пример содержит баг: заметьте, что часть создаваемых в первом цикле вокруг игрока кустов тут же удаляется во втором. Полагаю, вы сумеете исправить его самостоятельно. Впрочем, на ФПС баг влияет незначительно, т.к. тормозит в первом примере далеко не только логика.
(Offline)
 
Ответить с цитированием
Старый 03.06.2007, 23:17   #23
kortesfil
Знающий
 
Регистрация: 16.10.2005
Сообщений: 310
Написано 7 полезных сообщений
(для 0 пользователей)
Re: Реализую много травы

хаха, делай траву как в WOW-е и не будут тебя мучать тормоза
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Куча травы. Лучший способ реализации. Данил Blitz3D 99 26.03.2010 18:41
пример травы Illidan 3D-программирование 8 29.12.2009 22:53
Реализовал много травы Matt Merkulov 3D-программирование 9 15.06.2007 10:35
Рендеринг травы haedim 3D-программирование 16 29.10.2006 17:17
Много чего pax Болтовня 1 27.09.2006 18:07


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com