From 79eca25c945a535a7a0325999034bae17da92412 Mon Sep 17 00:00:00 2001 From: dan miller Date: Fri, 19 Oct 2007 05:15:33 +0000 Subject: resubmitting ode --- libraries/ode-0.9/include/drawstuff/drawstuff.h | 294 ++++++++++++++++++++++++ libraries/ode-0.9/include/drawstuff/version.h | 29 +++ 2 files changed, 323 insertions(+) create mode 100644 libraries/ode-0.9/include/drawstuff/drawstuff.h create mode 100644 libraries/ode-0.9/include/drawstuff/version.h (limited to 'libraries/ode-0.9/include/drawstuff') diff --git a/libraries/ode-0.9/include/drawstuff/drawstuff.h b/libraries/ode-0.9/include/drawstuff/drawstuff.h new file mode 100644 index 0000000..ffaae81 --- /dev/null +++ b/libraries/ode-0.9/include/drawstuff/drawstuff.h @@ -0,0 +1,294 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001-2003 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. * + * * + *************************************************************************/ + +/** @defgroup drawstuff DrawStuff + +DrawStuff is a library for rendering simple 3D objects in a virtual +environment, for the purposes of demonstrating the features of ODE. +It is provided for demonstration purposes and is not intended for +production use. + +@section Notes + +In the virtual world, the z axis is "up" and z=0 is the floor. + +The user is able to click+drag in the main window to move the camera: + * left button - pan and tilt. + * right button - forward and sideways. + * left + right button (or middle button) - sideways and up. +*/ + + +#ifndef __DRAWSTUFF_H__ +#define __DRAWSTUFF_H__ + +/* Define a DLL export symbol for those platforms that need it */ +#if defined(ODE_PLATFORM_WINDOWS) + #if defined(DS_DLL) + #define DS_API __declspec(dllexport) + #elif !defined(DS_LIB) + #define DS_DLL_API __declspec(dllimport) + #endif +#endif + +#if !defined(DS_API) + #define DS_API +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + + +/* texture numbers */ +#define DS_NONE 0 /* uses the current color instead of a texture */ +#define DS_WOOD 1 + + +/** + * @struct dsFunctions + * @brief Set of functions to be used as callbacks by the simulation loop. + * @ingroup drawstuff + */ +typedef struct dsFunctions { + int version; /* put DS_VERSION here */ + /* version 1 data */ + void (*start)(); /* called before sim loop starts */ + void (*step) (int pause); /* called before every frame */ + void (*command) (int cmd); /* called if a command key is pressed */ + void (*stop)(); /* called after sim loop exits */ + /* version 2 data */ + char *path_to_textures; /* if nonzero, path to texture files */ +} dsFunctions; + + +/** + * @brief Does the complete simulation. + * @ingroup drawstuff + * This function starts running the simulation, and only exits when the simulation is done. + * Function pointers should be provided for the callbacks. + * @param argv supports flags like '-notex' '-noshadow' '-pause' + * @param fn Callback functions. + */ +DS_API void dsSimulationLoop (int argc, char **argv, + int window_width, int window_height, + struct dsFunctions *fn); + +/** + * @brief exit with error message. + * @ingroup drawstuff + * This function displays an error message then exit. + * @param msg format strin, like printf, without the newline character. + */ +DS_API void dsError (char *msg, ...); + +/** + * @brief exit with error message and core dump. + * @ingroup drawstuff + * this functions tries to dump core or start the debugger. + * @param msg format strin, like printf, without the newline character. + */ +DS_API void dsDebug (char *msg, ...); + +/** + * @brief print log message + * @ingroup drawstuff + * @param msg format string, like printf, without the \n. + */ +DS_API void dsPrint (char *msg, ...); + +/** + * @brief Sets the viewpoint + * @ingroup drawstuff + * @param xyz camera position. + * @param hpr contains heading, pitch and roll numbers in degrees. heading=0 + * points along the x axis, pitch=0 is looking towards the horizon, and + * roll 0 is "unrotated". + */ +DS_API void dsSetViewpoint (float xyz[3], float hpr[3]); + + +/** + * @brief Gets the viewpoint + * @ingroup drawstuff + * @param xyz position + * @param hpr heading,pitch,roll. + */ +DS_API void dsGetViewpoint (float xyz[3], float hpr[3]); + +/** + * @brief Stop the simulation loop. + * @ingroup drawstuff + * Calling this from within dsSimulationLoop() + * will cause it to exit and return to the caller. it is the same as if the + * user used the exit command. using this outside the loop will have no + * effect. + */ +DS_API void dsStop(); + +/** + * @brief Get the elapsed time (on wall-clock) + * @ingroup drawstuff + * It returns the nr of seconds since the last call to this function. + */ +DS_API double dsElapsedTime(); + +/** + * @brief Toggle the rendering of textures. + * @ingroup drawstuff + * It changes the way objects are drawn. these changes will apply to all further + * dsDrawXXX() functions. + * @param the texture number must be a DS_xxx texture constant. + * The current texture is colored according to the current color. + * At the start of each frame, the texture is reset to none and the color is + * reset to white. + */ +DS_API void dsSetTexture (int texture_number); + +/** + * @brief Set the color with which geometry is drawn. + * @ingroup drawstuff + * @param red Red component from 0 to 1 + * @param green Green component from 0 to 1 + * @param blue Blue component from 0 to 1 + */ +DS_API void dsSetColor (float red, float green, float blue); + +/** + * @brief Set the color and transparency with which geometry is drawn. + * @ingroup drawstuff + * @param alpha Note that alpha transparency is a misnomer: it is alpha opacity. + * 1.0 means fully opaque, and 0.0 means fully transparent. + */ +DS_API void dsSetColorAlpha (float red, float green, float blue, float alpha); + +/** + * @brief Draw a box. + * @ingroup drawstuff + * @param pos is the x,y,z of the center of the object. + * @param R is a 3x3 rotation matrix for the object, stored by row like this: + * [ R11 R12 R13 0 ] + * [ R21 R22 R23 0 ] + * [ R31 R32 R33 0 ] + * @param sides[] is an array of x,y,z side lengths. + */ +DS_API void dsDrawBox (const float pos[3], const float R[12], const float sides[3]); + +/** + * @brief Draw a sphere. + * @ingroup drawstuff + * @param pos Position of center. + * @param R orientation. + * @param radius + */ +DS_API void dsDrawSphere (const float pos[3], const float R[12], float radius); + +/** + * @brief Draw a triangle. + * @ingroup drawstuff + * @param pos Position of center + * @param R orientation + * @param v0 first vertex + * @param v1 second + * @param v2 third vertex + * @param solid set to 0 for wireframe + */ +DS_API void dsDrawTriangle (const float pos[3], const float R[12], + const float *v0, const float *v1, const float *v2, int solid); + +/** + * @brief Draw a z-aligned cylinder + * @ingroup drawstuff + */ +DS_API void dsDrawCylinder (const float pos[3], const float R[12], + float length, float radius); + +/** + * @brief Draw a z-aligned capsule + * @ingroup drawstuff + */ +DS_API void dsDrawCapsule (const float pos[3], const float R[12], + float length, float radius); + +/** + * @brief Draw a line. + * @ingroup drawstuff + */ +DS_API void dsDrawLine (const float pos1[3], const float pos2[3]); + +/** + * @brief Draw a convex shape. + * @ingroup drawstuff + */ +DS_API void dsDrawConvex(const float pos[3], const float R[12], + float *_planes, + unsigned int _planecount, + float *_points, + unsigned int _pointcount, + unsigned int *_polygons); + + /* these drawing functions are identical to the ones above, except they take + * double arrays for `pos' and `R'. + */ +DS_API void dsDrawBoxD (const double pos[3], const double R[12], + const double sides[3]); +DS_API void dsDrawSphereD (const double pos[3], const double R[12], + const float radius); +DS_API void dsDrawTriangleD (const double pos[3], const double R[12], + const double *v0, const double *v1, const double *v2, int solid); +DS_API void dsDrawCylinderD (const double pos[3], const double R[12], + float length, float radius); +DS_API void dsDrawCapsuleD (const double pos[3], const double R[12], + float length, float radius); +DS_API void dsDrawLineD (const double pos1[3], const double pos2[3]); +DS_API void dsDrawConvexD(const double pos[3], const double R[12], + double *_planes, + unsigned int _planecount, + double *_points, + unsigned int _pointcount, + unsigned int *_polygons); + +/** + * @brief Set the quality with which curved objects are rendered. + * @ingroup drawstuff + * Higher numbers are higher quality, but slower to draw. + * This must be set before the first objects are drawn to be effective. + * Default sphere quality is 1, default capsule quality is 3. + */ +DS_API void dsSetSphereQuality (int n); /* default = 1 */ +DS_API void dsSetCapsuleQuality (int n); /* default = 3 */ + +// Backwards compatible API +#define dsDrawCappedCylinder dsDrawCapsule +#define dsDrawCappedCylinderD dsDrawCapsuleD +#define dsSetCappedCylinderQuality dsSetCapsuleQuality + +/* closing bracket for extern "C" */ +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/libraries/ode-0.9/include/drawstuff/version.h b/libraries/ode-0.9/include/drawstuff/version.h new file mode 100644 index 0000000..71d95f4 --- /dev/null +++ b/libraries/ode-0.9/include/drawstuff/version.h @@ -0,0 +1,29 @@ +/************************************************************************* + * * + * 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. * + * * + *************************************************************************/ + +#ifndef __VERSION_H +#define __VERSION_H + +/* high byte is major version, low byte is minor version */ +#define DS_VERSION 0x0002 + +#endif -- cgit v1.1