Журнал о программированнии на языках Blitz3D, BlitzPlus, BlitzMax

Blitz3D-код:InteractivityWith3DObject.bb

Материал из Blitz Et Cetera

Перейти к: навигация, поиск
Graphics3D 640,480,0,2

SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,2,-10

light=CreateLight(2)
PositionEntity light,40,50,-100
LightRange light,50

AmbientLight 0,0,0

plane=CreatePlane()
EntityPickMode plane,2

cube=CreateCube()
EntityPickMode cube,2
PositionEntity cube,0,1,0

cube1=CreateCube()
EntityPickMode cube1,2
PositionEntity cube1,5,1,0

cube2=CreateCube()
EntityPickMode cube2,2
PositionEntity cube2,-5,1,0

While Not KeyDown( 1 )

If Procedure_Pick3DObject(camera,cube1) Then
        Procedure_Turn3DObject(cube,90,0,0,2)
EndIf

If Procedure_Pick3DObject(camera,cube2) Then
        Procedure_Turn3DObject(cube,-90,0,0,2)
EndIf

RenderWorld


Flip

Wend

End

Function Procedure_Pick3DObject(camentity,objentity)
        If MouseDown(1)=True Then
                CameraPick(camentity,MouseX(),MouseY())
               
                If PickedEntity()=objentity Then
                        Return True
                Else
                        Return False
                EndIf
        EndIf
End Function

Function Procedure_Turn3DObject(objentity,Rx#,Ry#,Rz#,Speed#)
        Pitch#=0
        Yaw#=0
        Roll#=0

        Repeat
                If Sgn(Rx#)=-1 Then
                        Pitch#=Pitch#-Speed#
                Else
                        Pitch#=Pitch#+Speed#
                EndIf
       
                If Sgn(Ry#)=-1 Then
                        Yaw#=Yaw#-Speed#
                Else
                        Yaw#=Yaw#+Speed#
                EndIf
               
                If Sgn(Rz#)=-1 Then
                        Roll#=Roll#-Speed#
                Else
                        Roll#=Roll#+Speed#
                EndIf


                If Sgn(Rx#)=1 And Pitch#>Rx# Then
                        Return
                EndIf

                If Sgn(Rx#)=-1 And Pitch#<Rx# Then
                        Return
                EndIf
       
       
                If Sgn(Ry#)=1 And Pitch#>Ry# Then
                        Return
                EndIf

                If Sgn(Ry#)=-1 And Pitch#<Ry# Then
                        Return
                EndIf
       
                If Sgn(Rz#)=1 And Pitch#>Rz# Then
                        Return
                EndIf

                If Sgn(Rz#)=-1 And Pitch#<Rz# Then
                        Return
                EndIf

                RotateEntity objentity,Pitch#,Yaw#,Roll#
                RenderWorld
                Flip
        Forever
Return

End Function

Другие

Друзья