Тема: BoundingBox
Показать сообщение отдельно
Старый 14.01.2013, 21:19   #8
Wegox
Бывалый
 
Аватар для Wegox
 
Регистрация: 17.12.2011
Сообщений: 862
Написано 443 полезных сообщений
(для 1,133 пользователей)
Ответ: BoundingBox

Сообщение от burovalex Посмотреть сообщение
Работает только с прямым расположением бокса.
А заменять одну строку (FitMesh), на 20 - не вижу смысла..
Ну даже и не знаю, у меня в IDE всего четыре лишних строчки) да и работает быстрее чем FitMesh, а повороты тоже можно контролировать, надо просто сделать это!
вот аналог с FitMesh
Function  Detect(sx#,sy#,sz#,sr#,bx#,by#,bz#,bw#,bh#,bd#)
    
Local dmin#=0
    
Local sr2#=sr*sr
    
If sx bx
        dmin
=dmin+((sx-bx)*(sx-bx))
    Else If 
sx>(bx+bw)
        
dmin=dmin+(((sx-(bx+bw)))*((sx-(bx+bw))))
    EndIf
    If 
sy by
        dmin
=dmin+((sy-by)*(sy-by))
    Else If 
sy>(by+bh)
        
dmin=dmin+(((sy-(by+bh)))*((sy-(by+bh))))
    EndIf
    If 
sz bz
        dmin
=dmin+((sz-bz)*(sz-bz))
    Else If 
sz>(bz+bd)
        
dmin=dmin+(((sz-(bz+bd)))*((sz-(bz+bd))))
    EndIf
    If 
dmin#<=sr2# Then Return True Else Return False
End Function

width=640
height
=480

Graphics3D width
,height,0,2
SetBuffer BackBuffer
()

MoveMouse width/2,height/2

cam
=CreateCamera()
PositionEntity cam,0,100,-100
RotateEntity cam
,30,0,0

light
=CreateLight()

bx#=0 ; box x
by#=0 ; box y
bz#=0 ; box z
bw#=50 ; box width
bh#=50 ; box height
bd#=50 ; box depth
sx#=0 ; sphere x
sy#=0 ; sphere y
sz#=0 ; sphere z
sr#=5 ; sphere radius

box=CreateCube()
EntityColor box,255,255,0
FitMesh box
,0,0,0,bw,bd,bh
PositionEntity box
,bx,by,bz

sphere
=CreateSphere()
EntityColor sphere,255,0,0
ScaleEntity sphere
,sr,sr,sr

PositionEntity sphere
,sx#,sy#,sz#

While Not KeyDown(1)


    
mxs=mxs+MouseXSpeed()
    
mys=mys+MouseYSpeed()

    
RotateEntity cam,mys,-mxs,0
    MoveEntity cam
,0,0,MouseDown(1)-MouseDown(2)

    If 
KeyDown(203Then sx#=sx#-1
    
If KeyDown(205Then sx#=sx#+1
    
If KeyDown(19Then sy#=sy#+1
    
If KeyDown(33Then sy#=sy#-1
    
If KeyDown(200Then sz#=sz#+1
    
If KeyDown(208Then sz#=sz#-1

    
sx#=sx#+mx#
    
sy#=sy#+my#
    
sz#=sz#+mz#

    
PositionEntity sphere,sx#,sy#,sz#

    
RenderWorld
    
    
If  Detect(sx#,sy#,sz#,sr#,bx#,by#,bz#,bw#,bh#,bd#)=True Then Text 0,0,"Detec Sphere"
    
    
Flip

Wend 

Тормоза жуткие
(Offline)
 
Ответить с цитированием