Пример #1
0
bool CPhysicsManager::AddPhysicController (CPhysicController* controller)
{
	assert(controller != NULL);
	assert(m_pScene != NULL);
	assert(m_pControllerManager != NULL);

	bool isOK = false;
	NxController* nxController = controller->GetPhXController();
	NxCapsuleControllerDesc*	nxControllerDesc = controller->GetPhXControllerDesc();
	assert(nxControllerDesc!=NULL);
	assert(nxController==NULL); //Nos aseguramos que no hayan registrado ya un actor en la escena
	nxController = m_pControllerManager->createController(m_pScene, *nxControllerDesc );
	if (m_pControllerManager!= NULL)
	{
		controller->CreateController(nxController, m_pScene);
		nxController->getActor()->userData = controller->GetUserData();
		//NxShape*const* shape = nxController->getActor()->getShapes();
		//shape[0]->setGroup(controller->);

		isOK = true;
	}

	return isOK;

}
Пример #2
0
/***********************************************************
 move character
 returned collision flags, collection of NxControllerFlag
***********************************************************/
unsigned int PhysXEngine::MoveCharacter(unsigned int characterIndex, const NxVec3& moveVector)
{
	NxU32 collisionFlags;

	NxController* ctrl = gManager->getController(characterIndex);
	if(ctrl)
		ctrl->move(moveVector, COLLIDABLE_MASK, 0.000001f, collisionFlags);

	return collisionFlags;
}
NxU32 MoveCharacter(NxU32 characterIndex, NxScene& scene, const NxVec3& dispVector, NxF32 elapsedTime, NxU32 collisionGroups, NxF32 heightDelta)
{
	gNbPts = 0;

#ifndef DEBUG_CCT
	{
		//	NxF32 sharpness = 0.1f;
		NxF32 sharpness = 1.0f;

		NxU32 collisionFlags;
		NxVec3 d = dispVector*elapsedTime;
		if(heightDelta!=0.0f)
			d.y+=heightDelta;
		NxController* c = gManager->getController(characterIndex);
		c->move(d, collisionGroups, 0.000001f, collisionFlags, sharpness);
		return collisionFlags;
	}
#else
	{
		NxF32 sharpness = 1.0f;

		NxU32 collisionFlags;
		NxVec3 d = dispVector*elapsedTime;
		if(heightDelta!=0.0f)
			d.y+=heightDelta;

		d.y = 0.0f;

		NxController* c = gManager->getController(characterIndex);
		c->move(d, collisionGroups, 0.000001f, collisionFlags, sharpness);

		NxVec3 pos = c->getDebugPosition();

		d.x = d.z = 0.0f;
		d.y = -100.0f;

		NxU32 collisionFlags2;
		c->move(d, collisionGroups, 0.001f, collisionFlags2, sharpness);

		gLimitPos = c->getDebugPosition();

		c->setPosition(pos);

		return collisionFlags;
	}
#endif
}
Пример #4
0
/***********************************************************
	Render actors
***********************************************************/
void PhysXEngine::RenderActors()
{
	glEnable(GL_BLEND);
	glDisable(GL_TEXTURE_2D);
	glDisable(GL_DEPTH_TEST);
	glLineWidth(2.0f);

    // Render all the actors in the scene
    NxU32 nbActors = gScene->getNbActors();
    NxActor** actors = gScene->getActors();
    while (nbActors--)
    {
        NxActor* actor = *actors++;

		glPushMatrix();

		glScalef(1, 0.5f, 1);
		NxMat34 pose = actor->getShapes()[0]->getGlobalPose();
		//glTranslated(pose.t.x, pose.t.y/2. + 0.5, pose.t.z);

		float glmat[16];	//4x4 column major matrix for OpenGL.
		pose.M.getColumnMajorStride4(&(glmat[0]));
		pose.t.get(&(glmat[12]));
		//clear the elements we don't need:
		glmat[3] = glmat[7] = glmat[11] = 0.0f;
		glmat[15] = 1.0f;
		glMultMatrixf(&(glmat[0]));

		NxBoxShape* boxshap = actor->getShapes()[0]->isBox();
		if(boxshap)
		{
			glColor4f(0.0f,0.0f,1.0f, 1.f);

			NxVec3 boxDim = boxshap->getDimensions();
			glScalef(boxDim.x, boxDim.y, boxDim.z);

			float _sizeX = 1, _sizeY = 1, _sizeZ = 1;
			glBegin(GL_LINES);
				glVertex3f(-_sizeX,-_sizeY,-_sizeZ);
				glVertex3f(_sizeX,-_sizeY,-_sizeZ);
				glVertex3f(_sizeX,-_sizeY,-_sizeZ);
				glVertex3f(_sizeX,-_sizeY,_sizeZ);
				glVertex3f(_sizeX,-_sizeY,_sizeZ);
				glVertex3f(-_sizeX,-_sizeY,_sizeZ);
				glVertex3f(-_sizeX,-_sizeY,_sizeZ);
				glVertex3f(-_sizeX,-_sizeY,-_sizeZ);

				glVertex3f(-_sizeX,_sizeY,-_sizeZ);
				glVertex3f(_sizeX,_sizeY,-_sizeZ);
				glVertex3f(_sizeX,_sizeY,-_sizeZ);
				glVertex3f(_sizeX,_sizeY,_sizeZ);
				glVertex3f(_sizeX,_sizeY,_sizeZ);
				glVertex3f(-_sizeX,_sizeY,_sizeZ);
				glVertex3f(-_sizeX,_sizeY,_sizeZ);
				glVertex3f(-_sizeX,_sizeY,-_sizeZ);

				glVertex3f(-_sizeX,-_sizeY,-_sizeZ);
				glVertex3f(-_sizeX,_sizeY,-_sizeZ);

				glVertex3f(_sizeX,-_sizeY,-_sizeZ);
				glVertex3f(_sizeX,_sizeY,-_sizeZ);

				glVertex3f(_sizeX,-_sizeY,_sizeZ);
				glVertex3f(_sizeX,_sizeY,_sizeZ);

				glVertex3f(-_sizeX,-_sizeY,_sizeZ);
				glVertex3f(-_sizeX,_sizeY,_sizeZ);
			glEnd();
		}
		else
		{
			for(int i=1; i<100; ++i)
			{
				glColor4f(1.0f,0.0f,0.0f, 1.f);
				float _sizeX = (float)i, _sizeY = 0, _sizeZ = (float)i;
				glBegin(GL_LINES);
					glVertex3f(-_sizeX,-_sizeY,-_sizeZ);
					glVertex3f(_sizeX,-_sizeY,-_sizeZ);
					glVertex3f(_sizeX,-_sizeY,-_sizeZ);
					glVertex3f(_sizeX,-_sizeY,_sizeZ);
					glVertex3f(_sizeX,-_sizeY,_sizeZ);
					glVertex3f(-_sizeX,-_sizeY,_sizeZ);
					glVertex3f(-_sizeX,-_sizeY,_sizeZ);
					glVertex3f(-_sizeX,-_sizeY,-_sizeZ);
				glEnd();
			}
		}


		glPopMatrix();


    }

	for(unsigned int i=0; i<gManager->getNbControllers(); ++i)
	{
		NxController* ctrl = gManager->getController(i);
		NxExtendedVec3 vec = ctrl->getPosition();

		glPushMatrix();
		glTranslated(vec.x, vec.y, vec.z);
		glColor4f(1.0f,1.0f,0.0f, 1.f);

		float _sizeX = 1, _sizeY = 3, _sizeZ = 1;
		glBegin(GL_LINES);
			glVertex3f(-_sizeX,-_sizeY,-_sizeZ);
			glVertex3f(_sizeX,-_sizeY,-_sizeZ);
			glVertex3f(_sizeX,-_sizeY,-_sizeZ);
			glVertex3f(_sizeX,-_sizeY,_sizeZ);
			glVertex3f(_sizeX,-_sizeY,_sizeZ);
			glVertex3f(-_sizeX,-_sizeY,_sizeZ);
			glVertex3f(-_sizeX,-_sizeY,_sizeZ);
			glVertex3f(-_sizeX,-_sizeY,-_sizeZ);

			glVertex3f(-_sizeX,_sizeY,-_sizeZ);
			glVertex3f(_sizeX,_sizeY,-_sizeZ);
			glVertex3f(_sizeX,_sizeY,-_sizeZ);
			glVertex3f(_sizeX,_sizeY,_sizeZ);
			glVertex3f(_sizeX,_sizeY,_sizeZ);
			glVertex3f(-_sizeX,_sizeY,_sizeZ);
			glVertex3f(-_sizeX,_sizeY,_sizeZ);
			glVertex3f(-_sizeX,_sizeY,-_sizeZ);

			glVertex3f(-_sizeX,-_sizeY,-_sizeZ);
			glVertex3f(-_sizeX,_sizeY,-_sizeZ);

			glVertex3f(_sizeX,-_sizeY,-_sizeZ);
			glVertex3f(_sizeX,_sizeY,-_sizeZ);

			glVertex3f(_sizeX,-_sizeY,_sizeZ);
			glVertex3f(_sizeX,_sizeY,_sizeZ);

			glVertex3f(-_sizeX,-_sizeY,_sizeZ);
			glVertex3f(-_sizeX,_sizeY,_sizeZ);
		glEnd();

		glPopMatrix();
	}


	glEnable(GL_DEPTH_TEST);
	glEnable(GL_TEXTURE_2D);
}