提交 5a9f8d7b 编写于 作者: O OpenShift guest

add depth pass plugin fix

上级 a237eec3
......@@ -12,7 +12,8 @@ THREE.DepthPassPlugin = function () {
_depthMaterial, _depthMaterialMorph, _depthMaterialSkin, _depthMaterialMorphSkin,
_frustum = new THREE.Frustum(),
_projScreenMatrix = new THREE.Matrix4();
_projScreenMatrix = new THREE.Matrix4(),
_renderList = [];
this.init = function ( renderer ) {
......@@ -76,8 +77,11 @@ THREE.DepthPassPlugin = function () {
_renderer.clear();
// set object matrices & frustum culling
renderList = scene.__webglObjects;
_renderList.length = 0;
projectObject(scene,scene,camera);
/*_renderList = scene.__webglObjects;
for ( j = 0, jl = renderList.length; j < jl; j ++ ) {
......@@ -98,7 +102,8 @@ THREE.DepthPassPlugin = function () {
}
}
}*/
// render regular objects
......@@ -106,54 +111,51 @@ THREE.DepthPassPlugin = function () {
for ( j = 0, jl = renderList.length; j < jl; j ++ ) {
webglObject = renderList[ j ];
if ( webglObject.render ) {
object = webglObject.object;
buffer = webglObject.buffer;
webglObject = _renderList[ j ];
// todo: create proper depth material for particles
object = webglObject.object;
buffer = webglObject.buffer;
if ( object instanceof THREE.PointCloud && ! object.customDepthMaterial ) continue;
// todo: create proper depth material for particles
objectMaterial = getObjectMaterial( object );
if ( object instanceof THREE.PointCloud && ! object.customDepthMaterial ) continue;
if ( objectMaterial ) _renderer.setMaterialFaces( object.material );
objectMaterial = getObjectMaterial( object );
useMorphing = object.geometry.morphTargets !== undefined && object.geometry.morphTargets.length > 0 && objectMaterial.morphTargets;
useSkinning = object instanceof THREE.SkinnedMesh && objectMaterial.skinning;
if ( objectMaterial ) _renderer.setMaterialFaces( object.material );
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;
if ( buffer instanceof THREE.BufferGeometry ) {
}
_renderer.renderBufferDirect( camera, scene.__lights, fog, material, buffer, object );
if ( buffer instanceof THREE.BufferGeometry ) {
} else {
_renderer.renderBufferDirect( camera, scene.__lights, fog, material, buffer, object );
_renderer.renderBuffer( camera, scene.__lights, fog, material, buffer, object );
} else {
}
_renderer.renderBuffer( camera, scene.__lights, fog, material, buffer, object );
}
}
// set matrices and render immediate objects
......@@ -184,6 +186,33 @@ THREE.DepthPassPlugin = function () {
_gl.enable( _gl.BLEND );
};
function projectObject(scene, object,camera){
if ( object.visible ) {
var webglObjects = scene.__webglObjects[object.uuid];
if (webglObjects && (object.frustumCulled === false || _frustum.intersectsObject( object ) === true) ) {
for (var i = 0, l = webglObjects.length; i < l; i++){
var webglObject = webglObjects[i];
object._modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
_renderList.push(webglObject);
}
}
for(var i = 0, l = object.children.length; i < l; i++) {
projectObject(scene, object.children[i], camera);
}
}
}
// For the moment just ignore objects that have multiple materials with different animation methods
// Only the first material will be taken into account for deciding which depth material to use
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册