Skip to content

Commit

Permalink
A Add dummy methods to morph/skin tangents
Browse files Browse the repository at this point in the history
  • Loading branch information
Romain Gilliotte committed Jun 7, 2012
1 parent b29070f commit e11eef5
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package aerys.minko.render.shader.part.animation
{
import aerys.minko.render.shader.Shader;
import aerys.minko.render.shader.SFloat;
import aerys.minko.render.shader.Shader;
import aerys.minko.render.shader.part.ShaderPart;
import aerys.minko.type.stream.format.VertexComponent;

/**
* The shader part to handle morphing vertex animations.
* @author Romain Gilliotte
*
*/
public class MorphingShaderPart extends ShaderPart
{
Expand All @@ -27,5 +26,9 @@ package aerys.minko.render.shader.part.animation
return getVertexAttribute(VertexComponent.NORMAL);
}

public function getMorphedTangent() : SFloat
{
return getVertexAttribute(VertexComponent.TANGENT);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package aerys.minko.render.shader.part.animation
{
import aerys.minko.render.shader.Shader;
import aerys.minko.render.shader.SFloat;
import aerys.minko.render.shader.Shader;
import aerys.minko.render.shader.part.ShaderPart;
import aerys.minko.type.animation.SkinningMethod;
import aerys.minko.type.stream.format.VertexComponent;
Expand Down Expand Up @@ -60,6 +60,26 @@ package aerys.minko.render.shader.part.animation
}
}

public function skinTangent(inTangent : SFloat) : SFloat
{
var skinningMethod : uint = uint(meshBindings.getConstant('skinningMethod'));

switch (skinningMethod)
{
case SkinningMethod.MATRIX:
return matrixSkinTangent(inTangent);

case SkinningMethod.DUAL_QUATERNION:
return dualQuaternionSkinTangent(inTangent);

case SkinningMethod.DUAL_QUATERNION_SCALE:
return dualQuaternionScaleSkinTangent(inTangent);

default :
throw new Error('Unknown animation method.');
}
}

private function matrixSkinPosition(inVertexPosition : SFloat) : SFloat
{
var numBones : uint = uint(meshBindings.getConstant('skinningNumBones'));
Expand Down Expand Up @@ -167,6 +187,10 @@ package aerys.minko.render.shader.part.animation
return outVertexNormal;
}

private function matrixSkinTangent(inTangent:SFloat):SFloat
{
return inTangent;
}

private function dualQuaternionSkinPosition(inPosition : SFloat) : SFloat
{
Expand Down Expand Up @@ -338,6 +362,10 @@ package aerys.minko.render.shader.part.animation
return normalize(outNormal);
}

private function dualQuaternionSkinTangent(inTangent:SFloat):SFloat
{
return inTangent;
}

private function dualQuaternionScaleSkinPosition(inPosition : SFloat) : SFloat
{
Expand All @@ -348,6 +376,13 @@ package aerys.minko.render.shader.part.animation
{
throw new Error("This feature is still to be implemented. Use DualQuaternion of Matrix instead.");
}

private function dualQuaternionScaleSkinTangent(inTangent:SFloat):SFloat
{
throw new Error("This feature is still to be implemented. Use DualQuaternion of Matrix instead.");
}



}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,5 +53,20 @@ package aerys.minko.render.shader.part.animation

return vertexNormal;
}

public function getAnimatedVertexTangent() : SFloat
{
var vertexTangent : SFloat;

if (meshBindings.propertyExists('morphingEnabled'))
vertexTangent = _morphing.getMorphedTangent();
else
vertexTangent = getVertexAttribute(VertexComponent.TANGENT);

if (meshBindings.propertyExists('skinningMethod'))
vertexTangent = _skinning.skinTangent(vertexTangent);

return vertexTangent;
}
}
}

0 comments on commit e11eef5

Please sign in to comment.