Author Topic: Пример 30 - Вода (улучшено)  (Read 754 times)

0 Members and 1 Guest are viewing this topic.

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 911
  • Reputation 36
  • Game making is my hobby for life!
Пример 30 - Вода (улучшено)
« on: November 16, 2014, 07:57:37 PM »
Улучшенный пример анимированной воды

Конечно же все мы видели пример анимированной воды 30_Water_Animated. И это один из важных элемнтов игровой сцены во многих играх. Один пользователь WS3D (Алексей Кондратьев) улучшил этот пример и теперь вода выглядит реалистичнее и более приближённо к игровой обстановке. Я убрал из примера пару строчек кода, который больше не нужен, если у вас последняя версия 0.9.1.

Обратите внимание на то, как вода омывает гряду островов и на то, что вода прозрачная, т.е. видно дно, как в чистых тропических морях.



Code: [Select]
'' ----------------------------------------------------------------------------
'' Пример сделал Frank Dodd
'' Изменил Alec (WorldSim3D developer)
'' Дополнил Алексей Кондратьев
'' ----------------------------------------------------------------------------
'' Пример 30: Эффект анимированной воды
'' Пример создаёт эффект анимированной воды, применяемый к плоскому объекту
'' Hillplane. Эффект видоизменяет поверхность меша так, чтобы смоделировать
'' волны.
'' ----------------------------------------------------------------------------

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

'' global variables

' WorldSim3D objects
DIM Camera as wCamera
Dim WaterMesh as wMesh
DIM Terrain as wTerrain
Dim as wNode TerrainNode, CameraNode, WaterNode
Dim as wTexture TerrainTexture, TerrainTexture0, TerrainTexture1

' -----------------------------------------------------------------------------
' start the WorldSim3D interface
wStart( wDT_OPENGL, 960, 540, wBITS_PER_PIXEL_32,_
          wWINDOWED, wSHADOWS, wCAPTURE_EVENTS, wVERTICAL_SYNC_ON )

wSetWindowCaption( "Example 30: Animated Water Effect" )

' создаем рельеф дна
Terrain = wAddTerrain( "../media/Heightmaps/terrain-heightmap.bmp" )
TerrainNode = Terrain
wSetNodeScale( TerrainNode, 40.0, 4.4, 40.0 )
wSetNodePosition ( TerrainNode, -3500.0, -670, 0)
TerrainTexture0 = wGetTexture( "../media/Textures/terrain-texture.jpg" )
TerrainTexture1 = wGetTexture( "../media/Textures/detailmap3.jpg" )
wSetNodeMaterialTexture( TerrainNode, TerrainTexture0, 0 )
wSetNodeMaterialTexture( TerrainNode, TerrainTexture1, 1 )
wScaleTerrainDetailTexture( Terrain, 1.0, 60.0 )
wSetNodeMaterialFlag( TerrainNode, wMF_LIGHTING, wOFF )
wSetNodeMaterialType ( TerrainNode, wMT_DETAIL_MAP )
wSetNodeMaterialFlag( TerrainNode, wMF_FOG_ENABLE, wON )
wSetFog ( 240,200,20, wEXPONENTIAL_FOG, 0.0,5000.0, 0.5 )

' создаем воду
WaterMesh = wAddHillPlaneMesh( "HillPlane", 800.0, 800.0, 32, 32,  0,  0.0, 4, 3, 8, 8 )
WaterNode = wAddWaterSurfaceSceneNode( WaterMesh,20,300,40 )
TerrainTexture = wGetTexture( "../media/Textures/water1.png" ) ' water1.png - полупрозрачная текстура поверхности воды
wSetNodeMaterialTexture( WaterNode, TerrainTexture, 0 )
wSetNodeMaterialFlag( WaterNode, wMF_LIGHTING, wOFF )
wSetNodeMaterialType ( WaterNode, wMT_TRANSPARENT_ALPHA_CHANNEL ) ' задаем материалу свойство прозрачности

Camera = wAddFPSCamera
CameraNode = Camera
wSetNodePosition( CameraNode, 0, 250, 0 )
wSetCameraTarget ( CameraNode, -100, 100, 800 )
wSetCameraClipDistance( Camera, 10000 )
wSetCameraAspectRatio ( Camera, 1.78 ) 'устанавливаем соотношение сторон экрана 16:9

wHideMouse

' -----------------------------------------------------------------------------
' while the WorldSim3D environment is still running

WHILE wRunning
        ' begin the scene, erasing the canvas with sky-blue before rendering
        wBeginScene( 140, 255, 255 )
   
        ' draw the scene
        wDrawScene
   
        ' end drawing the scene and render it
        wEndScene
        wSetFPS
      wCloseESC()
WEND

' -----------------------------------------------------------------------------
' Stop the WorldSim3D engine and release resources
wStop

Текстуру воды нужно кинуть в ../media/Textures/
« Last Edit: November 16, 2014, 07:59:37 PM by Alec - WS3D Developer »
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!