[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49311] trunk/blender/intern/iksolver/ intern: IK's were converting double -> float -> double's in a few places, since precision is important and doubles are used a lot here anyway.
Campbell Barton
ideasman42 at gmail.com
Sat Jul 28 00:27:08 CEST 2012
Revision: 49311
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49311
Author: campbellbarton
Date: 2012-07-27 22:27:06 +0000 (Fri, 27 Jul 2012)
Log Message:
-----------
IK's were converting double -> float -> double's in a few places, since precision is important and doubles are used a lot here anyway. just use doubles, also quiet some double promotion warnings.
Modified Paths:
--------------
trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp
trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.h
trunk/blender/intern/iksolver/intern/IK_QSegment.cpp
trunk/blender/intern/iksolver/intern/IK_QSegment.h
trunk/blender/intern/iksolver/intern/IK_QTask.h
trunk/blender/intern/iksolver/intern/IK_Solver.cpp
Modified: trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp 2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp 2012-07-27 22:27:06 UTC (rev 49311)
@@ -46,18 +46,18 @@
MT_Scalar IK_QJacobianSolver::ComputeScale()
{
std::vector<IK_QSegment*>::iterator seg;
- float length = 0.0f;
+ MT_Scalar length = 0.0f;
for (seg = m_segments.begin(); seg != m_segments.end(); seg++)
length += (*seg)->MaxExtension();
- if(length == 0.0f)
- return 1.0f;
+ if(length == 0.0)
+ return 1.0;
else
- return 1.0f/length;
+ return 1.0 / length;
}
-void IK_QJacobianSolver::Scale(float scale, std::list<IK_QTask*>& tasks)
+void IK_QJacobianSolver::Scale(MT_Scalar scale, std::list<IK_QTask*>& tasks)
{
std::list<IK_QTask*>::iterator task;
std::vector<IK_QSegment*>::iterator seg;
@@ -172,8 +172,8 @@
static MT_Scalar safe_acos(MT_Scalar f)
{
// acos that does not return NaN with rounding errors
- if (f <= -1.0f) return MT_PI;
- else if (f >= 1.0f) return 0.0;
+ if (f <= -1.0) return MT_PI;
+ else if (f >= 1.0) return 0.0;
else return acos(f);
}
@@ -245,7 +245,7 @@
// we compute the pole angle that to rotate towards the target
m_poleangle = angle(mat[1], polemat[1]);
- if(rootz.dot(mat[1]*cos(m_poleangle) + mat[0]*sin(m_poleangle)) > 0.0f)
+ if(rootz.dot(mat[1]*cos(m_poleangle) + mat[0]*sin(m_poleangle)) > 0.0)
m_poleangle = -m_poleangle;
// solve again, with the pole angle we just computed
Modified: trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.h
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.h 2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.h 2012-07-27 22:27:06 UTC (rev 49311)
@@ -77,7 +77,7 @@
void ConstrainPoleVector(IK_QSegment *root, std::list<IK_QTask*>& tasks);
MT_Scalar ComputeScale();
- void Scale(float scale, std::list<IK_QTask*>& tasks);
+ void Scale(MT_Scalar scale, std::list<IK_QTask*>& tasks);
private:
Modified: trunk/blender/intern/iksolver/intern/IK_QSegment.cpp
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_QSegment.cpp 2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_QSegment.cpp 2012-07-27 22:27:06 UTC (rev 49311)
@@ -75,9 +75,9 @@
static MT_Scalar safe_acos(MT_Scalar f)
{
- if (f <= -1.0f)
+ if (f <= -1.0)
return MT_PI;
- else if (f >= 1.0f)
+ else if (f >= 1.0)
return 0.0;
else
return acos(f);
@@ -345,7 +345,7 @@
m_basis = m_rest_basis.inverse() * mat * m_rest_basis * m_basis;
}
-void IK_QSegment::Scale(float scale)
+void IK_QSegment::Scale(MT_Scalar scale)
{
m_start *= scale;
m_translation *= scale;
@@ -1035,7 +1035,7 @@
m_limit[axis]= true;
}
-void IK_QTranslateSegment::Scale(float scale)
+void IK_QTranslateSegment::Scale(MT_Scalar scale)
{
int i;
Modified: trunk/blender/intern/iksolver/intern/IK_QSegment.h
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_QSegment.h 2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_QSegment.h 2012-07-27 22:27:06 UTC (rev 49311)
@@ -170,7 +170,7 @@
void Reset();
// scale
- virtual void Scale(float scale);
+ virtual void Scale(MT_Scalar scale);
protected:
@@ -338,7 +338,7 @@
void SetWeight(int axis, MT_Scalar weight);
void SetLimit(int axis, MT_Scalar lmin, MT_Scalar lmax);
- void Scale(float scale);
+ void Scale(MT_Scalar scale);
private:
int m_axis[3];
Modified: trunk/blender/intern/iksolver/intern/IK_QTask.h
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_QTask.h 2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_QTask.h 2012-07-27 22:27:06 UTC (rev 49311)
@@ -78,7 +78,7 @@
virtual bool PositionTask() const { return false; }
- virtual void Scale(float) {}
+ virtual void Scale(MT_Scalar) {}
protected:
int m_id;
@@ -103,7 +103,7 @@
MT_Scalar Distance() const;
bool PositionTask() const { return true; }
- void Scale(float scale) { m_goal *= scale; m_clamp_length *= scale; }
+ void Scale(MT_Scalar scale) { m_goal *= scale; m_clamp_length *= scale; }
private:
MT_Vector3 m_goal;
@@ -141,7 +141,7 @@
MT_Scalar Distance() const;
- void Scale(float scale) { m_goal_center *= scale; m_distance *= scale; }
+ void Scale(MT_Scalar scale) { m_goal_center *= scale; m_distance *= scale; }
private:
MT_Scalar ComputeTotalMass(const IK_QSegment *segment);
Modified: trunk/blender/intern/iksolver/intern/IK_Solver.cpp
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_Solver.cpp 2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_Solver.cpp 2012-07-27 22:27:06 UTC (rev 49311)
@@ -197,14 +197,14 @@
void IK_SetStiffness(IK_Segment *seg, IK_SegmentAxis axis, float stiffness)
{
- if (stiffness < 0.0)
+ if (stiffness < 0.0f)
return;
- if (stiffness > 0.999)
- stiffness = 0.999;
+ if (stiffness > 0.999f)
+ stiffness = 0.999f;
IK_QSegment *qseg = (IK_QSegment*)seg;
- MT_Scalar weight = 1.0-stiffness;
+ MT_Scalar weight = 1.0f - stiffness;
if (axis >= IK_TRANS_X) {
if(!qseg->Translational()) {
More information about the Bf-blender-cvs
mailing list