Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ode/ode-0.9/drawstuff/dstest/dstest.cpp @ 216

Last change on this file since 216 was 216, checked in by mathiask, 17 years ago

[Physik] add ode-0.9

File size: 3.6 KB
RevLine 
[216]1/*************************************************************************
2 *                                                                       *
3 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
4 * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
5 *                                                                       *
6 * This library is free software; you can redistribute it and/or         *
7 * modify it under the terms of EITHER:                                  *
8 *   (1) The GNU Lesser General Public License as published by the Free  *
9 *       Software Foundation; either version 2.1 of the License, or (at  *
10 *       your option) any later version. The text of the GNU Lesser      *
11 *       General Public License is included with this library in the     *
12 *       file LICENSE.TXT.                                               *
13 *   (2) The BSD-style license that is included with this library in     *
14 *       the file LICENSE-BSD.TXT.                                       *
15 *                                                                       *
16 * This library is distributed in the hope that it will be useful,       *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
19 * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
20 *                                                                       *
21 *************************************************************************/
22
23#include <stdio.h>
24#include <math.h>
25#include <drawstuff/drawstuff.h>
26
27
28#ifndef M_PI
29#define M_PI (3.14159265358979323846)
30#endif
31
32
33void start()
34{
35  // adjust the starting viewpoint a bit
36  float xyz[3],hpr[3];
37  dsGetViewpoint (xyz,hpr);
38  hpr[0] += 7;
39  dsSetViewpoint (xyz,hpr);
40}
41
42
43void simLoop (int pause)
44{
45  float pos[3];
46  float R[12];
47  static float a = 0;
48
49  if (!pause) a += 0.02f;
50  if (a > (2*M_PI)) a -= (float) (2*M_PI);
51  float ca = (float) cos(a);
52  float sa = (float) sin(a);
53
54  dsSetTexture (DS_WOOD);
55
56  float b = (a > M_PI) ? (2*(a-(float)M_PI)) : a*2;
57  pos[0] = -0.3f;
58  pos[1] = 0;
59  pos[2] = (float) (0.1f*(2*M_PI*b - b*b) + 0.65f);
60  R[0] = ca; R[1] = 0; R[2] = -sa;
61  R[4] = 0;  R[5] = 1; R[6] = 0;
62  R[8] = sa; R[9] = 0; R[10] = ca;
63  dsSetColor (1,0.8f,0.6f);
64  dsDrawSphere (pos,R,0.3f);
65
66  dsSetTexture (DS_NONE);
67
68  pos[0] = -0.2f;
69  pos[1] = 0.8f;
70  pos[2] = 0.4f;
71  R[0] = ca; R[1] = -sa; R[2] = 0;
72  R[4] = sa; R[5] = ca;  R[6] = 0;
73  R[8] = 0;  R[9] = 0;   R[10] = 1;
74  float sides[3] = {0.1f,0.4f,0.8f};
75  dsSetColor (0.6f,0.6f,1);
76  dsDrawBox (pos,R,sides);
77
78  dsSetTexture (DS_WOOD);
79
80  float r = 0.3f;                     // cylinder radius
81  float d = (float)cos(a*2) * 0.4f;
82  float cd = (float)cos(-d/r);
83  float sd = (float)sin(-d/r);
84  pos[0] = -0.2f;
85  pos[1] = -1 + d;
86  pos[2] = 0.3f;
87  R[0] = 0;   R[1] = 0;  R[2] = -1;
88  R[4] = -sd; R[5] = cd; R[6] =  0;
89  R[8] =  cd; R[9] = sd; R[10] = 0;
90  dsSetColor (0.4f,1,1);
91  dsDrawCylinder (pos,R,0.8f,r);
92
93  pos[0] = 0;
94  pos[1] = 0;
95  pos[2] = 0.2f;
96  R[0] = 0; R[1] = sa; R[2] = -ca;
97  R[4] = 0; R[5] = ca; R[6] = sa;
98  R[8] = 1; R[9] = 0;  R[10] = 0;
99  dsSetColor (1,0.9f,0.2f);
100  dsDrawCappedCylinder (pos,R,0.8f,0.2f);
101}
102
103
104void command (int cmd)
105{
106  dsPrint ("received command %d (`%c')\n",cmd,cmd);
107}
108
109
110int main (int argc, char **argv)
111{
112  // setup pointers to callback functions
113  dsFunctions fn;
114  fn.version = DS_VERSION;
115  fn.start = &start;
116  fn.step = &simLoop;
117  fn.command = command;
118  fn.stop = 0;
119  fn.path_to_textures = 0;      // uses default
120
121  // run simulation
122  dsSimulationLoop (argc,argv,400,400,&fn);
123
124  return 0;
125}
Note: See TracBrowser for help on using the repository browser.