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

Made FBO textures obey global texture filtering settings, some Skeleton bugfixes and helper methods

Ivan Safrin 10 лет назад
Родитель
Сommit
0f362f25d7

+ 3 - 0
Core/Contents/Include/PolyBone.h

@@ -141,6 +141,9 @@ namespace Polycode {
         
             void rebuildFinalMatrix();
             Matrix4 buildFinalMatrix() const;
+        
+        
+            void intializeBone(const Vector3 &basePosition, const Vector3 &baseScale, const Quaternion &baseRotation, const Vector3 &restPosition, const Vector3 &restScale, const Quaternion &restRotation);
 		
 			/**
 			* Id of the bone.

+ 5 - 1
Core/Contents/Include/PolySkeleton.h

@@ -221,7 +221,11 @@ namespace Polycode {
 			*/
 			Bone *getBone(unsigned int index) const;
 		
-		
+            void addBone(Bone *bone);
+            void removeBone(Bone *bone);
+        
+            unsigned int getBoneIndexByBone(Bone *bone);
+        
 		protected:
 		
 			Entity *bonesEntity;

+ 28 - 0
Core/Contents/Source/PolyBone.cpp

@@ -71,6 +71,34 @@ Matrix4 Bone::getBoneMatrix() const {
 	}
 }
 
+void Bone::intializeBone(const Vector3 &basePosition, const Vector3 &baseScale, const Quaternion &baseRotation, const Vector3 &restPosition, const Vector3 &restScale, const Quaternion &restRotation) {
+    
+    this->baseRotation = baseRotation;
+    this->baseScale = baseScale;
+    this->basePosition = basePosition;
+    
+    setPosition(basePosition);
+    setRotationByQuaternion(baseRotation);
+    setScale(baseScale);
+    rebuildTransformMatrix();
+    
+    setBaseMatrix(getTransformMatrix());
+    setBoneMatrix(getTransformMatrix());
+    
+    Matrix4 restRotationMatrix = restRotation.createMatrix();
+
+    Matrix4 restPositionMatrix;
+    restPositionMatrix.identity();
+    restPositionMatrix.setPosition(restPosition.x, restPosition.y, restPosition.z);
+
+    Matrix4 restScaleMatrix;
+    restScaleMatrix.identity();
+    restScaleMatrix.setScale(restScale);
+    
+    
+    setRestMatrix(restScaleMatrix*restRotationMatrix*restPositionMatrix);
+}
+
 Matrix4 Bone::getFinalMatrix() const {
     return finalMatrix;
 }

+ 14 - 4
Core/Contents/Source/PolyGLRenderer.cpp

@@ -699,8 +699,13 @@ void OpenGLRenderer::createRenderTextures(Texture **colorBuffer, Texture **depth
 	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBufferID);     	
 	glGenTextures(1,&colorTexture);
 	glBindTexture(GL_TEXTURE_2D,colorTexture);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+    if(textureFilteringMode == TEX_FILTERING_NEAREST) {
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    } else {
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+    }
 	glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 	glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);	
 	
@@ -729,8 +734,13 @@ void OpenGLRenderer::createRenderTextures(Texture **colorBuffer, Texture **depth
 		glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBufferID);     
 		glGenTextures(1,&depthTexture);
 		glBindTexture(GL_TEXTURE_2D,depthTexture);
-		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+        if(textureFilteringMode == TEX_FILTERING_NEAREST) {
+            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+        } else {
+            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+        }
 		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
 		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
 

+ 29 - 4
Core/Contents/Source/PolySkeleton.cpp

@@ -38,10 +38,17 @@ Skeleton *Skeleton::BlankSkeleton() {
 
 Skeleton::Skeleton(const String& fileName) : Entity() {
     baseAnimation = NULL;
+    bonesEntity	= new Entity();
+    bonesEntity->visible = false;
+    addChild(bonesEntity);        
 	loadSkeleton(fileName);
 }
 
 Skeleton::Skeleton() {
+    baseAnimation = NULL;
+    bonesEntity	= new Entity();
+    bonesEntity->visible = false;
+    addChild(bonesEntity);
 }
 
 Skeleton::~Skeleton() {
@@ -146,16 +153,34 @@ void Skeleton::Update() {
     }
 }
 
+void Skeleton::addBone(Bone *bone) {
+    bones.push_back(bone);
+}
+
+void Skeleton::removeBone(Bone *bone) {
+    for(int i=0; i < bones.size(); i++) {
+        if(bones[i] == bone) {
+            bones.erase(bones.begin()+i);
+            return;
+        }
+    }
+}
+
+unsigned int Skeleton::getBoneIndexByBone(Bone *bone) {
+    for(int i=0; i < bones.size(); i++) {
+        if(bones[i] == bone) {
+            return i;
+        }
+    }
+    return 0;
+}
+
 void Skeleton::loadSkeleton(const String& fileName) {
 	OSFILE *inFile = OSBasics::open(fileName.c_str(), "rb");
 	if(!inFile) {
 		return;
 	}
 	
-	bonesEntity	= new Entity();
-	bonesEntity->visible = false;
-	addChild(bonesEntity);
-	
 	unsigned int numBones;
 	float t[3],rq[4],s[3];
 	

+ 16 - 16
Examples/C++/Build/Darwin/PolycodeExample.xcodeproj/xcuserdata/ivansafrin.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -7,62 +7,62 @@
 		<key>2DPhysics_Basic.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>11</integer>
+			<integer>12</integer>
 		</dict>
 		<key>2DPhysics_CollisionOnly.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>14</integer>
+			<integer>15</integer>
 		</dict>
 		<key>2DPhysics_Contacts.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>12</integer>
+			<integer>13</integer>
 		</dict>
 		<key>2DPhysics_Joints.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>13</integer>
+			<integer>14</integer>
 		</dict>
 		<key>2DPhysics_PointCollision.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>15</integer>
+			<integer>16</integer>
 		</dict>
 		<key>3DBasics.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>7</integer>
+			<integer>8</integer>
 		</dict>
 		<key>3DPhysics_Basic.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>18</integer>
+			<integer>19</integer>
 		</dict>
 		<key>3DPhysics_Character.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>20</integer>
+			<integer>21</integer>
 		</dict>
 		<key>3DPhysics_CollisionOnly.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>16</integer>
+			<integer>17</integer>
 		</dict>
 		<key>3DPhysics_Contacts.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>19</integer>
+			<integer>20</integer>
 		</dict>
 		<key>3DPhysics_RayTest.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>17</integer>
+			<integer>18</integer>
 		</dict>
 		<key>3DPhysics_Vehicle.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>21</integer>
+			<integer>22</integer>
 		</dict>
 		<key>BasicImage.xcscheme</key>
 		<dict>
@@ -87,7 +87,7 @@
 		<key>MaterialsAndLights.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>8</integer>
+			<integer>9</integer>
 		</dict>
 		<key>MouseInput.xcscheme</key>
 		<dict>
@@ -97,12 +97,12 @@
 		<key>ParticleSystems.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>16</integer>
+			<integer>7</integer>
 		</dict>
 		<key>PlayingSounds.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>10</integer>
+			<integer>11</integer>
 		</dict>
 		<key>PositionalSounds.xcscheme</key>
 		<dict>
@@ -122,7 +122,7 @@
 		<key>SkeletalAnimation.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>9</integer>
+			<integer>10</integer>
 		</dict>
 		<key>Transforms.xcscheme</key>
 		<dict>