[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17198] branches/soc-2008-nicholasbishop/ source/blender/blenkernel/intern/multires.c: Preparing for a change in the way the TS matrix is calculated.
Nicholas Bishop
nicholasbishop at gmail.com
Sun Oct 26 20:42:29 CET 2008
Revision: 17198
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17198
Author: nicholasbishop
Date: 2008-10-26 20:42:29 +0100 (Sun, 26 Oct 2008)
Log Message:
-----------
Preparing for a change in the way the TS matrix is calculated. Removed the old fixed matrix entirely.
Modified Paths:
--------------
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c 2008-10-26 09:41:59 UTC (rev 17197)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c 2008-10-26 19:42:29 UTC (rev 17198)
@@ -56,28 +56,6 @@
#include <math.h>
#include <string.h>
-typedef struct MultiresDisplacer {
- struct MDisps *grid;
- struct MFace *face;
- float mat[3][3];
-
- /* For matrix calc */
- float mat_target[3];
- float mat_center[3];
- float (*mat_norms)[3];
-
- int spacing;
- int sidetot;
- int sidendx;
- int type;
- int invert;
- float (*orco)[3];
- struct MVert *subco;
- float weight;
-
- int x, y, ax, ay;
-} MultiresDisplacer;
-
void create_vert_face_map(ListBase **map, IndexNode **mem, const MFace *mface, const int totvert, const int totface)
{
int i,j;
@@ -181,6 +159,29 @@
}
}
+/* Returns 0 on success, 1 if the src's totvert doesn't match */
+int multiresModifier_reshape(MultiresModifierData *mmd, Object *dst, Object *src)
+{
+ Mesh *src_me = get_mesh(src);
+ DerivedMesh *mrdm = dst->derivedFinal;
+
+ if(mrdm && mrdm->getNumVerts(mrdm) == src_me->totvert) {
+ MVert *mvert = CDDM_get_verts(mrdm);
+ int i;
+
+ for(i = 0; i < src_me->totvert; ++i)
+ VecCopyf(mvert[i].co, src_me->mvert[i].co);
+ mrdm->needsFree = 1;
+ *MultiresDM_get_flags(mrdm) |= MULTIRES_DM_UPDATE_ALWAYS;
+ mrdm->release(mrdm);
+ dst->derivedFinal = NULL;
+
+ return 0;
+ }
+
+ return 1;
+}
+
static void Mat3FromColVecs(float mat[][3], float v1[3], float v2[3], float v3[3])
{
VecCopyf(mat[0], v1);
@@ -561,22 +562,37 @@
mmd->lvl = mmd->totlvl;
}
+typedef struct MultiresDisplacer {
+ struct MDisps *grid;
+ struct MFace *face;
+
+ /* For matrix calc */
+ float mat_target[3];
+ float mat_center[3];
+ float (*mat_norms)[3];
+
+ int spacing;
+ int sidetot;
+ int sidendx;
+ int type;
+ int invert;
+ float (*orco)[3];
+ struct MVert *subco;
+ float weight;
+
+ int x, y, ax, ay;
+} MultiresDisplacer;
+
static void multires_displacer_init(MultiresDisplacer *d, DerivedMesh *dm,
const int face_index, const int invert)
{
Mesh *me = MultiresDM_get_mesh(dm);
- float inv[3][3];
d->face = me->mface + face_index;
- /* Get the multires grid from customdata and calculate the TS matrix */
+ /* Get the multires grid from customdata */
d->grid = CustomData_get_layer(&me->fdata, CD_MDISPS);
if(d->grid)
d->grid += face_index;
- calc_face_ts_mat_dm(d->mat, MultiresDM_get_orco(dm), d->face);
- if(invert) {
- Mat3Inv(inv, d->mat);
- Mat3CpyMat3(d->mat, inv);
- }
calc_face_ts_partial(d->mat_center, d->mat_target, d->mat_norms, MultiresDM_get_orco(dm), d->face);
d->mat_norms = MultiresDM_get_vertnorm(dm);
@@ -768,29 +784,6 @@
}
}
-/* Returns 0 on success, 1 if the src's totvert doesn't match */
-int multiresModifier_reshape(MultiresModifierData *mmd, Object *dst, Object *src)
-{
- Mesh *src_me = get_mesh(src);
- DerivedMesh *mrdm = dst->derivedFinal;
-
- if(mrdm && mrdm->getNumVerts(mrdm) == src_me->totvert) {
- MVert *mvert = CDDM_get_verts(mrdm);
- int i;
-
- for(i = 0; i < src_me->totvert; ++i)
- VecCopyf(mvert[i].co, src_me->mvert[i].co);
- mrdm->needsFree = 1;
- *MultiresDM_get_flags(mrdm) |= MULTIRES_DM_UPDATE_ALWAYS;
- mrdm->release(mrdm);
- dst->derivedFinal = NULL;
-
- return 0;
- }
-
- return 1;
-}
-
static void multiresModifier_disp_run(DerivedMesh *dm, MVert *subco, int invert)
{
const int lvl = MultiresDM_get_lvl(dm);
More information about the Bf-blender-cvs
mailing list