Author Topic: Фонарик на камере  (Read 729 times)

0 Members and 1 Guest are viewing this topic.

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 932
  • Reputation 36
  • Game making is my hobby for life!
Фонарик на камере
« on: November 28, 2014, 07:35:28 PM »
Как сделать фонарик и прикрепить его к камере?

Как его сделать, показано в примере 46_Spotlight.

Как его прикрепить к камере? С помощью функции wSetNodeParent, где 1-й нод - это то, что прикрепляем, а второй нод, это то, к чему прикрепляем. Объяснение настроек света смотрите в комментариях в коде.

Code: [Select]
'' ----------------------------------------------------------------------------
'' Пример сделал Alec (WorldSim3D developer)
'' благодаря совету Frank Dodd
'' ----------------------------------------------------------------------------
'' Пример: Прикрепление фонарика к FPS камере.
'' Пример показывает, как прикрепить фонарик к FPS камере, используя
'' функцию wSetNodeParent и функции для работы с освещением.
'' ----------------------------------------------------------------------------

'' Includes for extension libraries
#include "WorldSim3D.bi"

'' global variables

' WorldSim3D objects

Dim AlienTerrainMesh as wMesh  ' мешдля террейна
DIM AlienTerrainNode as wNode  ' нод для террейна
DIM OurCamera as wCamera       ' камера
Dim Light As wNode             ' свет для фонарика

    ' -----------------------------------------------------------------------------
    ' start the WorldSim3D interface
   
wStartAdvanced ( _
    wDT_OPENGL, _       ' Use OpenGL
    800, 600, _             ' in a window 800x600
    wBITS_PER_PIXEL_32, _' using 32 bit true color
    wWINDOWED, _         ' in a window
    wSHADOWS, _       ' without stencil shadows
    wCAPTURE_EVENTS, _    ' dont capture keystrokes and mouse
    wVERTICAL_SYNC_ON, _ ' sync to the monitor refresh rate
    0, _                    ' 0 = use the most appropriate window device
    wON, _               ' Switch on double buffering of the display
    4, _                    ' Anti-aliasing level 4
    wON )                ' use high precision floating point math
    ' set the window caption
    wSetWindowCaption( "Flashlight" )

' load mesh for terain. We need no any texture for the mesh to be loaded
' because the texture for this mesh is loaded automatically due to reference
' to it in the mesh file.   

AlienTerrainMesh = wGetMesh ("../media/Terrains/Landscape2.x")

AlienTerrainNode = wAddMeshToScene( AlienTerrainMesh )

wSetNodeMaterialFlag( AlienTerrainNode, wMF_LIGHTING, wON )

wAddNodeShadow( AlienTerrainNode )

    ' add a camera into the scene, the first coordinates represents the 3D
    ' location of our view point into the scene the second co-ordinates specify the
    ' target point that the camera is looking at
    OurCamera = wAddFPSCamera
    wSetNodePosition( OurCamera, 0,0,0 )

' Настройки освещения
    wSetAmbientlight( 0.02, 0.02, 0.02 )         ' окружающий свет небольшой яркости
    Light = wAddLight( wNO_PARENT, 0, 0, 0, 0.0, 0.0, 1.0, 2000) ' добавление на сцену нода "Свет"
    wSetNodeParent( light, OurCamera )           ' устанавливаем для света родительский нод (камеру), как бы прикрепляя свет к ней
    wSetLightFalloff(light, 60)                  ' степень ослабления света между внешним и внутренним конусами
    wSetLightCastShadows(light, 1)               ' будут ли от света фонарика падать тени
    wSetLightDiffuseColor(light, 1.0, 1.0, 1.0 ) ' установим рассеянный свет
    wSetLightSpecularColor(light,0.0,0.0,0.0)    ' уберём отражённый свет
    wSetLightType(light, wLT_SPOT)               ' установим тип света: "Пятно"
    wSetLightInnerCone( light, 10.0 )            ' установим внутренний конус света
    wSetLightOuterCone( light, 20.0 )            ' установим внешний конус света

    wHideMouse

    ' -----------------------------------------------------------------------------
    ' while the WorldSim3D environment is still running
    WHILE wRunning
        ' begin the scene, erasing the canvas with sky-blue before rendering
        wBeginScene( 0, 0, 0 )

        ' draw the scene
        wDrawScene
       
        ' end drawing the scene and render it
        wEndScene
        wSetFPS
      wCloseESC()
    WEND

    ' -----------------------------------------------------------------------------
    ' Stop the WorldSim3D engine and release resources
    wStop
« Last Edit: November 28, 2014, 08:56:15 PM by Alec - WS3D Developer »
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!