Просмотр исходного кода

Fixed projection matrix not being set correctly in the renderer, sped up returning entities from 3d physics collisions

Ivan Safrin 12 лет назад
Родитель
Сommit
bf46667536

+ 1 - 1
Core/Contents/Source/PolyGLRenderer.cpp

@@ -225,7 +225,7 @@ void OpenGLRenderer::resetViewport() {
 	glViewport(0, 0, viewportWidth, viewportHeight);
 	glScissor(0, 0, viewportWidth, viewportHeight);
 	glMatrixMode(GL_MODELVIEW);	
-
+	glGetDoublev( GL_PROJECTION_MATRIX, sceneProjectionMatrix);
 }
 
 Vector3 OpenGLRenderer::Unproject(Number x, Number y) {

+ 2 - 8
Modules/Contents/3DPhysics/Source/PolyCollisionScene.cpp

@@ -153,8 +153,7 @@ RayTestResult CollisionScene::getFirstEntityInRay(const Vector3 &origin,  const
 	btVector3 toVec(dest.x, dest.y, dest.z);
 	
 	btCollisionWorld::ClosestRayResultCallback cb(fromVec, toVec);
-	world->rayTest (fromVec, toVec, cb);
-	
+	world->rayTest (fromVec, toVec, cb);	
 	
 	if (cb.hasHit ()) {
 		CollisionSceneEntity *retEnt = getCollisionEntityByObject(cb.m_collisionObject);
@@ -170,12 +169,7 @@ RayTestResult CollisionScene::getFirstEntityInRay(const Vector3 &origin,  const
 }
 
 CollisionSceneEntity *CollisionScene::getCollisionEntityByObject(btCollisionObject *collisionObject) {
-	for(int i=0; i <collisionChildren.size(); i++) {
-		if(collisionChildren[i]->collisionObject == collisionObject) {
-			return collisionChildren[i];
-		}
-	}
-	return NULL;
+	return (CollisionSceneEntity*)collisionObject->getUserPointer();
 }
 
 

+ 3 - 1
Modules/Contents/3DPhysics/Source/PolyCollisionSceneEntity.cpp

@@ -73,7 +73,9 @@ CollisionSceneEntity::CollisionSceneEntity(SceneEntity *entity, int type, bool c
 	
 	if(shape) {
 		collisionObject->setCollisionShape(shape);
-	}	
+	}
+	
+	collisionObject->setUserPointer((void*)this);
 	
 //	if(type == SHAPE_MESH) {		
 //		concaveShape = dynamic_cast<btConcaveShape*>(shape);

+ 1 - 0
Modules/Contents/3DPhysics/Source/PolyPhysicsSceneEntity.cpp

@@ -216,6 +216,7 @@ PhysicsSceneEntity::PhysicsSceneEntity(SceneEntity *entity, int type, Number mas
 //		rigidBody->setActivationState(ISLAND_SLEEPING);		
 		rigidBody->setFriction(friction);
 		rigidBody->setRestitution(restitution);
+		rigidBody->setUserPointer((void*)this);
 	}
 }