提交 a237eec3 编写于 作者: O OpenShift guest

fix shadowmapplugin

上级 ffaeafe6
......@@ -14,7 +14,9 @@ THREE.ShadowMapPlugin = function () {
_min = new THREE.Vector3(),
_max = new THREE.Vector3(),
_matrixPosition = new THREE.Vector3();
_matrixPosition = new THREE.Vector3(),
_renderList = [];
this.init = function ( renderer ) {
......@@ -51,7 +53,6 @@ THREE.ShadowMapPlugin = function () {
shadowMap, shadowMatrix, shadowCamera,
program, buffer, material,
webglObject, object, light,
renderList,
lights = [],
k = 0,
......@@ -230,85 +231,62 @@ THREE.ShadowMapPlugin = function () {
// set object matrices & frustum culling
renderList = scene.__webglObjects;
_renderList.length = 0;
projectObject(scene,scene,shadowCamera);
for ( j = 0, jl = renderList.length; j < jl; j ++ ) {
webglObject = renderList[ j ];
object = webglObject.object;
webglObject.render = false;
if ( object.visible && object.castShadow ) {
if ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) {
object._modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );
webglObject.render = true;
}
}
}
// render regular objects
var objectMaterial, useMorphing, useSkinning;
for ( j = 0, jl = renderList.length; j < jl; j ++ ) {
webglObject = renderList[ j ];
if ( webglObject.render ) {
for ( j = 0, jl = _renderList.length; j < jl; j ++ ) {
object = webglObject.object;
buffer = webglObject.buffer;
webglObject = _renderList[ j ];
// culling is overriden globally for all objects
// while rendering depth map
object = webglObject.object;
buffer = webglObject.buffer;
// need to deal with MeshFaceMaterial somehow
// in that case just use the first of material.materials for now
// (proper solution would require to break objects by materials
// similarly to regular rendering and then set corresponding
// depth materials per each chunk instead of just once per object)
// culling is overriden globally for all objects
// while rendering depth map
objectMaterial = getObjectMaterial( object );
// need to deal with MeshFaceMaterial somehow
// in that case just use the first of material.materials for now
// (proper solution would require to break objects by materials
// similarly to regular rendering and then set corresponding
// depth materials per each chunk instead of just once per object)
useMorphing = object.geometry.morphTargets !== undefined && object.geometry.morphTargets.length > 0 && objectMaterial.morphTargets;
useSkinning = object instanceof THREE.SkinnedMesh && objectMaterial.skinning;
objectMaterial = getObjectMaterial( object );
if ( object.customDepthMaterial ) {
useMorphing = object.geometry.morphTargets !== undefined && object.geometry.morphTargets.length > 0 && objectMaterial.morphTargets;
useSkinning = object instanceof THREE.SkinnedMesh && objectMaterial.skinning;
material = object.customDepthMaterial;
if ( object.customDepthMaterial ) {
} else if ( useSkinning ) {
material = object.customDepthMaterial;
material = useMorphing ? _depthMaterialMorphSkin : _depthMaterialSkin;
} else if ( useSkinning ) {
} else if ( useMorphing ) {
material = useMorphing ? _depthMaterialMorphSkin : _depthMaterialSkin;
material = _depthMaterialMorph;
} else if ( useMorphing ) {
} else {
material = _depthMaterialMorph;
material = _depthMaterial;
} else {
}
material = _depthMaterial;
_renderer.setMaterialFaces( objectMaterial );
}
if ( buffer instanceof THREE.BufferGeometry ) {
_renderer.setMaterialFaces( objectMaterial );
_renderer.renderBufferDirect( shadowCamera, scene.__lights, fog, material, buffer, object );
if ( buffer instanceof THREE.BufferGeometry ) {
} else {
_renderer.renderBufferDirect( shadowCamera, scene.__lights, fog, material, buffer, object );
_renderer.renderBuffer( shadowCamera, scene.__lights, fog, material, buffer, object );
} else {
}
_renderer.renderBuffer( shadowCamera, scene.__lights, fog, material, buffer, object );
}
......@@ -316,7 +294,7 @@ THREE.ShadowMapPlugin = function () {
// set matrices and render immediate objects
renderList = scene.__webglObjectsImmediate;
var renderList = scene.__webglObjectsImmediate;
for ( j = 0, jl = renderList.length; j < jl; j ++ ) {
......@@ -350,6 +328,33 @@ THREE.ShadowMapPlugin = function () {
}
};
function projectObject(scene, object,shadowCamera){
if ( object.visible ) {
var webglObjects = scene.__webglObjects[object.uuid];
if (webglObjects && object.castShadow && (object.frustumCulled === false || _frustum.intersectsObject( object ) === true) ) {
for (var i = 0, l = webglObjects.length; i < l; i++){
var webglObject = webglObjects[i];
object._modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );
_renderList.push(webglObject);
}
}
for(var i = 0, l = object.children.length; i < l; i++) {
projectObject(scene, object.children[i],shadowCamera);
}
}
}
function createVirtualLight( light, cascade ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册