Esempio n. 1
0
void spSkeleton_updateWorldTransform (const spSkeleton* self) {
	int i, ii, nn, last;
	_spSkeleton* internal = SUB_CAST(_spSkeleton, self);

	for (i = 0; i < self->bonesCount; ++i)
		self->bones[i]->rotationIK = self->bones[i]->rotation;

	i = 0;
	last = internal->boneCacheCount - 1;
	while (1) {
		for (ii = 0, nn = internal->boneCacheCounts[i]; ii < nn; ++ii)
			spBone_updateWorldTransform(internal->boneCache[i][ii]);
		if (i == last) break;
		spIkConstraint_apply(self->ikConstraints[i]);
		i++;
	}
}
Esempio n. 2
0
void spSkeleton_updateWorldTransform (const spSkeleton* self) {
	int i;
	_spSkeleton* internal = SUB_CAST(_spSkeleton, self);

	for (i = 0; i < internal->updateCacheCount; ++i) {
		_spUpdate* update = internal->updateCache + i;
		switch (update->type) {
		case SP_UPDATE_BONE:
			spBone_updateWorldTransform((spBone*)update->object);
			break;
		case SP_UPDATE_IK_CONSTRAINT:
			spIkConstraint_apply((spIkConstraint*)update->object);
			break;
		case SP_UPDATE_TRANSFORM_CONSTRAINT:
			spTransformConstraint_apply((spTransformConstraint*)update->object);
			break;
		}
	}
}