提交 3b54cf79 编写于 作者: M Mr.doob

Projector now checks for object.visible before projecting (alteredq: better late than never :P)

WebGLRenderer2 now uses Projector too (projecting objects + sorting, to slightly avoid transparency sorting glitches).
上级 9f668dea
此差异已折叠。
此差异已折叠。
此差异已折叠。
......@@ -90,6 +90,7 @@
<script type="text/javascript" src="../src/renderers/SVGRenderer.js"></script>
<script type="text/javascript" src="../src/renderers/WebGLRenderer.js"></script>
<script type="text/javascript" src="../src/renderers/WebGLRenderer2.js"></script>
<script type="text/javascript" src="../src/renderers/renderables/RenderableObject.js"></script>
<script type="text/javascript" src="../src/renderers/renderables/RenderableFace3.js"></script>
<script type="text/javascript" src="../src/renderers/renderables/RenderableParticle.js"></script>
<script type="text/javascript" src="../src/renderers/renderables/RenderableLine.js"></script>
......
......@@ -7,10 +7,12 @@
THREE.Projector = function() {
var _renderList = null,
_object, _objectCount, _objectPool = [],
_face3, _face32, _face3Count, _face3Pool = [],
_line, _lineCount, _linePool = [],
_particle, _particleCount, _particlePool = [],
_vector3 = new THREE.Vector3(),
_vector4 = new THREE.Vector4(),
_projScreenMatrix = new THREE.Matrix4(),
_projScreenObjectMatrix = new THREE.Matrix4(),
......@@ -20,6 +22,44 @@ THREE.Projector = function() {
_face3VertexNormals;
this.projectObjects = function ( scene, camera ) {
var o, ol, v, vl, f, fl, n, nl, objects, object;
_renderList = [];
_objectCount = 0;
objects = scene.objects;
for ( o = 0, ol = objects.length; o < ol; o++ ) {
object = objects[ o ];
if ( object.visible === false ) continue;
_object = _objectPool[ _objectCount ] = _objectPool[ _objectCount ] || new THREE.RenderableObject();
_vector4.copy( object.position );
_projScreenMatrix.multiplyVector4( _vector4 );
_vector4.multiplyScalar( 1 / _vector4.w );
_object.object = object;
_object.z = _vector3.z;
_renderList.push( _object );
_objectCount ++;
}
_renderList.sort( painterSort );
return _renderList;
};
// TODO: Rename to projectElements? Test also using it with projectObjects to speed up sorting?
this.projectScene = function ( scene, camera ) {
var o, ol, v, vl, f, fl, n, nl, objects, object,
......@@ -39,6 +79,9 @@ THREE.Projector = function() {
for ( o = 0, ol = objects.length; o < ol; o++ ) {
object = objects[ o ];
if ( object.visible === false ) continue;
object.autoUpdateMatrix && object.updateMatrix();
objectMatrix = object.matrix;
......@@ -313,7 +356,7 @@ THREE.Projector = function() {
}
_renderList.sort( function ( a, b ) { return b.z - a.z; } );
_renderList.sort( painterSort );
return _renderList;
......@@ -400,4 +443,10 @@ THREE.Projector = function() {
}
function painterSort( a, b ) {
return b.z - a.z;
}
};
......@@ -4,7 +4,10 @@
THREE.WebGLRenderer2 = function () {
var _canvas = document.createElement( 'canvas' ),
var _renderList = null,
_projector = new THREE.Projector(),
_canvas = document.createElement( 'canvas' ),
_gl, _currentProgram,
_modelViewMatrix = new THREE.Matrix4(),
_viewMatrixArray = new Float32Array( 16 ),
......@@ -70,15 +73,13 @@ THREE.WebGLRenderer2 = function () {
_viewMatrixArray.set( camera.matrix.flatten() );
_projectionMatrixArray.set( camera.projectionMatrix.flatten() );
for ( o = 0, ol = scene.objects.length; o < ol; o++ ) {
object = scene.objects[ o ];
_renderList = _projector.projectObjects( scene, camera );
if ( object.visible ) {
for ( o = 0, ol = _renderList.length; o < ol; o++ ) {
renderObject( object );
object = _renderList[ o ];
}
renderObject( object.object );
}
......@@ -281,18 +282,6 @@ THREE.WebGLRenderer2 = function () {
} else if ( face instanceof THREE.Face4 ) {
group = Math.floor( vertexIndex / 65535 );
if ( !vertices ) {
vertices = [];
faces = [];
normals = [];
lines = [];
uvs = [];
}
v1 = geometry.vertices[ face.a ].position;
v2 = geometry.vertices[ face.b ].position;
v3 = geometry.vertices[ face.c ].position;
......
/**
* @author mr.doob / http://mrdoob.com/
*/
THREE.RenderableObject = function () {
this.object = null;
this.z = null;
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册