Quellcode durchsuchen

Fixed 3D physics entity enabling parameter, frustum culling fixes, made default materials take 6 point lights by default

Ivan Safrin vor 11 Jahren
Ursprung
Commit
8654b57335

BIN
Assets/Default asset pack/default.pak


+ 7 - 7
Assets/Default asset pack/default/default.mat

@@ -1,27 +1,27 @@
 <?xml version="1.0" ?>
 <?xml version="1.0" ?>
 <polycode>	
 <polycode>	
 	<shaders>		
 	<shaders>		
-		<shader type="glsl" name="DefaultShader" numPointLights="4" numSpotLights="2">		
+		<shader type="glsl" name="DefaultShader" numPointLights="6" numSpotLights="2">		
 			<vp source="default/DefaultShader.vert"/>
 			<vp source="default/DefaultShader.vert"/>
 			<fp source="default/DefaultShader.frag"/>
 			<fp source="default/DefaultShader.frag"/>
 		</shader>	
 		</shader>	
-		<shader type="glsl" name="DefaultShaderNoTexture" numPointLights="4" numSpotLights="2">	
+		<shader type="glsl" name="DefaultShaderNoTexture" numPointLights="6" numSpotLights="2">	
 			<vp source="default/DefaultShader.vert"/>
 			<vp source="default/DefaultShader.vert"/>
 			<fp source="default/DefaultShaderNoTexture.frag"/>
 			<fp source="default/DefaultShaderNoTexture.frag"/>
 		</shader>
 		</shader>
-		<shader type="glsl" name="DefaultShaderShadows" numPointLights="4" numSpotLights="2">		
+		<shader type="glsl" name="DefaultShaderShadows" numPointLights="6" numSpotLights="2">		
 			<vp source="default/DefaultShaderShadows.vert"/>
 			<vp source="default/DefaultShaderShadows.vert"/>
 			<fp source="default/DefaultShaderShadows.frag"/>
 			<fp source="default/DefaultShaderShadows.frag"/>
 		</shader>		
 		</shader>		
-		<shader type="glsl" name="DefaultShaderVertex" numPointLights="4" numSpotLights="2">		
+		<shader type="glsl" name="DefaultShaderVertex" numPointLights="6" numSpotLights="2">		
 			<vp source="default/DefaultShaderVertex.vert"/>
 			<vp source="default/DefaultShaderVertex.vert"/>
 			<fp source="default/DefaultShaderVertex.frag"/>
 			<fp source="default/DefaultShaderVertex.frag"/>
 		</shader>			
 		</shader>			
-		<shader type="glsl" name="DefaultShaderVertexNoTexture" numPointLights="4" numSpotLights="2">		
+		<shader type="glsl" name="DefaultShaderVertexNoTexture" numPointLights="6" numSpotLights="2">		
 			<vp source="default/DefaultShaderVertex.vert"/>
 			<vp source="default/DefaultShaderVertex.vert"/>
 			<fp source="default/DefaultShaderVertexNoTexture.frag"/>
 			<fp source="default/DefaultShaderVertexNoTexture.frag"/>
 		</shader>
 		</shader>
-		<shader type="glsl" name="DefaultParticleShader" numPointLights="4" numSpotLights="2">		
+		<shader type="glsl" name="DefaultParticleShader" numPointLights="6" numSpotLights="2">		
 			<vp source="default/DefaultShader.vert"/>
 			<vp source="default/DefaultShader.vert"/>
 			<fp source="default/DefaultParticleShader.frag"/>
 			<fp source="default/DefaultParticleShader.frag"/>
 		</shader>															
 		</shader>															
@@ -41,7 +41,7 @@
 			<vp source="default/LightCube.vert"/>
 			<vp source="default/LightCube.vert"/>
 			<fp source="default/SkyBox.frag"/>
 			<fp source="default/SkyBox.frag"/>
 		</shader>		
 		</shader>		
-		<shader type="glsl" name="NorColSpec" numPointLights="4" numSpotLights="2">		
+		<shader type="glsl" name="NorColSpec" numPointLights="6" numSpotLights="2">		
 			<vp source="default/NormalShader.vert"/>
 			<vp source="default/NormalShader.vert"/>
 			<fp source="default/NorColSpec.frag"/>
 			<fp source="default/NorColSpec.frag"/>
 		</shader>
 		</shader>

+ 3 - 0
Core/Contents/Source/PolyEntity.cpp

@@ -602,6 +602,9 @@ void Entity::recalculateAABB() {
     
     
     Matrix4 fullMatrix = getAnchorAdjustedMatrix();
     Matrix4 fullMatrix = getAnchorAdjustedMatrix();
     if(ignoreParentMatrix) {
     if(ignoreParentMatrix) {
+        if(matrixDirty) {
+            rebuildTransformMatrix();
+        }
         fullMatrix = transformMatrix;
         fullMatrix = transformMatrix;
     }
     }
     
     

+ 1 - 0
Core/Contents/Source/PolyScene.cpp

@@ -197,6 +197,7 @@ void Scene::setEntityVisibilityBool(Entity *entity, bool val) {
 
 
 void Scene::setEntityVisibility(Entity *entity, Camera *camera) {
 void Scene::setEntityVisibility(Entity *entity, Camera *camera) {
     if(camera->frustumCulling) {
     if(camera->frustumCulling) {
+        entity->recalculateAABB();
         entity->rendererVis = camera->isAABBInFrustum(entity->getWorldAABB());
         entity->rendererVis = camera->isAABBInFrustum(entity->getWorldAABB());
     } else {
     } else {
         entity->rendererVis = true;
         entity->rendererVis = true;

+ 4 - 0
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -215,6 +215,7 @@ CameraPreviewWindow::CameraPreviewWindow() : UIElement() {
     aspectCombo->addComboItem("16:9");
     aspectCombo->addComboItem("16:9");
     aspectCombo->addComboItem("16:10");
     aspectCombo->addComboItem("16:10");
     aspectCombo->addComboItem("4:3");
     aspectCombo->addComboItem("4:3");
+    aspectCombo->addComboItem("16:18");
     aspectCombo->addEventListener(this, UIEvent::CHANGE_EVENT);
     aspectCombo->addEventListener(this, UIEvent::CHANGE_EVENT);
     
     
     pinButton = new UIButton("Pin", 60);
     pinButton = new UIButton("Pin", 60);
@@ -280,6 +281,9 @@ void CameraPreviewWindow::handleEvent(Event *event) {
             case 2:
             case 2:
                 Resize(bBox.y * 1.3, bBox.y);
                 Resize(bBox.y * 1.3, bBox.y);
             break;
             break;
+            case 3:
+                Resize(bBox.y * 0.888, bBox.y);
+            break;
                 
                 
         }
         }
     }
     }

+ 3 - 1
Modules/Contents/3DPhysics/Include/PolyCollisionScene.h

@@ -109,8 +109,10 @@ struct CollisionResult {
 			CollisionEntity *getCollisionByScreenEntity(Entity *ent);
 			CollisionEntity *getCollisionByScreenEntity(Entity *ent);
 			CollisionResult testCollision(Entity *ent1, Entity *ent2);
 			CollisionResult testCollision(Entity *ent1, Entity *ent2);
 			CollisionResult testCollisionOnCollisionChild(CollisionEntity *cEnt1, CollisionEntity *cEnt2);				
 			CollisionResult testCollisionOnCollisionChild(CollisionEntity *cEnt1, CollisionEntity *cEnt2);				
-			CollisionResult testCollisionOnCollisionChild_Convex(CollisionEntity *cEnt1, CollisionEntity *cEnt2);	
+			CollisionResult testCollisionOnCollisionChild_Convex(CollisionEntity *cEnt1, CollisionEntity *cEnt2);
 		
 		
+            bool isColliding(Entity *ent1);
+        
 			virtual CollisionEntity *addCollisionChild(Entity *newEntity, int type=0, int group=1);
 			virtual CollisionEntity *addCollisionChild(Entity *newEntity, int type=0, int group=1);
 			CollisionEntity *trackCollision(Entity *newEntity, int type=0, int group=1);
 			CollisionEntity *trackCollision(Entity *newEntity, int type=0, int group=1);
 			void removeCollision(Entity *entity);
 			void removeCollision(Entity *entity);

+ 0 - 2
Modules/Contents/3DPhysics/Include/PolyPhysicsSceneEntity.h

@@ -117,8 +117,6 @@ namespace Polycode {
 		static const int SHAPE_CYLINDER = 8;
 		static const int SHAPE_CYLINDER = 8;
 
 
 		
 		
-		bool enabled;
-		
 		btRigidBody* rigidBody;
 		btRigidBody* rigidBody;
 		
 		
 	protected:
 	protected:

+ 21 - 0
Modules/Contents/3DPhysics/Source/PolyCollisionScene.cpp

@@ -94,6 +94,27 @@ CollisionEntity *CollisionScene::getCollisionByScreenEntity(Entity *ent) {
 
 
 }
 }
 
 
+bool CollisionScene::isColliding(Entity *ent1) {
+    CollisionEntity *cEnt1 = getCollisionByScreenEntity(ent1);
+    if(cEnt1) {
+        int numManifolds = world->getDispatcher()->getNumManifolds();
+        for (int i=0;i<numManifolds;i++)
+        {
+            btPersistentManifold* contactManifold = world->getDispatcher()->getManifoldByIndexInternal(i);
+          
+            btCollisionObject* obA = static_cast<btCollisionObject*>(contactManifold->getBody0());
+            btCollisionObject* obB = static_cast<btCollisionObject*>(contactManifold->getBody1());
+            
+            if(obA == cEnt1->collisionObject || obB == cEnt1->collisionObject) {
+                return true;
+            }
+        }
+    } else {
+        return false;
+    }
+    return false;
+}
+
 CollisionResult CollisionScene::testCollisionOnCollisionChild_Convex(CollisionEntity *cEnt1, CollisionEntity *cEnt2) {
 CollisionResult CollisionScene::testCollisionOnCollisionChild_Convex(CollisionEntity *cEnt1, CollisionEntity *cEnt2) {
 	CollisionResult result;
 	CollisionResult result;
 	result.collided = false;
 	result.collided = false;

+ 2 - 1
Modules/Contents/3DPhysics/Source/PolyPhysicsScene.cpp

@@ -145,8 +145,9 @@ void PhysicsScene::processWorldCollisions() {
 void PhysicsScene::Update() {
 void PhysicsScene::Update() {
 	if(!pausePhysics) {
 	if(!pausePhysics) {
 	for(int i=0; i < physicsChildren.size(); i++) {
 	for(int i=0; i < physicsChildren.size(); i++) {
-//		if(physicsChildren[i]->enabled)
+		if(physicsChildren[i]->enabled) {
 			physicsChildren[i]->Update();
 			physicsChildren[i]->Update();
+        }
 	}
 	}
 	
 	
 	
 	

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

@@ -182,7 +182,7 @@ PhysicsCharacter::~PhysicsCharacter() {
 }
 }
 
 
 PhysicsEntity::PhysicsEntity(Entity *entity, int type, Number mass, Number friction, Number restitution, bool compoundChildren) : CollisionEntity(entity, type, compoundChildren) {
 PhysicsEntity::PhysicsEntity(Entity *entity, int type, Number mass, Number friction, Number restitution, bool compoundChildren) : CollisionEntity(entity, type, compoundChildren) {
-
+    enabled = true;
 	this->mass = mass;
 	this->mass = mass;
 	btVector3 localInertia(0,0,0);
 	btVector3 localInertia(0,0,0);
 	Vector3 pos = entity->getPosition();	
 	Vector3 pos = entity->getPosition();