forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Космос (http://forum.boolean.name/showthread.php?t=656)

exec 10.02.2006 19:07

Привет всем, ребята, подскажите плиз, как создать бесконечный космос, чтобы везде распологались звезды ? Может с помощью спрайтов и массива вывести ? Тогда что же это должен быть за массив если космос будет бесконечным ? Помогите вообщем ))

ZanoZa 10.02.2006 20:14

Ща если скажу бред небить :)
Первые мои мысли:
если радиус меньше допустим 200, звезды в случ. порядке.
Вторые мои мысли:
если больше 200 удалять звезды

alcoSHoLiK 10.02.2006 20:33

Это делается с помощью Skybox.

impersonalis 10.02.2006 20:51

Оба варианта правильны, какой выбрать - зависит от конкретики игры

Платон 11.02.2006 11:02

Можно создать список звезд и перемещать их вслед за игроком, какждый раз рандомно переставляя.

GoodWin 17.08.2006 13:43

Re: Космос
 
или создать рандомно звезды и привязать к скайбоксу, который перемещается вместе с камерой...

tormoz 17.08.2006 19:55

Re: Космос
 
Скайсфера в этом случае лучше.
А всякий космический мусор в тип и функцию апдейта:
дистанция до камеры больше чем опр. значение - хиде,пойнт ентиту камера и мове на 2 дистанции, шов.

GoodWin 17.08.2006 21:04

Re: Космос
 
пример кода плиз... очень интересно...

tormoz 17.08.2006 22:58

Re: Космос
 
Цитата:

Function UpdateSp()
For spa.sput=Each sput

dist#=EntityDistance(spa\en,cam)

If dist>ast_dist
HideEntity spa\en
PointEntity spa\en,cam
MoveEntity spa\en,0,0,ast_dist*2
ShowEntity spa\en
EndIf
Next
End Function
Типа так

GoodWin 18.08.2006 10:15

Re: Космос
 
Цитата:

Сообщение от tormoz
Function UpdateSp()
For spa.sput=Each sput

dist#=EntityDistance(spa\en,cam)

If dist>ast_dist
HideEntity spa\en
PointEntity spa\en,cam
MoveEntity spa\en,0,0,ast_dist*2
ShowEntity spa\en
EndIf
Next
End Function

Типа так

т.е. до этого создан кос.мусор с типом sput
кол-во объектов с этим типом может быть много, а следовательно перебор и сравнение может занять большое время...

а нельзя ли в области видимости камеры создавать рандомно звезды...
двигаешь вперед они пролетают мимо и позади на определенном расстоянии удаляются...
поворачиваешь направо справа появляются следва удаляются...
и т.п.
может коряво объяснил... я пытался но пока у меня не получается....

GoodWin 18.08.2006 12:54

Re: Космос
 
Вложений: 4
Вот что у меня получилось:
Цитата:

;GoodWin
;[email protected]
;
Отдельное спасибо tormoz'у

AppTitle "Полет через звезды"

Global width% = 800, height% = 600
Graphics3D width,height,32,2
SetBuffer BackBuffer()

Include "sky.bb"

Const kUp% = 200, KDown% = 208, KLeft% = 203, KRight% = 205, Kback%= 31 ,KAccel%=30

Global camera, player, sky, stars, tangaj#, kren#, accel#
Global star_sprite = LoadSprite ("star.jpg",41) : HideEntity star_sprite
Global star_sprite2 = LoadSprite ("star2.jpg",41) : HideEntity star_sprite2

Type star
Field entity
End Type

player=CreateSphere()
camera=CreateCamera(player)
PositionEntity camera,0,0,-10;
CameraRange Camera,.1,10000000000000

Light=CreateLight(1)
RotateEntity Light,0,-90,0
AmbientLight 50,50,50

sky=CreatePivot ()

For i=1 To 400
create_dinamic_star
Next

For
i=1 To 400
create_star()
Next

While Not KeyHit
(1)


ControlsPlayers
()
update_star()


PositionEntity
sky,EntityX(camera,1),EntityY(camera,1),EntityZ(camera,1)

UpdateWorld
RenderWorld
Text
10,10,"Полет через звезды"
Flip
Wend
End

;Функции=========================================== =
Function ControlsPlayers ()
v#=.1
If accel#<0 Then
accel#=0
ElseIf accel#>5
accel#=5
Else
accel#=accel#+MouseDown(1)*v#-MouseDown(2)*v#
EndIf
MoveEntity
player,0,0,accel#
TurnEntity player,MouseYSpeed(),MouseXSpeed(),o
MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
End Function

Function
create_Star ()
sprite=CopyEntity(star_sprite2,sky)
scale=75
ScaleSprite sprite,scale,scale
EntityFX sprite,41
EntityOrder sprite,8
SpriteViewMode sprite,2
PositionEntity sprite,0,0,0
RotateEntity sprite,Rnd(-90,90),Rnd(0,360),0
MoveEntity sprite,0,0,900
End Function

Function
create_dinamic_star ()
sp.star=Newstar
sp
\entity=CopyEntity(star_sprite)
scale#=.2
ScaleSprite sp\entity,scale#,scale#
EntityFX sp\entity,41
EntityOrder sp\entity,8
PositionEntity sp\entity,0,0,0
RotateEntity sp\entity,Rnd(-90,90),Rnd(0,360),0
MoveEntity sp\entity,0,0,Rnd(50,150)
SpriteViewModesp\entity,1
End Function

Function update_Star()
For s.star = Each star
dist
#=EntityDistance(s\entity,player)
Ifdist#>100 Then
PositionEntity s\entity,EntityX#(camera,1),EntityY#(camera,1),EntityZ#(camera,1)
RotateEntity s\entity,(EntityPitch#(camera,1)+Rnd(-90,90)),(EntityYaw#(camera,1)+Rnd(-90,90)),0
MoveEntity s\entity,0,0,Rnd(50,100)
EndIf
Next
Delete s
EndFunction

в аттаче два изображения...

GoodWin 18.08.2006 13:19

Re: Космос
 
Вложений: 2
а вот скрин...
небула скайбоксом сделана...
естественно не видно как движутся звезды

tormoz 18.08.2006 15:43

Re: Космос
 
Цитата:

Сообщение от GoodWin
т.е. до этого создан кос.мусор с типом sput
кол-во объектов с этим типом может быть много, а следовательно перебор и сравнение может занять большое время...

Создай 200 штук - вполне хватит чтобы создать астероидный пояс ;)
Перебор будет занимать 0.2 мс

Цитата:

а нельзя ли в области видимости камеры создавать рандомно звезды...
двигаешь вперед они пролетают мимо и позади на определенном расстоянии удаляются...
поворачиваешь направо справа появляются следва удаляются...
и т.п.
может коряво объяснил... я пытался но пока у меня не получается....
А смысл ?
Содание\удаление займет БОЛЬШЕ времени в разы, чем перемещение заранее созданного определенного числа.

tormoz 18.08.2006 15:47

Re: Космос
 
Еще очень полезно использовать "активный скейл"
Например:
Цитата:

dist#=EntityDistance(spt\piv,cam)
sc#=.5/dist
;If sc>2 sc=2 ;ограничение макс размера

ScaleEntity spt\en,sc,sc,sc

GoodWin 18.08.2006 17:02

Re: Космос
 
Цитата:

Сообщение от tormoz
Создай 200 штук - вполне хватит чтобы создать астероидный пояс ;)
Перебор будет занимать 0.2 мс
.

Цитата:

Сообщение от tormoz
А смысл ?
Содание\удаление займет БОЛЬШЕ времени в разы, чем перемещение заранее созданного определенного числа.

я так и сделал... подумав....
по поводу примера нормально что-ли?

Цитата:

Еще очень полезно использовать "активный скейл"
попробую...

ты, я понимаю, что-то подобное уже создавал? где можно глянуть?


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

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