Update of /cvsroot/grappelmann/spaceplane In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17728 Modified Files: coord3d.h gravity.cpp makefile object3d.cpp object3d.h opengl_utils.cpp opengl_utils.h scene_object.cpp transform.cpp Log Message: - added gravity - fixed object movement updates - various model parsing updates work - updated coord3d operators - scaling now has a sensible default - transforms done in correct order - other debugging removed/added Index: transform.cpp =================================================================== RCS file: /cvsroot/grappelmann/spaceplane/transform.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** transform.cpp 17 Aug 2004 18:21:43 -0000 1.3 --- transform.cpp 29 Aug 2004 05:43:27 -0000 1.4 *************** *** 10,13 **** --- 10,16 ---- : SceneObject(parent), m_rotationSize(0) { + m_scale.m_x = 1; + m_scale.m_y = 1; + m_scale.m_z = 1; } *************** *** 25,29 **** m_translation = translation; ! cout << "<Transform::_draw>\ttranslation x [" << m_translation.m_x << "] y [" << m_translation.m_y << "] z [" << m_translation.m_z << "]" << endl; return true; } --- 28,32 ---- m_translation = translation; ! //cout << "<Transform::setTranslation>\ttranslation x [" << m_translation.m_x << "] y [" << m_translation.m_y << "] z [" << m_translation.m_z << "]" << endl; return true; } *************** *** 48,61 **** glMatrixMode(GL_MODELVIEW); ! cout << "<Transform::_draw>\trotation size [" << m_rotationSize << "] x [" << m_rotation.m_x << "] y [" << m_rotation.m_y << "] z [" << m_rotation.m_z << "]" << endl; ! cout << "<Transform::_draw>\ttranslation x [" << m_translation.m_x << "] y [" << m_translation.m_y << "] z [" << m_translation.m_z << "]" << endl; ! cout << "<Transform::_draw>\tscale x [" << m_scale.m_x << "] y [" << m_scale.m_y << "] z [" << m_scale.m_z << "]" << endl; glTranslatef(m_translation.m_x, m_translation.m_y, m_translation.m_z); glRotatef(m_rotationSize, m_rotation.m_x, m_rotation.m_y, m_rotation.m_z); glScalef(m_scale.m_x, m_scale.m_y, m_scale.m_z); - //glTranslatef(m_translation.m_z, m_translation.m_x, m_translation.m_y); ! cout << "drawing children" << endl; //debugging //if((m_scale.m_x == 1.0) && (m_scale.m_y == 1.0) && (m_scale.m_z == 1.0)) { --- 51,63 ---- glMatrixMode(GL_MODELVIEW); ! //cout << "<Transform::_draw>\trotation size [" << m_rotationSize << "] x [" << m_rotation.m_x << "] y [" << m_rotation.m_y << "] z [" << m_rotation.m_z << "]" << endl; ! //cout << "<Transform::_draw>\ttranslation x [" << m_translation.m_x << "] y [" << m_translation.m_y << "] z [" << m_translation.m_z << "]" << endl; ! //cout << "<Transform::_draw>\tscale x [" << m_scale.m_x << "] y [" << m_scale.m_y << "] z [" << m_scale.m_z << "]" << endl; glTranslatef(m_translation.m_x, m_translation.m_y, m_translation.m_z); glRotatef(m_rotationSize, m_rotation.m_x, m_rotation.m_y, m_rotation.m_z); glScalef(m_scale.m_x, m_scale.m_y, m_scale.m_z); ! //cout << "drawing children" << endl; //debugging //if((m_scale.m_x == 1.0) && (m_scale.m_y == 1.0) && (m_scale.m_z == 1.0)) { *************** *** 63,67 **** //} ! cout << "done" << endl; return true; --- 65,69 ---- //} ! //cout << "done" << endl; return true; *************** *** 70,73 **** --- 72,84 ---- /* $Log$ + Revision 1.4 2004/08/29 05:43:27 o3dozone + - added gravity + - fixed object movement updates + - various model parsing updates work + - updated coord3d operators + - scaling now has a sensible default + - transforms done in correct order + - other debugging removed/added + Revision 1.3 2004/08/17 18:21:43 o3dozone Index: object3d.h =================================================================== RCS file: /cvsroot/grappelmann/spaceplane/object3d.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** object3d.h 17 Aug 2004 18:21:43 -0000 1.4 --- object3d.h 29 Aug 2004 05:43:27 -0000 1.5 *************** *** 15,19 **** Object3D(SceneObject* sceneObject) : m_sceneObject(sceneObject) ! {}; bool willIntersect(const Object3D& rhs, Coord3D& intersectPoint); --- 15,22 ---- Object3D(SceneObject* sceneObject) : m_sceneObject(sceneObject) ! { ! m_diameter = 100; ! _calcG(); ! }; bool willIntersect(const Object3D& rhs, Coord3D& intersectPoint); *************** *** 50,59 **** --- 53,78 ---- */ + bool draw(); + void setMass(double mass) { m_mass = mass; + _calcG(); }; double getMass() { return m_mass; }; + + void setDiameter(double diameter) { + m_diameter = diameter; + _calcG(); + }; + double getDiameter() { + return m_diameter; + }; + + double getG() { + return m_g; + }; + private: Coord3D m_pos; *************** *** 61,65 **** --- 80,89 ---- Coord3D m_rotation; SceneObject* m_sceneObject; + Transform m_transform; double m_mass; + double m_g; + double m_diameter; + + void _calcG(); }; Index: object3d.cpp =================================================================== RCS file: /cvsroot/grappelmann/spaceplane/object3d.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** object3d.cpp 24 Jun 2004 10:45:24 -0000 1.1.1.1 --- object3d.cpp 29 Aug 2004 05:43:27 -0000 1.2 *************** *** 5,8 **** --- 5,35 ---- }; + bool Object3D::draw() { + //cout << "<Object3D::draw>\tsetTranslation" << endl; + //cout << "<Object3D::draw>\tm_pos x [" << m_pos.m_x << "] y [" << m_pos.m_y << "] z [" << m_pos.m_z << "]" << endl; + m_transform.setTranslation(m_pos); + double length = m_rotation.length(); + m_rotation.normalise(); + + m_transform.setRotation(m_rotation, length); + + double scale = m_mass / 1000000000; + Coord3D scaleCoords(scale, scale, scale); + m_transform.setScale(scaleCoords); + + glPushMatrix(); + + //cout << "<Object3D::draw>\ttransform draw" << endl; + m_transform.draw(); + //cout << "<Object3D::draw>\tsceneobject draw" << endl; + m_sceneObject->draw(); + //cout << "<Object3D::draw>\tdone" << endl; + + glPopMatrix(); + + return true; + }; + + bool Object3D::willIntersect(const Object3D& rhs, Coord3D& intersectPoint) { bool willIntersect = false; *************** *** 57,58 **** --- 84,94 ---- }; + // gravity + // G = 6.67 x 10-11 N?m2/kg2 + // g = G(M/r^2) + void Object3D::_calcG() { + double radius = m_diameter / 2; + m_g = 6.67e-11 * m_mass / (radius * radius); + }; + + Index: scene_object.cpp =================================================================== RCS file: /cvsroot/grappelmann/spaceplane/scene_object.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** scene_object.cpp 18 Aug 2004 14:53:17 -0000 1.6 --- scene_object.cpp 29 Aug 2004 05:43:27 -0000 1.7 *************** *** 38,44 **** if(!m_displayListCreated) { if(_makeDisplayList()) { m_displayListCreated = true; } else { ! cout << "drawing" <<endl; draw(); } --- 38,45 ---- if(!m_displayListCreated) { if(_makeDisplayList()) { + cout << "creating display list" <<endl; m_displayListCreated = true; } else { ! //cout << "drawing" <<endl; draw(); } *************** *** 113,116 **** --- 114,126 ---- /* $Log$ + Revision 1.7 2004/08/29 05:43:27 o3dozone + - added gravity + - fixed object movement updates + - various model parsing updates work + - updated coord3d operators + - scaling now has a sensible default + - transforms done in correct order + - other debugging removed/added + Revision 1.6 2004/08/18 14:53:17 o3dozone - fixed material problems Index: coord3d.h =================================================================== RCS file: /cvsroot/grappelmann/spaceplane/coord3d.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** coord3d.h 23 Jul 2004 05:45:06 -0000 1.1 --- coord3d.h 29 Aug 2004 05:43:27 -0000 1.2 *************** *** 68,71 **** --- 68,79 ---- }; + Coord3D operator+=(const Coord3D& rhs) { + m_x += rhs.m_x; + m_y += rhs.m_y; + m_z += rhs.m_z; + + return(*this); + }; + Coord3D operator+(const Coord3D& rhs) const { return((Coord3D)(*this) + rhs); Index: opengl_utils.h =================================================================== RCS file: /cvsroot/grappelmann/spaceplane/opengl_utils.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** opengl_utils.h 23 Jul 2004 05:43:48 -0000 1.2 --- opengl_utils.h 29 Aug 2004 05:43:27 -0000 1.3 *************** *** 16,21 **** void opengl_init(); void reshape_screen(GLint widthOrigin, GLint heightOrigin, GLint width, GLint height); ! void draw_screen(Object3D& viewPoint, vector<Object3D>& objectArray, long objectCount); ! void drawModel(Vrml::DoubleArray* pointsArray, Vrml::DoubleArray* indicesArray); /* int loadTexture(GLint* textureName, char* textureFilename */ --- 16,21 ---- void opengl_init(); void reshape_screen(GLint widthOrigin, GLint heightOrigin, GLint width, GLint height); ! //void draw_screen(Object3D& viewPoint, vector<Object3D>& objectArray, long objectCount); ! //void drawModel(Vrml::DoubleArray* pointsArray, Vrml::DoubleArray* indicesArray); /* int loadTexture(GLint* textureName, char* textureFilename */ Index: makefile =================================================================== RCS file: /cvsroot/grappelmann/spaceplane/makefile,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** makefile 9 Aug 2004 07:50:54 -0000 1.5 --- makefile 29 Aug 2004 05:43:27 -0000 1.6 *************** *** 11,15 **** PLANE2_OBJS=spaceplane2.o ! GRAVITY_DEPS= GRAVITY_OBJS=gravity.o opengl_utils.o object3d.o vrml_v1.o system_state.o statgraph.o statgraphrenderer.o model_loader.o mesh.o polygon.o scene_object.o transform.o material.o --- 11,15 ---- PLANE2_OBJS=spaceplane2.o ! GRAVITY_DEPS=gravity.dep opengl_utils.dep object3d.dep vrml_v1.dep system_state.dep statgraph.dep statgraphrenderer.dep model_loader.dep mesh.dep polygon.dep scene_object.dep transform.dep material.dep GRAVITY_OBJS=gravity.o opengl_utils.o object3d.o vrml_v1.o system_state.o statgraph.o statgraphrenderer.o model_loader.o mesh.o polygon.o scene_object.o transform.o material.o *************** *** 29,33 **** $(CC) $(CC_OPTIONS) -o object3d_test object3d_test.cpp ! gravity: $(GRAVITY_OBJS) $(GRAVITY_DEPS) $(CC) $(CC_OPTIONS) $(SDL_FLAGS) $(SDL_LIBS) -o $@ $(GRAVITY_OBJS) --- 29,33 ---- $(CC) $(CC_OPTIONS) -o object3d_test object3d_test.cpp ! gravity: $(GRAVITY_DEPS) $(GRAVITY_OBJS) $(CC) $(CC_OPTIONS) $(SDL_FLAGS) $(SDL_LIBS) -o $@ $(GRAVITY_OBJS) *************** *** 35,44 **** $(CC) -static-libgcc -static $(CC_OPTIONS) $(SDL_FLAGS) $(SDL_LIBS) -o gravity_static $(GRAVITY_OBJS) ! %.o: %.cpp %.h system_state.h model.h ! $(CC) $(CC_OPTIONS) $(SDL_FLAGS) $(CC_FLAGS) $(INCDIRS) -c $< -o $@ ! ! %.obj: %.cpp %.h ! $(CC) $(CC_OPTIONS) -Dmain=SDL_main -DHAVE_OPENGL $(SDL_FLAGS) $(CC_FLAGS) -c $< -o $@ clean: --- 35,45 ---- $(CC) -static-libgcc -static $(CC_OPTIONS) $(SDL_FLAGS) $(SDL_LIBS) -o gravity_static $(GRAVITY_OBJS) ! %.dep: %.cpp %.h system_state.h model.h ! @echo building dependencies ! $(CC) $(CC_OPTIONS) -M $(SDL_FLAGS) $(CC_FLAGS) $(INCDIRS) -c $< -o $@ + %.o: %.cpp %.h system_state.h model.h coord3d.h + @echo building object file + $(CC) $(CC_OPTIONS) $(SDL_FLAGS) $(CC_FLAGS) $(INCDIRS) -c $< -o $@ clean: Index: opengl_utils.cpp =================================================================== RCS file: /cvsroot/grappelmann/spaceplane/opengl_utils.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** opengl_utils.cpp 21 Jul 2004 07:38:05 -0000 1.3 --- opengl_utils.cpp 29 Aug 2004 05:43:27 -0000 1.4 *************** *** 116,121 **** }; void draw_screen(Object3D& viewPoint, vector<Object3D>& objectArray, long objectCount) { ! /* Our angle of rotation. */ Coord3D& rotation = viewPoint.getRotation(); Coord3D& position = viewPoint.getPos(); --- 116,122 ---- }; + /* void draw_screen(Object3D& viewPoint, vector<Object3D>& objectArray, long objectCount) { ! // Our angle of rotation. Coord3D& rotation = viewPoint.getRotation(); Coord3D& position = viewPoint.getPos(); *************** *** 163,167 **** } ! /* We don't want to modify the projection matrix. */ glMatrixMode( GL_MODELVIEW ); glLoadIdentity( ); --- 164,168 ---- } ! // We don't want to modify the projection matrix. glMatrixMode( GL_MODELVIEW ); glLoadIdentity( ); *************** *** 235,238 **** --- 236,240 ---- } + */ Index: gravity.cpp =================================================================== RCS file: /cvsroot/grappelmann/spaceplane/gravity.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** gravity.cpp 17 Aug 2004 18:21:43 -0000 1.7 --- gravity.cpp 29 Aug 2004 05:43:27 -0000 1.8 *************** *** 190,194 **** velocity.m_x = 0; velocity.m_y = 0; ! velocity.m_z = 1; Coord3D& rotation = objectArray[0].getRotation(); --- 190,194 ---- velocity.m_x = 0; velocity.m_y = 0; ! velocity.m_z = 0; Coord3D& rotation = objectArray[0].getRotation(); *************** *** 202,214 **** for(int i = 1; i < objectCount; i++) { Coord3D& position = objectArray[i].getPos(); ! position.m_x = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)100) - 50; ! position.m_y = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)100) - 50; ! position.m_z = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)100) - 50; Coord3D& velocity = objectArray[i].getVelocity(); velocity.m_x = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)5) - 2.5; velocity.m_y = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)5) - 2.5; velocity.m_z = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)5) - 2.5; ! Coord3D& rotation = objectArray[i].getRotation(); rotation.m_x = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)360) - 180; --- 202,216 ---- for(int i = 1; i < objectCount; i++) { Coord3D& position = objectArray[i].getPos(); ! position.m_x = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)30) - 15; ! position.m_y = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)30) - 15; ! position.m_z = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)30) - 15; + /* Coord3D& velocity = objectArray[i].getVelocity(); velocity.m_x = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)5) - 2.5; velocity.m_y = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)5) - 2.5; velocity.m_z = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)5) - 2.5; ! */ ! Coord3D& rotation = objectArray[i].getRotation(); rotation.m_x = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)360) - 180; *************** *** 216,221 **** rotation.m_z = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)360) - 180; ! double mass = (rand() / (double)RAND_MAX) * (double)1000; objectArray[i].setMass(mass); } --- 218,228 ---- rotation.m_z = (pos_t)((pos_t) (rand() / (pos_t)RAND_MAX) * (pos_t)360) - 180; ! double mass = (rand() / (double)RAND_MAX) * (double)1000000000; objectArray[i].setMass(mass); + + //cout << "<randomiseObjects>\tposition x [" << position.m_x << "] y [" << position.m_y << "] z [" << position.m_z << "]" << endl; + //cout << "<randomiseObjects>\tvelocity x [" << velocity.m_x << "] y [" << velocity.m_y << "] z [" << velocity.m_z << "]" << endl; + //cout << "<randomiseObjects>\trotation x [" << rotation.m_x << "] y [" << rotation.m_y << "] z [" << rotation.m_z << "]" << endl; + //cout << "<randomiseObjects>\tmass [" << mass << "]" << endl; } *************** *** 237,241 **** // first, check for a collision // *** NOTE *** this is terribly inefficient right now - /* for(int collisionObjectIndex = 0; collisionObjectIndex < objectCount; collisionObjectIndex++) { // skip my own object --- 244,247 ---- *************** *** 250,254 **** --- 256,264 ---- Coord3D& curObjectVelocity = objectArray[curObjectIndex].getVelocity(); Coord3D& collisionObjectVelocity = objectArray[collisionObjectIndex].getVelocity(); + double curObjectG = objectArray[curObjectIndex].getG(); + double collisionObjectG = objectArray[collisionObjectIndex].getG(); + // collisions + /* if(curPosition.distance(collisionObjectPos).length() <= 1) { cout << "<updateObjects>\tcollision between curObjectIndex [" << curObjectIndex << "] and collisionObjectIndex [" << collisionObjectIndex << "]" << endl; *************** *** 261,267 **** doneMap[pair<int, int>(curObjectIndex, collisionObjectIndex)] = true; } - */ Coord3D& position = objectArray[curObjectIndex].getPos(); Coord3D& velocity = objectArray[curObjectIndex].getVelocity(); --- 271,285 ---- doneMap[pair<int, int>(curObjectIndex, collisionObjectIndex)] = true; + */ + + Coord3D posDiff = curPosition - collisionObjectPos; + double posDiffSize = posDiff.length(); + posDiff.normalise(); + + curObjectVelocity += posDiff * sqrt(posDiffSize) * -collisionObjectG; + collisionObjectVelocity += posDiff * sqrt(posDiffSize) * curObjectG; } + // update positions according to Coord3D& position = objectArray[curObjectIndex].getPos(); Coord3D& velocity = objectArray[curObjectIndex].getVelocity(); *************** *** 352,356 **** } - // randomise the object's initial position if(!randomiseObjects(objectArray, objectCount)) { --- 370,373 ---- *************** *** 358,362 **** exit(-1); } ! /* // disable mouse display --- 375,379 ---- exit(-1); } ! /* // disable mouse display *************** *** 370,375 **** StatGraphRenderer statGraphRenderer(&renderState); statGraphRenderer.setShape(10, 10, 60, 30); ! ! */ --- 387,391 ---- StatGraphRenderer statGraphRenderer(&renderState); statGraphRenderer.setShape(10, 10, 60, 30); ! */ *************** *** 424,475 **** glLoadIdentity( ); ! glColor3f(0.2, 0.2, 0.2); ! if(0 && SystemStateSingleton::instance().showGrid) { ! glutWireSphere(10.0, 50, 50); ! } ! ! //glTranslatef(0, 0, -10); ! // call draw here] ! glRotatef(-rotation.m_x, 1.0, 0.0, 0.0); ! glRotatef(-rotation.m_y, 0.0, 1.0, 0.0); ! glRotatef(-rotation.m_z, 0.0, 0.0, 1.0); ! glTranslatef(position.m_x, position.m_y, position.m_z); ! //position.m_z -= 0.1; ! ! glColor3f(1, 1, 1); ! glBegin(GL_LINES); ! glVertex3f(10, 0, -20); ! glVertex3f(-10, 0, -20); ! glEnd(); ! glBegin(GL_LINES); ! glVertex3f(0, 10, -20); ! glVertex3f(0, -10, -20); ! glEnd(); ! glBegin(GL_LINES); ! glVertex3f(0, 0, -20); ! glVertex3f(0, 0, -10); ! glEnd(); ! ! glBegin(GL_LINES); ! glVertex3f(10, 20, -20); ! glVertex3f(-10, 20, 20); ! glEnd(); ! glBegin(GL_LINES); ! glVertex3f(0, 20, -20); ! glVertex3f(0, -20, 20); ! glEnd(); ! glBegin(GL_LINES); ! glVertex3f(0, 20, -20); ! glVertex3f(0, 20, 20); ! glEnd(); ! ! slugMobile->draw(); SDL_GL_SwapBuffers(); //printf("drawing screen\n"); ! sleep(1); } --- 440,496 ---- glLoadIdentity( ); ! glColor3f(0.2, 0.2, 0.2); ! if(0 && SystemStateSingleton::instance().showGrid) { ! glutWireSphere(10.0, 50, 50); ! } ! //glTranslatef(0, 0, -10); ! // call draw here] ! ! glRotatef(-rotation.m_x, 1.0, 0.0, 0.0); ! glRotatef(-rotation.m_y, 0.0, 1.0, 0.0); ! glRotatef(-rotation.m_z, 0.0, 0.0, 1.0); ! glTranslatef(position.m_x, position.m_y, position.m_z); ! //position.m_z -= 0.1; ! ! glColor3f(1, 1, 1); ! glBegin(GL_LINES); ! glVertex3f(10, 0, -20); ! glVertex3f(-10, 0, -20); ! glEnd(); ! glBegin(GL_LINES); ! glVertex3f(0, 10, -20); ! glVertex3f(0, -10, -20); ! glEnd(); ! glBegin(GL_LINES); ! glVertex3f(0, 0, -20); ! glVertex3f(0, 0, -10); ! glEnd(); ! ! glBegin(GL_LINES); ! glVertex3f(10, 20, -20); ! glVertex3f(-10, 20, 20); ! glEnd(); ! glBegin(GL_LINES); ! glVertex3f(0, 20, -20); ! glVertex3f(0, -20, 20); ! glEnd(); ! glBegin(GL_LINES); ! glVertex3f(0, 20, -20); ! glVertex3f(0, 20, 20); ! glEnd(); ! //slugMobile->draw(); ! long count = 0; ! for(vector<Object3D>::iterator i = objectArray.begin(); i != objectArray.end(); i++) { ! count++; ! (*i).draw(); ! } ! //cout << "draw count [" << count << "]" << endl; SDL_GL_SwapBuffers(); //printf("drawing screen\n"); ! //sleep(1); } *************** *** 486,489 **** --- 507,519 ---- /* $Log$ + Revision 1.8 2004/08/29 05:43:27 o3dozone + - added gravity + - fixed object movement updates + - various model parsing updates work + - updated coord3d operators + - scaling now has a sensible default + - transforms done in correct order + - other debugging removed/added + Revision 1.7 2004/08/17 18:21:43 o3dozone |