From d48ea5bb797037069d641da41da0f195f0124491 Mon Sep 17 00:00:00 2001 From: dan miller Date: Fri, 19 Oct 2007 05:20:48 +0000 Subject: one more for the gipper --- libraries/ode-0.9/drawstuff/dstest/dstest.cpp | 125 ++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 libraries/ode-0.9/drawstuff/dstest/dstest.cpp (limited to 'libraries/ode-0.9/drawstuff/dstest/dstest.cpp') diff --git a/libraries/ode-0.9/drawstuff/dstest/dstest.cpp b/libraries/ode-0.9/drawstuff/dstest/dstest.cpp new file mode 100644 index 0000000..27f042f --- /dev/null +++ b/libraries/ode-0.9/drawstuff/dstest/dstest.cpp @@ -0,0 +1,125 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#include +#include +#include + + +#ifndef M_PI +#define M_PI (3.14159265358979323846) +#endif + + +void start() +{ + // adjust the starting viewpoint a bit + float xyz[3],hpr[3]; + dsGetViewpoint (xyz,hpr); + hpr[0] += 7; + dsSetViewpoint (xyz,hpr); +} + + +void simLoop (int pause) +{ + float pos[3]; + float R[12]; + static float a = 0; + + if (!pause) a += 0.02f; + if (a > (2*M_PI)) a -= (float) (2*M_PI); + float ca = (float) cos(a); + float sa = (float) sin(a); + + dsSetTexture (DS_WOOD); + + float b = (a > M_PI) ? (2*(a-(float)M_PI)) : a*2; + pos[0] = -0.3f; + pos[1] = 0; + pos[2] = (float) (0.1f*(2*M_PI*b - b*b) + 0.65f); + R[0] = ca; R[1] = 0; R[2] = -sa; + R[4] = 0; R[5] = 1; R[6] = 0; + R[8] = sa; R[9] = 0; R[10] = ca; + dsSetColor (1,0.8f,0.6f); + dsDrawSphere (pos,R,0.3f); + + dsSetTexture (DS_NONE); + + pos[0] = -0.2f; + pos[1] = 0.8f; + pos[2] = 0.4f; + R[0] = ca; R[1] = -sa; R[2] = 0; + R[4] = sa; R[5] = ca; R[6] = 0; + R[8] = 0; R[9] = 0; R[10] = 1; + float sides[3] = {0.1f,0.4f,0.8f}; + dsSetColor (0.6f,0.6f,1); + dsDrawBox (pos,R,sides); + + dsSetTexture (DS_WOOD); + + float r = 0.3f; // cylinder radius + float d = (float)cos(a*2) * 0.4f; + float cd = (float)cos(-d/r); + float sd = (float)sin(-d/r); + pos[0] = -0.2f; + pos[1] = -1 + d; + pos[2] = 0.3f; + R[0] = 0; R[1] = 0; R[2] = -1; + R[4] = -sd; R[5] = cd; R[6] = 0; + R[8] = cd; R[9] = sd; R[10] = 0; + dsSetColor (0.4f,1,1); + dsDrawCylinder (pos,R,0.8f,r); + + pos[0] = 0; + pos[1] = 0; + pos[2] = 0.2f; + R[0] = 0; R[1] = sa; R[2] = -ca; + R[4] = 0; R[5] = ca; R[6] = sa; + R[8] = 1; R[9] = 0; R[10] = 0; + dsSetColor (1,0.9f,0.2f); + dsDrawCappedCylinder (pos,R,0.8f,0.2f); +} + + +void command (int cmd) +{ + dsPrint ("received command %d (`%c')\n",cmd,cmd); +} + + +int main (int argc, char **argv) +{ + // setup pointers to callback functions + dsFunctions fn; + fn.version = DS_VERSION; + fn.start = &start; + fn.step = &simLoop; + fn.command = command; + fn.stop = 0; + fn.path_to_textures = 0; // uses default + + // run simulation + dsSimulationLoop (argc,argv,400,400,&fn); + + return 0; +} -- cgit v1.1