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

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

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

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

Ответ
 
Опции темы
Старый 29.09.2007, 05:21   #16
dimond
Оператор ЭВМ
 
Регистрация: 14.09.2007
Сообщений: 27
Написано 2 полезных сообщений
(для 5 пользователей)
Re: Гравитация

Ок посмотрим.

В моем коде вместо сферы для лучшей наглядности загрузить меш
Создаем Geosphere(Геосфера) в 3dsmax, Radius:200, Segments:8 и модифицируем с помощью Noise, scale:100, Strength:60, для создания холмов и впадин.
Грузим в игрулину - создается эффект бесконечного ландшафта, и что "земля" круглая, совсем не заметно.

от позиционирования игрока относительно полигона с которым он коллизит, я отказался, т.к. это не соответствует принципам гравитации (я так делал, и у меня игрок лазил по стенам и потолку, а это не совсем нормально)
(Offline)
 
Ответить с цитированием
Старый 02.10.2007, 12:13   #17
Alex_Noc
Разработчик
 
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений
(для 289 пользователей)
Re: Гравитация

А попробуй тупо в центр планеты пивот поставь (она же идеально круглая) , в точку перса поставь тоже пивот и припаренть его к пивоту в центре планеты , и управляй поворотом пивота который в центр планеты поставил , ну и соответственно скорость поворота подбери Таким образом перс всегда будет наклонен под тем углом под которым ты его поставишь , а т.е в центр планеты
( Ну это конечно если совсем тупо делать )
(Offline)
 
Ответить с цитированием
Старый 02.10.2007, 18:12   #18
Delta_Q
Нуждающийся
 
Регистрация: 23.09.2007
Сообщений: 62
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Гравитация

Если делать будиш гравитацию то синхронизирую расчеты с таймером чтоб при разных загруженостях сцен она работала одинакого.
(Offline)
 
Ответить с цитированием
Старый 03.10.2007, 02:38   #19
dimond
Оператор ЭВМ
 
Регистрация: 14.09.2007
Сообщений: 27
Написано 2 полезных сообщений
(для 5 пользователей)
Re: Гравитация

В том то и дело что планета не круглая это геосфера модифицированная с помощью noise
(Offline)
 
Ответить с цитированием
Старый 04.10.2007, 17:03   #20
AnyWay
Оператор ЭВМ
 
Регистрация: 08.09.2007
Сообщений: 47
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Гравитация

Сообщение от dimond
В том то и дело что планета не круглая это геосфера модифицированная с помощью noise
Alex_Noc правильно посоветовал. Дешево и сердито. А то что сфера - не сфера, это часный случай. Добавь постоянное перемещение по оси к центру планеты(пивоту)+коллизию с поверхностью. Если радиус сферы большой, то даже не придется вводить поправку на скорость поворота в зависимости от высоты.
(Offline)
 
Ответить с цитированием
Старый 05.10.2007, 13:17   #21
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Re: Гравитация

Вот, стырил от куда то пример:
;
; Gravity demo
;

;
; Set up
; 

Graphics3D 1024,768

;
; Global Variables - needs some tidying
;
Global angle#, radius#
Global earthx#,earthy#,earthvelx#,earthvely#
Global earthangle#,earthradius#,earthrot#
Global earthforce#,eaccelx#,eaccely#
Global eradius#, eangle#

SetBuffer BackBuffer()
;
; camera
;
camera = CreateCamera()
CameraViewport camera,0,0,1024,768
CameraRange camera,2,2000
PositionEntity camera,0,-350,-100
RotateEntity camera,-40,0,0

AmbientLight(200,100,100)

light1=CreateLight(2)
light2=CreateLight(2)
light3=CreateLight(2)
light4=CreateLight(2)

LightColor light1,200,100,100
LightColor light3,200,100,100
LightColor light2,200,20,20
LightColor light4,200,20,20

PositionEntity light1,20,0,200
PositionEntity light2,0,-20,200
PositionEntity light3,-20,0,200
PositionEntity light4,0,20,200

SeedRnd MilliSecs()
;
; Particle type
;
Type Par
    Field xpos#,ypos#
    Field xvel#,yvel#
    Field xp
    Field mass#
End Type

;
; set up scenario initial conditions
;
Global sun = CreateSphere(32)
Global Earth = CreateSphere(32)

ScaleEntity sun,20,20,20
ScaleEntity Earth,5,5,5
EntityColor sun,255,255,0
EntityColor Earth,50,200,255
;suntex = LoadTexture("sun.jpg",1)
;earthtex = LoadTexture("earth.jpg",1)
sunangle# = 90.0
Const SUNMASS = 10000
Const EARTHMASS = 1000
Const Fieldx = 200
Const Fieldy = 200
; no of particles
Const Parcnt = 1000
Const G# = 0.000667
; Start limit distance from Sun
Const START = 80
earthx = 100
earthy = 100
earthvelx = 0.2
earthvely = -0.1

PositionEntity sun,0,0,200


PositionEntity Earth,earthx,earthy,200

;Create the Texture
width=1024
sptex = CreateTexture(width,width,1+8)
SetBuffer TextureBuffer(sptex)
For a = 1 To 200
    Plot Rand(0,width-1),Rand(0,width-1)
Next
SetBuffer BackBuffer()
TextureBlend sptex,5

;Create the Sphere
spbox = CreateSphere(5)
ScaleEntity spbox,1000,1000,1000
EntityTexture spbox,sptex
ScaleTexture sptex,.25,.5
EntityFX spbox,1
FlipMesh spbox
EntityOrder spbox,99999

;
; function to create particle
;


Function CreatePar()
    p.Par = New par
    p\xpos# = Rand(-Fieldx,Fieldx)
    p\ypos# = Rand(-Fieldy,Fieldy)
    If p\xpos > 0.0 And p\ypos > 0.0 And p\xpos < START And p\ypos < START 
        p\xpos = START
        p\ypos = START
    ElseIf p\xpos < 0.0 And p\ypos < 0.0 And p\xpos > -START And p\ypos > -START
        p\xpos = -START
        p\ypos = -START
    ElseIf p\xpos > 0.0 And p\ypos < 0.0 And p\xpos < START And p\ypos > -START
        p\xpos = START
        p\ypos = -START
    ElseIf p\xpos < 0.0 And p\ypos > 0.0 And p\xpos > -START And p\ypos < START
        p\xpos = -START
        p\ypos = START
    EndIf

    If p\xpos > 0.0 And p\ypos > 0.0 
        p\xvel = Rand(1,1.2)/10.0
        p\yvel = Rand(-1.2,-1)/10.0
    ElseIf p\xpos > 0.0 And p\ypos < 0.0
        p\xvel = Rand(-1.2,-1)/10.0
        p\yvel = Rand(-1.2,-1)/10.0
    ElseIf p\xpos < 0.0 And p\ypos < 0.0
        p\xvel = Rand(-1.2,-1)/10.0
        p\yvel = Rand(1,1.2)/10.0
    Else
        p\xvel = Rand(1,1.2)/10.0
        p\yvel = Rand(1,1.2)/10.0
    EndIf    
    p\mass = 5.0
    p\xp = CreateSphere()
    EntityColor p\xp,10,10,10
    EntityShininess p\xp,1.0
End Function

;
; Update particle position
;
Function UpdatePar(p.Par)
    Local sunforce#,accelx#,accely#
    Local eforce#,accelex#,acceley#
    AngleSun p
    If radius < 20.0 Or radius > 500.0
        p\xvel = 0.0
        p\yvel = 0.0
        PositionEntity p\xp,0,0,200    
        Delete p
    Else
        Sunforce = (G * SUNMASS * p\mass) / (radius*radius)
        AngleEarth p
        If eradius < 5.0
            p\xvel = 0.0
            p\yvel = 0.0
            PositionEntity p\xp,0,0,200
            Delete p
        Else     
            eforce = (G * EARTHMASS * p\mass) / (eradius*eradius)
            accelx=-(sunforce/p\mass) * Cos(angle) 
            accely=-(sunforce/p\mass) * Sin(angle)
            accelex =  -(eforce/p\mass) * Cos(eangle)
            acceley =  -(eforce/p\mass) * Sin(eangle)
            accelx = accelx + accelex
            accely = accely + acceley
            p\xvel = p\xvel+accelx
            p\yvel = p\yvel+accely 
            p\xpos=p\xpos+p\xvel
            p\ypos=p\ypos+p\yvel
            PositionEntity p\xp,p\xpos,p\ypos,200
        EndIf
    EndIf
End Function

;
; Get angle + radius
; 
Function AngleSun(p.Par)
    angle = ATan2(p\ypos,p\xpos)
    radius = EntityDistance(sun,p\xp) 
End Function

Function AngleEarth(p.Par)
    eangle = ATan2(p\ypos-earthy,p\xpos-earthx)
    eradius = EntityDistance(Earth,p\xp)
End Function


    

    
;
; Create some particles
;
For i = 1 To Parcnt
    CreatePar
Next

;
; Main loop
;

While Not KeyHit(1)

;EntityTexture sun,suntex
;EntityTexture Earth,earthtex
;sunangle = sunangle + 0.1
;earthrot = earthrot+ 0.001
;RotateTexture suntex,sunangle
;TurnEntity Earth,0,earthrot,0

;
; Move Earth
;
    earthangle = ATan2(earthy,earthx)
    earthradius = Sqr(earthx*earthx+earthy*earthy)
    earthforce = (G * SUNMASS * EARTHMASS) / (earthradius*earthradius)
    eaccelx=-(earthforce/EARTHMASS) * Cos(earthangle)
    eaccely=-(earthforce/EARTHMASS) * Sin(earthangle)
    earthvelx = earthvelx+eaccelx
    earthvely = earthvely+eaccely 
    earthx=earthx+earthvelx
    earthy=earthy+earthvely
    PositionEntity Earth,earthx,earthy,200

;
; Move particles
;

For p.Par = Each Par    
    UpdatePar p
Next
    
;
; Move Camera
; Cursor keys + A = zoom in , Z = zoom out
; , roll left . roll right
;
    
If KeyDown(200) Then
MoveEntity camera,0,3.6,0
TurnEntity camera,1,0,0
EndIf

If KeyDown(208) Then
MoveEntity camera,0,-3.6,0
TurnEntity camera,-1,0,0
EndIf

If KeyDown(203) Then
MoveEntity camera,3.6,0,0 
TurnEntity camera,0,1.0,0
EndIf

If KeyDown(205) Then
MoveEntity camera,-3.6,0,0
TurnEntity camera,0,-1.0,0
EndIf

If KeyDown(30) Then
MoveEntity camera,0,0,1.0
EndIf

If KeyDown(44) Then
MoveEntity camera,0,0,-1.0
EndIf

If KeyDown(51) Then
TurnEntity camera,0,0,1
EndIf

If KeyDown(52) Then
TurnEntity camera,0,0,-1
EndIf

UpdateWorld
RenderWorld

Flip

Wend
End
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Гравитация и траектория прыжков DeMoNN Основной форум 2 16.07.2009 14:37
Гравитация в X Y Z TEHb08 Blitz3D 38 06.01.2009 16:39
аркадная FPS, прыжок и гравитация DMX 3D-программирование 18 19.06.2008 18:29
Простая гравитация untouchable 3D-программирование 5 14.03.2007 18:22
Гравитация magpro 3D-программирование 9 08.09.2006 00:28


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


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