mirror of
https://github.com/MapMakersAndProgrammers/Alternativa3D.git
synced 2025-10-27 02:19:11 -07:00
omni shadows: Skin joints matrices calculation
This commit is contained in:
@@ -17,6 +17,6 @@ package alternativa {
|
|||||||
/**
|
/**
|
||||||
* Library version in the format: generation.feature-version.fix-version.
|
* Library version in the format: generation.feature-version.fix-version.
|
||||||
*/
|
*/
|
||||||
public static const version:String = "8.29.0";
|
public static const version:String = "8.30.0";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,7 +294,7 @@ public class Camera3D extends Object3D {
|
|||||||
}
|
}
|
||||||
occludersLength = j;
|
occludersLength = j;
|
||||||
occluders.length = j;
|
occluders.length = j;
|
||||||
// Check light influence (?)
|
// Check light influence
|
||||||
for (i = 0, j = 0; i < lightsLength; i++) {
|
for (i = 0, j = 0; i < lightsLength; i++) {
|
||||||
light = lights[i];
|
light = lights[i];
|
||||||
light.localToCameraTransform.calculateInversion(light.cameraToLocalTransform);
|
light.localToCameraTransform.calculateInversion(light.cameraToLocalTransform);
|
||||||
@@ -308,6 +308,7 @@ public class Camera3D extends Object3D {
|
|||||||
|
|
||||||
// Shadows preparing
|
// Shadows preparing
|
||||||
if (light.shadow != null) {
|
if (light.shadow != null) {
|
||||||
|
// TODO: Need check by occluders
|
||||||
light.shadow.process(this);
|
light.shadow.process(this);
|
||||||
}
|
}
|
||||||
lights[j] = light;
|
lights[j] = light;
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ package alternativa.engine3d.objects {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* A joint transform matrix.
|
* A joint transform matrix. Geometry -> Joint -> Skin
|
||||||
*/
|
*/
|
||||||
alternativa3d var jointTransform:Transform3D = new Transform3D();
|
alternativa3d var jointTransform:Transform3D = new Transform3D();
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ package alternativa.engine3d.shadows {
|
|||||||
import alternativa.engine3d.materials.compiler.Linker;
|
import alternativa.engine3d.materials.compiler.Linker;
|
||||||
import alternativa.engine3d.materials.compiler.Procedure;
|
import alternativa.engine3d.materials.compiler.Procedure;
|
||||||
import alternativa.engine3d.materials.compiler.VariableType;
|
import alternativa.engine3d.materials.compiler.VariableType;
|
||||||
|
import alternativa.engine3d.objects.Joint;
|
||||||
import alternativa.engine3d.objects.Mesh;
|
import alternativa.engine3d.objects.Mesh;
|
||||||
import alternativa.engine3d.objects.Skin;
|
import alternativa.engine3d.objects.Skin;
|
||||||
import alternativa.engine3d.objects.Surface;
|
import alternativa.engine3d.objects.Surface;
|
||||||
@@ -215,30 +216,30 @@ package alternativa.engine3d.shadows {
|
|||||||
|
|
||||||
var castersCount:int = _casters.length;
|
var castersCount:int = _casters.length;
|
||||||
// calculating some transformation matrices
|
// calculating some transformation matrices
|
||||||
|
// TODO: not transform invisible objects
|
||||||
for (i = 0; i < castersCount; i++) {
|
for (i = 0; i < castersCount; i++) {
|
||||||
caster = _casters[i];
|
caster = _casters[i];
|
||||||
|
|
||||||
if (caster.transformChanged) caster.composeTransforms();
|
if (caster.transformChanged) caster.composeTransforms();
|
||||||
|
|
||||||
caster.lightToLocalTransform.combine(caster.cameraToLocalTransform, _light.localToCameraTransform);
|
caster.lightToLocalTransform.combine(caster.cameraToLocalTransform, _light.localToCameraTransform);
|
||||||
caster.localToLightTransform.combine(_light.cameraToLocalTransform, caster.localToCameraTransform);
|
caster.localToLightTransform.combine(_light.cameraToLocalTransform, caster.localToCameraTransform);
|
||||||
|
|
||||||
|
var skin:Skin = caster as Skin;
|
||||||
|
if (skin != null) {
|
||||||
|
// Calculate joints matrices
|
||||||
|
for (var child:Object3D = skin.childrenList; child != null; child = child.next) {
|
||||||
|
if (child.transformChanged) child.composeTransforms();
|
||||||
|
// Write transformToSkin matrix to localToGlobalTransform property
|
||||||
|
child.localToGlobalTransform.copy(child.transform);
|
||||||
|
if (child is Joint) {
|
||||||
|
Joint(child).calculateTransform();
|
||||||
|
}
|
||||||
|
skin.calculateJointsTransforms(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (caster.childrenList != null) calculateChildrenTransforms(caster);
|
if (caster.childrenList != null) calculateChildrenTransforms(caster);
|
||||||
|
|
||||||
// TODO: repair skin
|
|
||||||
// var skin:Skin = caster as Skin;
|
|
||||||
// if (skin != null) {
|
|
||||||
// // Расчет матриц джоинтов
|
|
||||||
// for (var child:Object3D = skin.childrenList; child != null; child = child.next) {
|
|
||||||
// if (child.transformChanged) child.composeTransforms();
|
|
||||||
// // Записываем в localToGlobalTransform матрицу перевода в скин
|
|
||||||
// child.localToGlobalTransform.copy(child.transform);
|
|
||||||
// if (child is Joint) {
|
|
||||||
// Joint(child).calculateTransform();
|
|
||||||
// }
|
|
||||||
// skin.calculateJointsTransforms(child);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Iterate through six cameras
|
// Iterate through six cameras
|
||||||
@@ -323,23 +324,21 @@ package alternativa.engine3d.shadows {
|
|||||||
child.localToLightTransform.combine(root.localToLightTransform, child.transform);
|
child.localToLightTransform.combine(root.localToLightTransform, child.transform);
|
||||||
child.lightToLocalTransform.combine(child.inverseTransform, root.lightToLocalTransform);
|
child.lightToLocalTransform.combine(child.inverseTransform, root.lightToLocalTransform);
|
||||||
|
|
||||||
if (child.childrenList != null) calculateChildrenTransforms(child);
|
var skin:Skin = child as Skin;
|
||||||
|
if (skin != null) {
|
||||||
|
// Calculate joints matrices
|
||||||
|
for (var skinChild:Object3D = skin.childrenList; skinChild != null; skinChild = skinChild.next) {
|
||||||
|
if (skinChild.transformChanged) skinChild.composeTransforms();
|
||||||
|
// Write transformToSkin matrix to localToGlobalTransform property
|
||||||
|
skinChild.localToGlobalTransform.copy(skinChild.transform);
|
||||||
|
if (skinChild is Joint) {
|
||||||
|
Joint(skinChild).calculateTransform();
|
||||||
|
}
|
||||||
|
skin.calculateJointsTransforms(skinChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: repair skin
|
if (child.childrenList != null) calculateChildrenTransforms(child);
|
||||||
// // расчет матриц трансформаций для скинов
|
|
||||||
// var skin:Skin = child as Skin;
|
|
||||||
// if (skin != null) {
|
|
||||||
// // Расчет матриц джоинтов
|
|
||||||
// for (var skinChild:Object3D = skin.childrenList; skinChild != null; skinChild = skinChild.next) {
|
|
||||||
// if (skinChild.transformChanged) skinChild.composeTransforms();
|
|
||||||
// // Записываем в localToGlobalTransform матрицу перевода в скин
|
|
||||||
// skinChild.localToGlobalTransform.copy(skinChild.transform);
|
|
||||||
// if (skinChild is Joint) {
|
|
||||||
// Joint(skinChild).calculateTransform();
|
|
||||||
// }
|
|
||||||
// skin.calculateJointsTransforms(skinChild);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -373,7 +372,6 @@ package alternativa.engine3d.shadows {
|
|||||||
|
|
||||||
|
|
||||||
private function collectDraws(context:Context3D, caster:Object3D, edgeCamera:Camera3D):void{
|
private function collectDraws(context:Context3D, caster:Object3D, edgeCamera:Camera3D):void{
|
||||||
|
|
||||||
// если объект является мешем, собираем для него дроуколы
|
// если объект является мешем, собираем для него дроуколы
|
||||||
var mesh:Mesh = caster as Mesh;
|
var mesh:Mesh = caster as Mesh;
|
||||||
if (mesh != null && mesh.geometry != null) {
|
if (mesh != null && mesh.geometry != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user