Сообщение от BlackOut
ей занимается сам Knightmare, что тут не понятно? Все будет круто и без мата! а Рендер лол со своим врапером! то та!
|

BBDECL float BBCALL pxWheelSetEntity(float *entity, NxWheelShape* wheel, int step)
{
NxWheelContactData contactData;
NxShape* whShape = wheel->getContact(contactData);
WheelData* data = (WheelData*)wheel->userData;
NxReal rollAngle = data->rollAngle;
rollAngle += wheel->getAxleSpeed()/gDeltaTime;
while (rollAngle > NxTwoPi) //normally just 1x
rollAngle -= NxTwoPi;
while (rollAngle < -NxTwoPi)
rollAngle += NxTwoPi;
data->rollAngle = rollAngle;
//memcpy(&(wheel->userData),&rollAngle,4);
NxMat34 pose;
pose = wheel->getGlobalPose();
NxReal r = wheel->getRadius();
NxReal st = wheel->getSuspensionTravel();
NxReal steerAngle = wheel->getSteerAngle();
NxVec3 speed = data->actor->getLinearVelocity();
NxVec3 p0;
NxVec3 dir;
p0 = pose.t;
pose.M.getColumn(1, dir);
dir = -dir; //cast along -Y.
NxMat33 rot, axisRot;
rot.rotY(steerAngle);
axisRot.rotY(0);
NxMat33 rollRot;
rollRot.rotX(rollAngle);
pose.M = pose.M * axisRot*rot * rollRot;
if (whShape)
{
if (step==1) pose.t = contactData.contactPoint + speed/60;
else pose.t = contactData.contactPoint;
pose.t -= dir * r; //go from contact pos to center pos.
}
else
{
if (!data->actor->isSleeping()) pose.t = p0 + dir * st;
}
if (entity)
{
NxQuat q;
pose.M.toQuat(q);
entity[13] = q.x;
entity[14] = q.y;
entity[15] = q.z;
entity[12] = -q.w;
entity[16] = pose.t.x;
entity[17] = pose.t.y;
entity[18] = pose.t.z;
int moved = 3;
entity[11] = *((float*)(&moved));
}else
{
data->posMat = pose;
}
return gDeltaTime;
}
Форматирование оригинала сохранено. Сравни:

void pxWorld::ProceedContacts(IBody * body)
{
// for rigid bodies
if(body->GetBodyType() == pxBODY_RIGID)
{
// cast pointer
pxBody * rigidBody = (pxBody*)body;
// if not received contacts from currect iteration
if(rigidBody->GetLastIteration() != _lastIteration)
{
// aclear old contacts
rigidBody->ClearContacts();
// check all manifolds
for(int i = 0; i < _world->getDispatcher()->getNumManifolds(); i++)
{
// getting manifold
btPersistentManifold * contactManifold = _world->getDispatcher()->getManifoldByIndexInternal(i);
// getting bodies
btCollisionObject * body1 = static_cast<btCollisionObject*>(contactManifold->getBody0());
btCollisionObject * body2 = static_cast<btCollisionObject*>(contactManifold->getBody1());
// if checked body used in manifold
if(body1 == rigidBody->GetBody() || body2 == rigidBody->GetBody())
{
// add all contact points into body
for(int j = 0; j < contactManifold->getNumContacts(); j++)
{
// getting contact point
btManifoldPoint & contactPoint = contactManifold->getContactPoint(j);
// add contact
btVector3 point = contactPoint.getPositionWorldOnB();
btVector3 normal = contactPoint.m_normalWorldOnB;
rigidBody->AddContact(body1 == rigidBody->GetBody() ? body2 : body1,
point.x(), point.y(), point.z(),
normal.x(), normal.y(), normal.z(),
contactPoint.getDistance());
}
}
}
// reset iteration number
rigidBody->SetLastIteration(_lastIteration);
}
}
}
но в релизе нет физики, только в апдейтах на Hot Area, правильно понимаю?
|
Если ты будешь ждать версии 1.16 то у меня для тебя плохие новости. На
http://hot.xors3d.com выкладываются также стабильные сборки.