浏览代码

CSS3DRenderer: constructing a proper billboard matrix.

alteredq 12 年之前
父节点
当前提交
bf1b7dea2a
共有 1 个文件被更改,包括 16 次插入2 次删除
  1. 16 2
      examples/js/renderers/CSS3DRenderer.js

+ 16 - 2
examples/js/renderers/CSS3DRenderer.js

@@ -30,6 +30,8 @@ THREE.CSS3DRenderer = function () {
 	var _widthHalf, _heightHalf;
 	var _projector = new THREE.Projector();
 
+	var _tmpMatrix = new THREE.Matrix4();
+
 	this.domElement = document.createElement( 'div' );
 
 	this.domElement.style.overflow = 'hidden';
@@ -155,9 +157,21 @@ THREE.CSS3DRenderer = function () {
 
 				var element = object.element;
 
-				if ( object.billboard )	object.lookAt( camera.position );
+				if ( object.billboard )	{
+
+					// http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/
+
+					_tmpMatrix.copy( camera.matrixWorldInverse );
+					_tmpMatrix.transpose();
+					_tmpMatrix.extractPosition( object.matrixWorld );
+
+					style = getObjectCSSMatrix( _tmpMatrix );
 
-				style = getObjectCSSMatrix( object.matrixWorld );
+				} else {
+
+					style = getObjectCSSMatrix( object.matrixWorld );
+
+				}
 
 				/*
 				element.style.WebkitBackfaceVisibility = 'hidden';