Спаравочник по DX не видел на русском
(.
По шрейдерам и спрайтам есть не плохая книга:
Wordware Publishing - Introduction to 3D Game Programming with DirectX 9.0.pdf.rar
webfile.ru/359056
Wordware Publishing - Introduction to 3D Game Programming with DirectX 9.0.source code.zip
webfile.ru/359071
Описание ODE есть на сайте:
http://pmg.org.ru/gamedev/ode_ru.zip
Сам ODE не подключал, но мне кажется, что работа с ним сильно зависит от твоего интерфейса работы с объектами 3D. Из того что я видел мне понравилось как сделано в Blender. Там заданы вначале абстрактные классы типа:
Код:
/**
* Physics Environment takes care of stepping the simulation and is a container for physics entities (rigidbodies,constraints, materials etc.)
* A derived class may be able to 'construct' entities by loading and/or converting
*/
class PHY_IPhysicsEnvironment
{
public:
virtual ~PHY_IPhysicsEnvironment();
virtual void beginFrame() = 0;
virtual void endFrame() = 0;
/// Perform an integration step of duration 'timeStep'.
virtual bool proceedDeltaTime(double curTime,float timeStep)=0;
virtual void setFixedTimeStep(bool useFixedTimeStep,float fixedTimeStep)=0;
//returns 0.f if no fixed timestep is used
virtual float getFixedTimeStep()=0;
virtual void setGravity(float x,float y,float z)=0;
virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
float pivotX,float pivotY,float pivotZ,
float axisX,float axisY,float axisZ)=0;
virtual void removeConstraint(int constraintid)=0;
virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ,
float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ)=0;
//Methods for gamelogic collision/physics callbacks
//todo:
virtual void addSensor(PHY_IPhysicsController* ctrl)=0;
virtual void removeSensor(PHY_IPhysicsController* ctrl)=0;
virtual void addTouchCallback(int response_class, PHY_ResponseCallback callback, void *user)=0;
virtual void requestCollisionCallback(PHY_IPhysicsController* ctrl)=0;
virtual PHY_IPhysicsController* CreateSphereController(float radius,const PHY__Vector3& position) =0;
virtual PHY_IPhysicsController* CreateConeController(float coneradius,float coneheight)=0;
};
А потом на ODE и Sumo реализовано уже конкретные методы. По моему очень правильный подход.
Причем все разделено на среду, физический контроллер объекта и состояние движения.