Results 1 to 2 of 2

Thread: ODE Sample #02.01

  1. #1
    thinBasic author ErosOlmi's Avatar
    Join Date
    Sep 2004
    Location
    Milan - Italy
    Age
    50
    Posts
    8,131
    Blog Entries
    2
    Rep Power
    10

    ODE Sample #02.01

    A little modification of ODE Sample 02. Now all parameters are passed using data structures. A little speed improve thanks to the fact less params are passed.

    [code=thinbasic] ' ODE02B - Connecting bodies with joints - more complex variant

    uses "TBGL"

    #include "%APP_INCLUDEPATH%/thinbasic_ode.inc"

    ' -- This will create window
    dim hWnd as dword = tbgl_CreateWindowEx("ODE 02 - Bodies and joints - Hanged triangle", 640, 480, 32, 0)
    tbgl_ShowWindow
    tbgl_UseLighting 1
    tbgl_UseLightsource %GL_LIGHT0, 1
    ' -- Yes, to create new world is that easy
    dim myWorld as dWorldID = dWorldCreate

    ' -- Planet Earth
    dWorldSetGravity(myWorld, 0, -9.81, 0)

    ' -- We need two bodies...
    dim myBody1 as dBodyID = dBodyCreate( myWorld )
    dim myBody2 as dBodyID = dBodyCreate( myWorld )
    dim myBody3 as dBodyID = dBodyCreate( myWorld )
    dim myBody4 as dBodyID = dBodyCreate( myWorld )
    dim myBody5 as dBodyID = dBodyCreate( myWorld )

    ' -- Mass will be "recycled" for both of them
    ' -- Here we will store mass
    dim myMass AS dMass

    ' -- Although it might seem like something else, we give DENSITY and RADIUS
    dMassSetSphere( myMass, 2500.0, 0.05 )

    ' -- Assign mass to body
    dBodySetMass( myBody1, myMass )
    ' -- Lets position mass at x, y, z
    dBodySetPosition( myBody1, 1, 2, 0 )

    ' -- Assign mass to body
    dBodySetMass( myBody2, myMass )
    ' -- Lets position mass at x, y, z
    dBodySetPosition( myBody2, 1, 2, 1 )

    ' -- Assign mass to body
    dBodySetMass( myBody3, myMass )
    ' -- Lets position mass at x, y, z
    dBodySetPosition( myBody3, 0, 2, 1 )

    ' -- Assign mass to body
    dBodySetMass( myBody4, myMass )
    ' -- Lets position mass at x, y, z
    dBodySetPosition( myBody4, 1, 2, 2 )

    ' -- Assign mass to body
    'msgbox 0, "---------------------------------------------------------------"
    dBodySetMass( myBody5, myMass )
    ' -- Lets position mass at x, y, z
    dBodySetPosition( myBody5, 0, 2, 2 )

    dim JointPoint1 as dJointID = dJointCreateBall( myWorld, 0 )
    dim JointPoint2 as dJointID = dJointCreateBall( myWorld, 0 )
    dim JointPoint3 as dJointID = dJointCreateBall( myWorld, 0 )
    dim JointPoint4 as dJointID = dJointCreateBall( myWorld, 0 )
    dim JointPoint5 as dJointID = dJointCreateBall( myWorld, 0 )
    dim JointPoint6 as dJointID = dJointCreateBall( myWorld, 0 )

    dJointAttach( JointPoint1, myBody1, 0 )
    dJointSetBallAnchor( JointPoint1, 0, 2, 0 )

    dJointAttach( JointPoint2, myBody1, myBody2 )
    dJointSetBallAnchor( JointPoint2, 1, 2, 0 )

    dJointAttach( JointPoint3, myBody2, myBody3 )
    dJointSetBallAnchor( JointPoint3, 1, 2, 1 )

    dJointAttach( JointPoint4, myBody1, myBody3 )
    dJointSetBallAnchor( JointPoint4, 1, 2, 0 )

    dJointAttach( JointPoint5, myBody2, myBody4 )
    dJointSetBallAnchor( JointPoint5, 1, 2, 1 )

    dJointAttach( JointPoint6, myBody3, myBody5 )
    dJointSetBallAnchor( JointPoint6, 0, 2, 1 )


    dim FPS, dt as double

    dim LoopFlag as BYTE = %TRUE
    dim Clk as long = gettickcount

    tbgl_BackColor 255, 255, 255

    type t_xyz
    x as dReal
    y as dReal
    z as dReal
    end type

    dim xyz0 as t_xyz
    xyz0.x = 0.0
    xyz0.y = 2.0
    xyz0.z = 0.0

    dim xyz1 as t_xyz at dBodyGetPosition ( myBody1 )
    dim xyz2 as t_xyz at dBodyGetPosition ( myBody2 )
    dim xyz3 as t_xyz at dBodyGetPosition ( myBody3 )
    dim xyz4 as t_xyz at dBodyGetPosition ( myBody4 )
    dim xyz5 as t_xyz at dBodyGetPosition ( myBody5 )


    tbgl_GetAsyncKeyState(-1)

    doevents on
    dim i as long

    While LoopFlag

    FPS = tbgl_getFrameRate

    if tbgl_GetWindowKeyState( hWnd, %VK_ESCAPE ) then loopFlag = %FALSE

    tbgl_ClearFrame

    tbgl_Camera 0, 0, 5, 0, 0, 0
    Render_Scene

    tbgl_translate 0, -1, 0
    tbgl_scale 1, 0, 1
    Render_Scene

    tbgl_DrawFrame

    dt = 1/FPS
    if FPS < 25 then dt = 0.04
    incr i
    if i > 1000 then
    i = 0
    tbgl_SetWindowTitle( hWnd, FPS & " - " & time$)
    end if

    dWorldStep( myWorld, dt )


    wend

    tbgl_DestroyWindow

    sub Render_Scene()
    DrawSphere( xyz1 )

    DrawLine2( xyz0, xyz1 )

    DrawLine2( xyz1, xyz2 )

    DrawSphere( xyz2 )

    DrawLine2( xyz2, xyz3 )

    DrawSphere( xyz3 )

    DrawLine2( xyz1, xyz3 )

    DrawSphere( xyz4 )

    DrawLine2( xyz2, xyz4 )

    DrawSphere( xyz5 )
    DrawLine2( xyz3, xyz5 )

    end sub

    sub DrawSphere( xyz as t_xyz )
    tbgl_PushMatrix
    tbgl_Translate xyz.x, xyz.y, xyz.z

    tbgl_color 255, 0, 0
    tbgl_Sphere 0.05

    tbgl_PopMatrix
    end sub

    sub DrawLine2( P1 as t_xyz, P2 as t_xyz)
    tbgl_color 0, 255, 0
    tbgl_BeginPoly %GL_LINES
    tbgl_Vertex P1.x, P1.y, P1.z
    tbgl_Vertex P2.x, P2.y, P2.z
    tbgl_EndPoly
    end sub

    [/code]
    www.thinbasic.com | www.thinbasic.com/community/ | psch.thinbasic.com
    Win10Pro 64bit - 8GB Ram - Intel i7 M620 2.67GHz - NVIDIA Quadro FX1800M 1GB

  2. #2
    thinBasic MVPs kryton9's Avatar
    Join Date
    Nov 2006
    Location
    Naples, Florida & Duluth, Georgia
    Age
    61
    Posts
    3,869
    Rep Power
    397

    Re: ODE Sample #02.01

    That is sooooooo coooooool. ODE comes to life with a bang, thanks guys for figuring this stuff out and sharing. It will just add a whole new level to the fun of thinking and making ideas come to life!!!
    Acer Notebook: Win 10 Home 64 Bit, Core i7-4702MQ @ 2.2Ghz, 12 GB RAM, nVidia GTX 760M and Intel HD 4600
    Raspberry Pi 3: Raspbian OS use for Home Samba Server and Test HTTP Server

Similar Threads

  1. 3D ind 2D sample
    By Michael Hartlef in forum TBGL Scripts and Projects
    Replies: 8
    Last Post: 29-10-2007, 08:08
  2. ODE Sample #02.02
    By ErosOlmi in forum ODE - Open Dynamics Engine
    Replies: 2
    Last Post: 10-08-2007, 16:06

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •