[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12479] branches/cloth/blender: svn merge -r 12419:12478 https://svn.blender.org/svnroot/bf-blender/trunk/ blender -- old cloth files with activated modifier won't work, please deactivate modifier before
Daniel Genrich
daniel.genrich at gmx.net
Sun Nov 4 23:20:02 CET 2007
Revision: 12479
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12479
Author: genscher
Date: 2007-11-04 23:20:02 +0100 (Sun, 04 Nov 2007)
Log Message:
-----------
svn merge -r 12419:12478 https://svn.blender.org/svnroot/bf-blender/trunk/blender -- old cloth files with activated modifier won't work, please deactivate modifier before
Modified Paths:
--------------
branches/cloth/blender/intern/bmfont/intern/BMF_BitmapFont.cpp
branches/cloth/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp
branches/cloth/blender/intern/iksolver/intern/IK_QJacobianSolver.h
branches/cloth/blender/intern/iksolver/intern/IK_QSegment.cpp
branches/cloth/blender/intern/iksolver/intern/IK_QSegment.h
branches/cloth/blender/intern/iksolver/intern/IK_QTask.h
branches/cloth/blender/intern/iksolver/intern/IK_Solver.cpp
branches/cloth/blender/intern/opennl/extern/ONL_opennl.h
branches/cloth/blender/intern/opennl/intern/opennl.c
branches/cloth/blender/source/blender/blenkernel/BKE_DerivedMesh.h
branches/cloth/blender/source/blender/blenkernel/BKE_bad_level_calls.h
branches/cloth/blender/source/blender/blenkernel/BKE_image.h
branches/cloth/blender/source/blender/blenkernel/BKE_mesh.h
branches/cloth/blender/source/blender/blenkernel/BKE_node.h
branches/cloth/blender/source/blender/blenkernel/BKE_texture.h
branches/cloth/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c
branches/cloth/blender/source/blender/blenkernel/intern/DerivedMesh.c
branches/cloth/blender/source/blender/blenkernel/intern/armature.c
branches/cloth/blender/source/blender/blenkernel/intern/constraint.c
branches/cloth/blender/source/blender/blenkernel/intern/image.c
branches/cloth/blender/source/blender/blenkernel/intern/ipo.c
branches/cloth/blender/source/blender/blenkernel/intern/mesh.c
branches/cloth/blender/source/blender/blenkernel/intern/modifier.c
branches/cloth/blender/source/blender/blenkernel/intern/node.c
branches/cloth/blender/source/blender/blenkernel/intern/object.c
branches/cloth/blender/source/blender/blenkernel/intern/softbody.c
branches/cloth/blender/source/blender/blenkernel/intern/texture.c
branches/cloth/blender/source/blender/blenlib/BLI_arithb.h
branches/cloth/blender/source/blender/blenlib/BLI_blenlib.h
branches/cloth/blender/source/blender/blenlib/intern/arithb.c
branches/cloth/blender/source/blender/blenlib/intern/util.c
branches/cloth/blender/source/blender/blenloader/intern/readfile.c
branches/cloth/blender/source/blender/blenloader/intern/writefile.c
branches/cloth/blender/source/blender/blenpluginapi/iff.h
branches/cloth/blender/source/blender/imbuf/IMB_imbuf.h
branches/cloth/blender/source/blender/imbuf/intern/imageprocess.c
branches/cloth/blender/source/blender/imbuf/intern/rectop.c
branches/cloth/blender/source/blender/include/BIF_meshlaplacian.h
branches/cloth/blender/source/blender/include/BSE_trans_types.h
branches/cloth/blender/source/blender/include/blendef.h
branches/cloth/blender/source/blender/include/transform.h
branches/cloth/blender/source/blender/makesdna/DNA_armature_types.h
branches/cloth/blender/source/blender/makesdna/DNA_curve_types.h
branches/cloth/blender/source/blender/makesdna/DNA_ipo_types.h
branches/cloth/blender/source/blender/makesdna/DNA_modifier_types.h
branches/cloth/blender/source/blender/makesdna/DNA_node_types.h
branches/cloth/blender/source/blender/makesdna/DNA_texture_types.h
branches/cloth/blender/source/blender/makesdna/DNA_userdef_types.h
branches/cloth/blender/source/blender/nodes/CMP_node.h
branches/cloth/blender/source/blender/render/intern/source/pipeline.c
branches/cloth/blender/source/blender/render/intern/source/rayshade.c
branches/cloth/blender/source/blender/src/buttons_editing.c
branches/cloth/blender/source/blender/src/buttons_object.c
branches/cloth/blender/source/blender/src/drawipo.c
branches/cloth/blender/source/blender/src/drawnode.c
branches/cloth/blender/source/blender/src/editarmature.c
branches/cloth/blender/source/blender/src/editcurve.c
branches/cloth/blender/source/blender/src/editipo.c
branches/cloth/blender/source/blender/src/editmesh_add.c
branches/cloth/blender/source/blender/src/editmesh_lib.c
branches/cloth/blender/source/blender/src/editseq.c
branches/cloth/blender/source/blender/src/ghostwinlay.c
branches/cloth/blender/source/blender/src/meshlaplacian.c
branches/cloth/blender/source/blender/src/parametrizer.c
branches/cloth/blender/source/blender/src/space.c
branches/cloth/blender/source/blender/src/transform_conversions.c
branches/cloth/blender/source/blender/src/transform_generics.c
branches/cloth/blender/source/blender/src/usiblender.c
branches/cloth/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
Added Paths:
-----------
branches/cloth/blender/source/blender/nodes/intern/CMP_nodes/CMP_crop.c
Modified: branches/cloth/blender/intern/bmfont/intern/BMF_BitmapFont.cpp
===================================================================
--- branches/cloth/blender/intern/bmfont/intern/BMF_BitmapFont.cpp 2007-11-04 22:11:00 UTC (rev 12478)
+++ branches/cloth/blender/intern/bmfont/intern/BMF_BitmapFont.cpp 2007-11-04 22:20:02 UTC (rev 12479)
@@ -268,7 +268,7 @@
for (y = 0; y < cd.height; y++) {
unsigned char* chrRow = &m_fontData->bitmap_data[cd.data_offset + ((cd.width+7)/8)*y];
for (x = cd.xorig; x < cd.width; x++) {
- pixel = buf + 4 * (((posy + y) * w) + (posx + x));
+ pixel = buf + 4 * (((posy + y - cd.yorig) * w) + (posx + x));
if ((pixel < max) && (pixel > buf)) {
int byteIdx = x/8;
int bitIdx = 7 - (x%8);
Modified: branches/cloth/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp
===================================================================
--- branches/cloth/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp 2007-11-04 22:11:00 UTC (rev 12478)
+++ branches/cloth/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp 2007-11-04 22:20:02 UTC (rev 12479)
@@ -42,6 +42,36 @@
m_rootmatrix.setIdentity();
}
+MT_Scalar IK_QJacobianSolver::ComputeScale()
+{
+ std::vector<IK_QSegment*>::iterator seg;
+ float length = 0.0f;
+
+ for (seg = m_segments.begin(); seg != m_segments.end(); seg++)
+ length += (*seg)->MaxExtension();
+
+ if(length == 0.0f)
+ return 1.0f;
+ else
+ return 1.0f/length;
+}
+
+void IK_QJacobianSolver::Scale(float scale, std::list<IK_QTask*>& tasks)
+{
+ std::list<IK_QTask*>::iterator task;
+ std::vector<IK_QSegment*>::iterator seg;
+
+ for (task = tasks.begin(); task != tasks.end(); task++)
+ (*task)->Scale(scale);
+
+ for (seg = m_segments.begin(); seg != m_segments.end(); seg++)
+ (*seg)->Scale(scale);
+
+ m_rootmatrix.getOrigin() *= scale;
+ m_goal *= scale;
+ m_polegoal *= scale;
+}
+
void IK_QJacobianSolver::AddSegmentList(IK_QSegment *seg)
{
m_segments.push_back(seg);
@@ -293,9 +323,12 @@
const int max_iterations
)
{
+ float scale = ComputeScale();
bool solved = false;
//double dt = analyze_time();
+ Scale(scale, tasks);
+
ConstrainPoleVector(root, tasks);
root->UpdateTransform(m_rootmatrix);
@@ -346,15 +379,14 @@
if (norm < 1e-3) {
solved = true;
break;
- //analyze_add_run(iterations, analyze_time()-dt);
-
- return true;
}
}
if(m_poleconstraint)
root->PrependBasis(m_rootmatrix.getBasis());
+ Scale(1.0f/scale, tasks);
+
//analyze_add_run(max_iterations, analyze_time()-dt);
return solved;
Modified: branches/cloth/blender/intern/iksolver/intern/IK_QJacobianSolver.h
===================================================================
--- branches/cloth/blender/intern/iksolver/intern/IK_QJacobianSolver.h 2007-11-04 22:11:00 UTC (rev 12478)
+++ branches/cloth/blender/intern/iksolver/intern/IK_QJacobianSolver.h 2007-11-04 22:20:02 UTC (rev 12479)
@@ -75,6 +75,9 @@
bool UpdateAngles(MT_Scalar& norm);
void ConstrainPoleVector(IK_QSegment *root, std::list<IK_QTask*>& tasks);
+ MT_Scalar ComputeScale();
+ void Scale(float scale, std::list<IK_QTask*>& tasks);
+
private:
IK_QJacobian m_jacobian;
Modified: branches/cloth/blender/intern/iksolver/intern/IK_QSegment.cpp
===================================================================
--- branches/cloth/blender/intern/iksolver/intern/IK_QSegment.cpp 2007-11-04 22:11:00 UTC (rev 12478)
+++ branches/cloth/blender/intern/iksolver/intern/IK_QSegment.cpp 2007-11-04 22:20:02 UTC (rev 12479)
@@ -343,6 +343,16 @@
m_basis = m_rest_basis.inverse() * mat * m_rest_basis * m_basis;
}
+void IK_QSegment::Scale(float scale)
+{
+ m_start *= scale;
+ m_translation *= scale;
+ m_orig_translation *= scale;
+ m_global_start *= scale;
+ m_global_transform.getOrigin() *= scale;
+ m_max_extension *= scale;
+}
+
// IK_QSphericalSegment
IK_QSphericalSegment::IK_QSphericalSegment()
@@ -1026,3 +1036,17 @@
m_limit[axis]= true;
}
+void IK_QTranslateSegment::Scale(float scale)
+{
+ int i;
+
+ IK_QSegment::Scale(scale);
+
+ for (i = 0; i < 3; i++) {
+ m_min[0] *= scale;
+ m_max[1] *= scale;
+ }
+
+ m_new_translation *= scale;
+}
+
Modified: branches/cloth/blender/intern/iksolver/intern/IK_QSegment.h
===================================================================
--- branches/cloth/blender/intern/iksolver/intern/IK_QSegment.h 2007-11-04 22:11:00 UTC (rev 12478)
+++ branches/cloth/blender/intern/iksolver/intern/IK_QSegment.h 2007-11-04 22:20:02 UTC (rev 12479)
@@ -169,6 +169,9 @@
void PrependBasis(const MT_Matrix3x3& mat);
void Reset();
+ // scale
+ virtual void Scale(float scale);
+
protected:
// num_DoF: number of degrees of freedom
@@ -335,6 +338,8 @@
void SetWeight(int axis, MT_Scalar weight);
void SetLimit(int axis, MT_Scalar lmin, MT_Scalar lmax);
+ void Scale(float scale);
+
private:
int m_axis[3];
bool m_axis_enabled[3], m_limit[3];
Modified: branches/cloth/blender/intern/iksolver/intern/IK_QTask.h
===================================================================
--- branches/cloth/blender/intern/iksolver/intern/IK_QTask.h 2007-11-04 22:11:00 UTC (rev 12478)
+++ branches/cloth/blender/intern/iksolver/intern/IK_QTask.h 2007-11-04 22:20:02 UTC (rev 12479)
@@ -77,6 +77,8 @@
virtual bool PositionTask() const { return false; }
+ virtual void Scale(float scale) {}
+
protected:
int m_id;
int m_size;
@@ -100,6 +102,7 @@
MT_Scalar Distance() const;
bool PositionTask() const { return true; }
+ void Scale(float scale) { m_goal *= scale; m_clamp_length *= scale; }
private:
MT_Vector3 m_goal;
@@ -137,6 +140,8 @@
MT_Scalar Distance() const;
+ void Scale(float scale) { m_goal_center *= scale; m_distance *= scale; }
+
private:
MT_Scalar ComputeTotalMass(const IK_QSegment *segment);
MT_Vector3 ComputeCenter(const IK_QSegment *segment);
Modified: branches/cloth/blender/intern/iksolver/intern/IK_Solver.cpp
===================================================================
--- branches/cloth/blender/intern/iksolver/intern/IK_Solver.cpp 2007-11-04 22:11:00 UTC (rev 12478)
+++ branches/cloth/blender/intern/iksolver/intern/IK_Solver.cpp 2007-11-04 22:20:02 UTC (rev 12479)
@@ -41,7 +41,7 @@
class IK_QSolver {
public:
- IK_QSolver() {};
+ IK_QSolver() : root(NULL) {};
IK_QJacobianSolver solver;
IK_QSegment *root;
@@ -197,13 +197,12 @@
if (stiffness < 0.0)
return;
- if (stiffness > 0.99)
- stiffness = 0.99;
+ if (stiffness > 0.999)
+ stiffness = 0.999;
IK_QSegment *qseg = (IK_QSegment*)seg;
MT_Scalar weight = 1.0-stiffness;
-
if (axis >= IK_TRANS_X) {
if(!qseg->Translational())
if(qseg->Composite() && qseg->Composite()->Translational())
Modified: branches/cloth/blender/intern/opennl/extern/ONL_opennl.h
===================================================================
--- branches/cloth/blender/intern/opennl/extern/ONL_opennl.h 2007-11-04 22:11:00 UTC (rev 12478)
+++ branches/cloth/blender/intern/opennl/extern/ONL_opennl.h 2007-11-04 22:20:02 UTC (rev 12479)
@@ -79,21 +79,17 @@
#define NL_SYSTEM 0x0
#define NL_MATRIX 0x1
-#define NL_ROW 0x2
/* Solver Parameters */
-#define NL_SOLVER 0x100
-#define NL_NB_VARIABLES 0x101
-#define NL_LEAST_SQUARES 0x102
-#define NL_SYMMETRIC 0x106
-#define NL_ERROR 0x108
+#define NL_SOLVER 0x100
+#define NL_NB_VARIABLES 0x101
+#define NL_LEAST_SQUARES 0x102
+#define NL_SYMMETRIC 0x106
+#define NL_ERROR 0x108
+#define NL_NB_ROWS 0x110
+#define NL_NB_RIGHT_HAND_SIDES 0x112 /* 4 max */
-/* Row parameters */
-
-#define NL_RIGHT_HAND_SIDE 0x500
-#define NL_ROW_SCALING 0x501
-
/* Contexts */
NLContext nlNewContext(void);
@@ -106,9 +102,6 @@
void nlSolverParameterf(NLenum pname, NLfloat param);
void nlSolverParameteri(NLenum pname, NLint param);
-void nlRowParameterf(NLenum pname, NLfloat param);
-void nlRowParameteri(NLenum pname, NLint param);
-
void nlGetBooleanv(NLenum pname, NLboolean* params);
void nlGetFloatv(NLenum pname, NLfloat* params);
void nlGetIntergerv(NLenum pname, NLint* params);
@@ -119,8 +112,8 @@
/* Variables */
-void nlSetVariable(NLuint index, NLfloat value);
-NLfloat nlGetVariable(NLuint index);
+void nlSetVariable(NLuint rhsindex, NLuint index, NLfloat value);
+NLfloat nlGetVariable(NLuint rhsindex, NLuint index);
void nlLockVariable(NLuint index);
void nlUnlockVariable(NLuint index);
NLboolean nlVariableIsLocked(NLuint index);
@@ -129,15 +122,17 @@
void nlBegin(NLenum primitive);
void nlEnd(NLenum primitive);
-void nlCoefficient(NLuint index, NLfloat value);
-/* Setting random elements matrix/vector - not supported for
- least squares! */
+/* Setting elements in matrix/vector */
void nlMatrixAdd(NLuint row, NLuint col, NLfloat value);
-void nlRightHandSideAdd(NLuint index, NLfloat value);
-void nlRightHandSideSet(NLuint index, NLfloat value);
+void nlRightHandSideAdd(NLuint rhsindex, NLuint index, NLfloat value);
+void nlRightHandSideSet(NLuint rhsindex, NLuint index, NLfloat value);
+/* Multiply */
+
+void nlMatrixMultiply(NLfloat *x, NLfloat *y);
+
/* Solve */
void nlPrintMatrix(void);
Modified: branches/cloth/blender/intern/opennl/intern/opennl.c
===================================================================
--- branches/cloth/blender/intern/opennl/intern/opennl.c 2007-11-04 22:11:00 UTC (rev 12478)
+++ branches/cloth/blender/intern/opennl/intern/opennl.c 2007-11-04 22:20:02 UTC (rev 12479)
@@ -207,10 +207,6 @@
c->size++;
}
-static void __nlRowColumnZero(__NLRowColumn* c) {
- c->size = 0;
-}
-
static void __nlRowColumnClear(__NLRowColumn* c) {
c->size = 0;
c->capacity = 0;
@@ -432,13 +428,62 @@
}
}
+/* ****************** Routines for least squares ******************* */
+
+static void __nlSparseMatrix_square(
+ __NLSparseMatrix* AtA, __NLSparseMatrix *A
+) {
+ NLuint m = A->m;
+ NLuint n = A->n;
+ NLuint i, j0, j1;
+ __NLRowColumn *Ri = NULL;
+ __NLCoeff *c0 = NULL, *c1 = NULL;
+ float value;
+
+ __nlSparseMatrixConstruct(AtA, n, n, A->storage);
+
+ for(i=0; i<m; i++) {
+ Ri = &(A->row[i]);
+
+ for(j0=0; j0<Ri->size; j0++) {
+ c0 = &(Ri->coeff[j0]);
+ for(j1=0; j1<Ri->size; j1++) {
+ c1 = &(Ri->coeff[j1]);
+
+ value = c0->value*c1->value;
+ __nlSparseMatrixAdd(AtA, c0->index, c1->index, value);
+ }
+ }
+ }
+}
+
+static void __nlSparseMatrix_transpose_mult_rows(
+ __NLSparseMatrix* A, NLfloat* x, NLfloat* y
+) {
+ NLuint m = A->m;
+ NLuint n = A->n;
+ NLuint i,ij;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list