소스 검색

* Projector.js: Rather than calculating the screen space centrium of each face per render, seemed smarter to just project the precomputed centrium. Side effect: Polygon shaking is gone \o/

Mr.doob 15 년 전
부모
커밋
daf2700ccb
5개의 변경된 파일21개의 추가작업 그리고 10개의 파일을 삭제
  1. 0 1
      build/Three.js
  2. 0 1
      build/ThreeDebug.js
  3. 17 8
      src/renderers/Projector.js
  4. 2 0
      src/renderers/renderables/RenderableFace3.js
  5. 2 0
      src/renderers/renderables/RenderableFace4.js

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 1
build/Three.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 1
build/ThreeDebug.js


+ 17 - 8
src/renderers/Projector.js

@@ -88,13 +88,16 @@ THREE.Projector = function() {
 								_face3.v2.copy( v2.positionScreen );
 								_face3.v3.copy( v3.positionScreen );
 
-								_face3.centroidWorld.copy( face.centroid );
-								object.matrix.transform( _face3.centroidWorld );
-
 								_face3.normalWorld.copy( face.normal );
 								object.matrixRotation.transform( _face3.normalWorld );
 
-								_face3.z = Math.max( v1.positionScreen.z, Math.max( v2.positionScreen.z, v3.positionScreen.z ) );
+								_face3.centroidWorld.copy( face.centroid );
+								objectMatrix.transform( _face3.centroidWorld );
+
+								_face3.centroidScreen.copy( _face3.centroidWorld );
+								_projScreenMatrix.transform( _face3.centroidScreen );
+
+								_face3.z = _face3.centroidScreen.z;
 
 								_face3.meshMaterial = object.material;
 								_face3.faceMaterial = face.material;
@@ -128,13 +131,16 @@ THREE.Projector = function() {
 								_face4.v3.copy( v3.positionScreen );
 								_face4.v4.copy( v4.positionScreen );
 
-								_face4.centroidWorld.copy( face.centroid );
-								object.matrix.transform( _face4.centroidWorld );
-
 								_face4.normalWorld.copy( face.normal );
 								object.matrixRotation.transform( _face4.normalWorld );
 
-								_face4.z = Math.max( v1.positionScreen.z, Math.max( v2.positionScreen.z, Math.max( v3.positionScreen.z, v4.positionScreen.z ) ) );
+								_face4.centroidWorld.copy( face.centroid );
+								objectMatrix.transform( _face4.centroidWorld );
+
+								_face4.centroidScreen.copy( _face4.centroidWorld );
+								_projScreenMatrix.transform( _face4.centroidScreen );
+
+								_face4.z = _face4.centroidScreen.z;
 
 								_face4.meshMaterial = object.material;
 								_face4.faceMaterial = face.material;
@@ -179,7 +185,10 @@ THREE.Projector = function() {
 							_line = _linePool[ _lineCount ] = _linePool[ _lineCount ] || new THREE.RenderableLine();
 							_line.v1.copy( vertex.positionScreen );
 							_line.v2.copy( vertex2.positionScreen );
+
+							// TODO: Use centriums here too.
 							_line.z = Math.max( vertex.positionScreen.z, vertex2.positionScreen.z );
+
 							_line.material = object.material;
 
 							_renderList.push( _line );

+ 2 - 0
src/renderers/renderables/RenderableFace3.js

@@ -9,6 +9,8 @@ THREE.RenderableFace3 = function () {
 	this.v3 = new THREE.Vector2();
 
 	this.centroidWorld = new THREE.Vector3();
+	this.centroidScreen = new THREE.Vector3();
+
 	this.normalWorld = new THREE.Vector3();
 
 	this.z = null;

+ 2 - 0
src/renderers/renderables/RenderableFace4.js

@@ -10,6 +10,8 @@ THREE.RenderableFace4 = function () {
 	this.v4 = new THREE.Vector2();
 
 	this.centroidWorld = new THREE.Vector3();
+	this.centroidScreen = new THREE.Vector3();
+
 	this.normalWorld = new THREE.Vector3();
 
 	this.z = null;

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.