Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Re: FAQ по B3D
ВОПРОС : подскажите, как бы мне сделать небо в моей игре?
ОТВЕТ: есть разные способы:
1) Можно просто создать плоскость(CreatePlane()) , натянуть на него текстуру и поднять на уровень облаков. Но такой способ предпочтителен лишь когда у вас камера направлена вверх, потому что по бокам неба просто не будет, так как это плоскость.
2) Можно создать сферу(CreateSphere()) , и так же натянуть на нее текстуру. только Сфера ,внутри которой мы будем находится не будет видна, потому что изначально объекты видны лишь с внешней стороны, но это можно исправить либо флипнув меш и тем самым у нас поменяются внешняя с внутренней стороной местами(FlipMesh меш), либо поставив, если нужно чтоб меш был виден с обоих сторон, флаг 16 (EntityFX меш, 16). Теперь надо привязать наше небо к камере, потому что иначе игрок может спокойно пересечь границу неба и увидеть что это всего-лишь объект с текстурой(а нам ведь нужно чтоб было как можно реалистичнее), или в таком случае нужно заранее отмасштабировать объект небо так чтоб игрок не смог этого сделать. А привязать небо к камере нам поможет следующий код:
dxsky#=EntityX( camera,True )-EntityX( sky )
dysky#=EntityY(camera,True )-EntityY( sky )
dzsky#=EntityZ( camera,True )-EntityZ( sky )
TranslateEntity sky,dxsky,dysky,dzsky
или такой:
Positionentity sky, EntityX(camera), EntityY(camera), EntityZ(camera)
что в принципе равноценно
просто вставьте этот код в главный цикл. Естественно, замените навзания camera и sky на ваши.
3)Этот способ самый распространненый.
Function MakeSkyBox()
m1=CreateMesh()
;передняя сторона
b1=LoadBrush( "tex\sky_FR.jpg",49 )
s1=CreateSurface( m1,b1 )
AddVertex s1,-1,+1,-1,0,0:AddVertex s1,+1,+1,-1,1,0
AddVertex s1,+1,-1,-1,1,1:AddVertex s1,-1,-1,-1,0,1
AddTriangle s1,0,1,2:AddTriangle s1,0,2,3
FreeBrush b1
;правая сторона
b1=LoadBrush( "tex\sky_LF.jpg",49 )
s1=CreateSurface( m1,b1 )
AddVertex s1,+1,+1,-1,0,0:AddVertex s1,+1,+1,+1,1,0
AddVertex s1,+1,-1,+1,1,1:AddVertex s1,+1,-1,-1,0,1
AddTriangle s1,0,1,2:AddTriangle s1,0,2,3
FreeBrush b1
;задняя сторона
b1=LoadBrush( "tex\sky_BK.jpg",49 )
s1=CreateSurface( m1,b1 )
AddVertex s1,+1,+1,+1,0,0:AddVertex s1,-1,+1,+1,1,0
AddVertex s1,-1,-1,+1,1,1:AddVertex s1,+1,-1,+1,0,1
AddTriangle s1,0,1,2:AddTriangle s1,0,2,3
FreeBrush b1
;левая сторона
b1=LoadBrush( "tex\sky_RT.jpg",49 )
s1=CreateSurface( m1,b1 )
AddVertex s1,-1,+1,+1,0,0:AddVertex s1,-1,+1,-1,1,0
AddVertex s1,-1,-1,-1,1,1:AddVertex s1,-1,-1,+1,0,1
AddTriangle s1,0,1,2:AddTriangle s1,0,2,3
FreeBrush b1
;верхняя сторона
b1=LoadBrush( "tex\sky_UP.jpg",49 )
s1=CreateSurface( m1,b1 )
AddVertex s1,-1,+1,+1,0,1:AddVertex s1,+1,+1,+1,0,0
AddVertex s1,+1,+1,-1,1,0:AddVertex s1,-1,+1,-1,1,1
AddTriangle s1,0,1,2:AddTriangle s1,0,2,3
FreeBrush b1
;нижняя сторона
b1=LoadBrush("tex\sky_DN.jpg",49 )
s1=CreateSurface( m1,b1 )
AddVertex s1,-1,-1,-1,1,0:AddVertex s1,+1,-1,-1,1,1
AddVertex s1,+1,-1,+1,0,1:AddVertex s1,-1,-1,+1,0,0
AddTriangle s1,0,1,2:AddTriangle s1,0,2,3
FreeBrush b1
ScaleMesh m1,500,600,500
FlipMesh m1
EntityFX m1,9
EntityOrder m1,10
Return m1
End Function
Эта функция, которая создает коробку с натянутой на нее 6 текстур(вверх, низ, право, лево, перед, зад).Это и есть наше небо. В строках LoadBrush идет загрузка текстур. Впишите туда свой путь и имя файла с расширением . Теперь просто вставьте эту функцию в ваш код(не в главный цикл) и вызывайте ее вот так к примеру: sky = MakeSkyBox() .
|