瀏覽代碼

Fixing collisions cache bug

David Catuhe 11 年之前
父節點
當前提交
603fe43b7d
共有 3 個文件被更改,包括 10 次插入6 次删除
  1. 2 1
      Babylon/Mesh/babylon.mesh.js
  2. 6 3
      Babylon/babylon.engine.js
  3. 2 2
      babylon.1.11.0-beta.js

+ 2 - 1
Babylon/Mesh/babylon.mesh.js

@@ -733,8 +733,9 @@ var BABYLON = BABYLON || {};
         this._generatePointsArray();
         // Transformation
         if (!subMesh._lastColliderWorldVertices || !subMesh._lastColliderTransformMatrix.equals(transformMatrix)) {
-            subMesh._lastColliderTransformMatrix = transformMatrix;
+            subMesh._lastColliderTransformMatrix = transformMatrix.clone();
             subMesh._lastColliderWorldVertices = [];
+            subMesh._trianglePlanes = [];
             var start = subMesh.verticesStart;
             var end = (subMesh.verticesStart + subMesh.verticesCount);
             for (var i = start; i < end; i++) {

+ 6 - 3
Babylon/babylon.engine.js

@@ -309,11 +309,14 @@ var BABYLON = BABYLON || {};
 
     BABYLON.Engine.prototype.updateDynamicVertexBuffer = function (vertexBuffer, vertices, length) {
         this._gl.bindBuffer(this._gl.ARRAY_BUFFER, vertexBuffer);
-        // Should be (vertices instanceof Float32Array ? vertices : new Float32Array(vertices)) but Chrome raises an Exception in this case :(
-        if (length) {
+        if (length && length != vertices.length) {
             this._gl.bufferSubData(this._gl.ARRAY_BUFFER, 0, new Float32Array(vertices, 0, length));
         } else {
-            this._gl.bufferSubData(this._gl.ARRAY_BUFFER, 0, new Float32Array(vertices));
+            if (vertices instanceof Float32Array) {
+                this._gl.bufferSubData(this._gl.ARRAY_BUFFER, 0, vertices);
+            } else {
+                this._gl.bufferSubData(this._gl.ARRAY_BUFFER, 0, new Float32Array(vertices));
+            }
         }
         
         this._gl.bindBuffer(this._gl.ARRAY_BUFFER, null);

文件差異過大導致無法顯示
+ 2 - 2
babylon.1.11.0-beta.js