Author Topic: Винт вертолёта  (Read 578 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!
Винт вертолёта
« on: November 23, 2014, 03:48:06 PM »
Как сделать винт (крутящий механизм) вертолёта?

Здесь показан пример винта, состоящего из 4-х лопастей, у каждой из которых есть свой вращающийся винт. Такой вертолёт называется квадрокоптер.

Главные функции в примере: wAddChildToParent и wSetNodeRotation

Code: [Select]
'' --------------------------------
'' Пример: Лопасти винта вертолёта (в примере показана схема квадрокоптера)
'' Сделал Frank Dodd
'' Изменил Alec Artifex
'' --------------------------------
    #include "WorldSim3D.bi"

    Dim Mesh As wMesh
    Dim MeshTexture As wTexture
    Dim OurCamera As wCamera

    Dim CentreNode As wNode
    Dim EdgeNode1 As wNode
    Dim EdgeNode2 As wNode
    Dim PivotNode As wNode
    Dim PivotNode1 As wNode
    Dim PivotNode2 As wNode

    Dim CentreNode0 As wNode
    Dim EdgeNode10 As wNode
    Dim EdgeNode20 As wNode
    Dim PivotNode0 As wNode
    Dim PivotNode10 As wNode
    Dim PivotNode20 As wNode

    Dim CentreNode1 As wNode
    Dim PivotNode30 As wNode

    Dim CubeRotation As Double

    wStart( wDT_OPENGL, 512, 512, wBITS_PER_PIXEL_32, _
            wWINDOWED, wNO_SHADOWS, wCAPTURE_EVENTS )
    wSetWindowCaption( "Helicopter fan" )

    '--------------------------------------------------------
    ' Первая часть винта (из двух)
    PivotNode = wAddEmptySceneNode
    wSetNodePosition( PivotNode, 0.0, 0.0, 0.0 )
    CentreNode = wAddTestSceneNode
    MeshTexture = wGetTexture("../media/Particles/ParticleRed.bmp")
    wSetNodeMaterialTexture( CentreNode, MeshTexture, 0)
    wSetNodeScale( CentreNode, 1.8,0.03,0.03 )
    wAddChildToParent(CentreNode, PivotNode)
' 1-я лопасть
    PivotNode1 = wAddEmptySceneNode
    wSetNodePosition( PivotNode1, 0.0, 0.0, 0.0 )
    EdgeNode1 = wAddTestSceneNode
    MeshTexture = wGetTexture("../media/Particles/ParticleBlue.bmp")
    wSetNodeMaterialTexture( EdgeNode1, MeshTexture, 0 )
    wSetNodeScale( EdgeNode1, 0.5,0.01, 0.04)
    wAddChildToParent(EdgeNode1, PivotNode1)
' 2-я лопасть
    PivotNode2 = wAddEmptySceneNode
    wSetNodePosition( PivotNode2, 0.0, 0.0, 0.0 )
    EdgeNode2 = wAddTestSceneNode
    MeshTexture = wGetTexture("../media/Particles/ParticleBlue.bmp")
    wSetNodeMaterialTexture( EdgeNode2, MeshTexture, 0 )
    wSetNodeScale( EdgeNode2, 0.5,0.01, 0.04)
    wAddChildToParent(EdgeNode2, PivotNode2)

    wAddChildToParent(PivotNode1,PivotNode )
    wSetNodePosition( PivotNode1, 8.8, 0.4, 0.0)

    wAddChildToParent(PivotNode2,PivotNode )
    wSetNodePosition( PivotNode2, -8.8, 0.4, 0.0)
    '-------------------------------------------------------
' Вторая часть винта (из двух)
    PivotNode0 = wAddEmptySceneNode
    wSetNodePosition( PivotNode0, 0.0, 0.0, 0.0 )
    CentreNode0 = wAddTestSceneNode
    MeshTexture = wGetTexture("../media/Particles/ParticleRed.bmp")
    wSetNodeMaterialTexture( CentreNode0, MeshTexture, 0 )
    wSetNodeScale( CentreNode0, 1.8,0.03,0.03 )
    wAddChildToParent(CentreNode0, PivotNode0)
' 1-я лопасть
    PivotNode10 = wAddEmptySceneNode
    wSetNodePosition( PivotNode10, 0.0, 0.0, 0.0 )
    EdgeNode10 = wAddTestSceneNode
    MeshTexture = wGetTexture("../media/Particles/ParticleBlue.bmp")
    wSetNodeMaterialTexture( EdgeNode10, MeshTexture, 0 )
    wSetNodeScale( EdgeNode10, 0.5,0.01, 0.04)
    wAddChildToParent(EdgeNode10, PivotNode10)
' 2-я лопасть
    PivotNode20 = wAddEmptySceneNode
    wSetNodePosition( PivotNode20, 0.0, 0.0, 0.0 )
    EdgeNode20 = wAddTestSceneNode
    MeshTexture = wGetTexture("../media/Particles/ParticleBlue.bmp")
    wSetNodeMaterialTexture( EdgeNode20, MeshTexture, 0 )
    wSetNodeScale( EdgeNode20, 0.5,0.01, 0.04)
    wAddChildToParent(EdgeNode20, PivotNode20)

    wAddChildToParent(PivotNode10,PivotNode0 )
    wSetNodePosition( PivotNode10, 8.8, 0.4, 0.0)

    wAddChildToParent(PivotNode20,PivotNode0 )
    wSetNodePosition( PivotNode20, -8.8, 0.4, 0.0)
    '-------------------------------------------------------
' Центальный шарнир
    PivotNode30 = wAddEmptySceneNode
    wSetNodePosition( PivotNode30, 0.0, 0.0, 0.0 )
    CentreNode1 =  wAddSphereSceneNode( 1.0, 16 )
    MeshTexture = wGetTexture("../media/Particles/ParticleGreen.tga")
    wSetNodeMaterialTexture( CentreNode1, MeshTexture, 0)
    wAddChildToParent(CentreNode1, PivotNode30)
    '-------------------------------------------------------

    wAddChildToParent(PivotNode0,PivotNode )
    wSetNodePosition( PivotNode0, 0.0,0.0, 0.0)
    wSetNodeRotation( PivotNode0, 0.0,  90.0, 0.0)

    wAddChildToParent(PivotNode30,PivotNode )
    wSetNodePosition( PivotNode30, 0.0,0.0, 0.0)

    wSetAmbientLight( 1,1,1 )

    OurCamera = wAddCamera( 10,20,20, 0,0,0 )

    While wRunning
        wBeginScene( 200,200,200 )

        CubeRotation = Timer * 10 ' скорость вращения винтов и лопастей
       
        ' Крутим винты и лопасти
        wSetNodeRotation( PivotNode,  0.0,0.0,CubeRotation/4 )
        wSetNodeRotation( PivotNode1, 0.0,  CubeRotation, 0.0)
        wSetNodeRotation( PivotNode2, 0.0,  CubeRotation, 0.0)
        wSetNodeRotation( PivotNode10, 0.0,  CubeRotation, 0.0)
        wSetNodeRotation( PivotNode20, 0.0,  CubeRotation, 0.0)
       
        wDrawScene
     
        wEndScene
        wSetFPS
        wCloseESC()
    Wend

    wStop

WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!