From a8afa5e0247f8f11f814986219d2c37ee3e9195b Mon Sep 17 00:00:00 2001 From: Robert Taglang Date: Tue, 30 Aug 2016 13:02:44 -0400 Subject: [PATCH 1/3] Added support for normalized accessors --- Source/Scene/Model.js | 2 +- Specs/Scene/ModelSpec.js | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Source/Scene/Model.js b/Source/Scene/Model.js index 5644c433eb83..64c64c7597b7 100644 --- a/Source/Scene/Model.js +++ b/Source/Scene/Model.js @@ -2216,7 +2216,7 @@ define([ vertexBuffer : rendererBuffers[a.bufferView], componentsPerAttribute : getBinaryAccessor(a).componentsPerAttribute, componentDatatype : a.componentType, - normalize : false, + normalize : defaultValue(a.normalized, false), offsetInBytes : a.byteOffset, strideInBytes : a.byteStride }); diff --git a/Specs/Scene/ModelSpec.js b/Specs/Scene/ModelSpec.js index 6378a68a6bdd..72a8837ecd61 100644 --- a/Specs/Scene/ModelSpec.js +++ b/Specs/Scene/ModelSpec.js @@ -1598,6 +1598,32 @@ defineSuite([ }); }); + it('loads a glTF with WEB3D_quantized_attributes and accessor.normalized', function() { + return loadModel(boxQuantizedUrl).then(function(m) { + verifyRender(m); + var gltf = m.gltf; + var accessors = gltf.accessors; + var normalAccessor = accessors.accessor_25; + var positionAccessor = accessors.accessor_23; + normalAccessor.normalized = true; + positionAccessor.normalized = true; + var decodeMatrixArray = normalAccessor.extensions.WEB3D_quantized_attributes.decodeMatrix; + var decodeMatrix = new Matrix4(); + Matrix4.unpack(decodeMatrixArray, 0, decodeMatrix); + Matrix4.multiplyByUniformScale(decodeMatrix, 65535.0, decodeMatrix); + Matrix4.pack(decodeMatrix, decodeMatrixArray); + decodeMatrixArray = positionAccessor.extensions.WEB3D_quantized_attributes.decodeMatrix; + Matrix4.unpack(decodeMatrixArray, 0, decodeMatrix); + Matrix4.multiplyByUniformScale(decodeMatrix, 65535.0, decodeMatrix); + Matrix4.pack(decodeMatrix, decodeMatrixArray); + primitives.remove(m); + return loadModelJson(gltf, {}).then(function(m) { + verifyRender(m); + primitives.remove(m); + }); + }); + }); + it('loads a glTF with WEB3D_quantized_attributes POSITION and NORMAL where primitives with different accessors use the same shader', function() { return loadModel(milkTruckQuantizedUrl).then(function(m) { verifyRender(m); From 2170ac5768f2c78510b55ee9a8898e2d81090c43 Mon Sep 17 00:00:00 2001 From: Robert Taglang Date: Tue, 30 Aug 2016 15:42:53 -0400 Subject: [PATCH 2/3] Modified Box-Color to use normalized property --- Specs/Data/Models/Box-Color/Box-Color.gltf | 110 ++++++++++----------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/Specs/Data/Models/Box-Color/Box-Color.gltf b/Specs/Data/Models/Box-Color/Box-Color.gltf index 995c40cd5309..12d4d5dba33c 100644 --- a/Specs/Data/Models/Box-Color/Box-Color.gltf +++ b/Specs/Data/Models/Box-Color/Box-Color.gltf @@ -1,17 +1,23 @@ { "accessors": { "accessor_21": { - "bufferView": "bufferView_29", + "bufferView": "bufferView_1", "byteOffset": 0, "byteStride": 0, "componentType": 5123, "count": 36, - "type": "SCALAR" + "type": "SCALAR", + "min": [ + 0 + ], + "max": [ + 23 + ] }, "accessor_23": { - "bufferView": "bufferView_30", + "bufferView": "bufferView_0", "byteOffset": 0, - "byteStride": 12, + "byteStride": 0, "componentType": 5126, "count": 24, "max": [ @@ -27,22 +33,41 @@ "type": "VEC3" }, "accessor_27": { - "bufferView": "bufferView_30", - "byteOffset": 288, - "byteStride": 12, - "componentType": 5126, + "bufferView": "bufferView_0", + "byteOffset": 576, + "byteStride": 0, + "componentType": 5121, "count": 24, "max": [ - 1, - 1, - 1 + 255, + 255, + 255 ], "min": [ 0, 0, 0 ], - "type": "VEC3" + "type": "VEC3", + "normalized": true + }, + "accessor_normal_generated": { + "bufferView": "bufferView_0", + "byteOffset": 288, + "byteStride": 0, + "componentType": 5126, + "count": 24, + "type": "VEC3", + "min": [ + -1, + -1, + -1 + ], + "max": [ + 1, + 1, + 1 + ] } }, "animations": {}, @@ -56,24 +81,24 @@ "version": "1.0" }, "bufferViews": { - "bufferView_29": { - "buffer": "Box", - "byteLength": 72, + "bufferView_0": { + "buffer": "buffer_0", + "byteLength": 648, "byteOffset": 0, - "target": 34963 - }, - "bufferView_30": { - "buffer": "Box", - "byteLength": 576, - "byteOffset": 72, "target": 34962 + }, + "bufferView_1": { + "buffer": "buffer_0", + "byteLength": 72, + "byteOffset": 648, + "target": 34963 } }, "buffers": { - "Box": { - "byteLength": 648, + "buffer_0": { "type": "arraybuffer", - "uri": "data:application/octet-stream;base64,AAABAAIAAwACAAEABAAFAAYABwAGAAUACAAJAAoACwAKAAkADAANAA4ADwAOAA0AEAARABIAEwASABEAFAAVABYAFwAWABUAAAAAvwAAAL8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAvwAAAL8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAPwAAAD8AAAC/AAAAPwAAAL8AAAC/AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAPwAAAL8AAAC/AAAAPwAAAD8AAAC/AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAD8AAAAAAACAPwAAAD8AAAAAAACAPwAAAD8AAAAAAACAPwAAAD8AAAAAAACAPwAAgD8AAAAAAACAPwAAgD8AAAAAAACAPwAAgD8AAAAAAACAPwAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/lZaWPgAAAACCggI/lZaWPgAAAACCggI/lZaWPgAAAACCggI/lZaWPgAAAACCggI/" + "byteLength": 720, + "uri": "data:application/octet-stream;base64,AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAvwAAAL8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAPwAAAD8AAAC/AAAAPwAAAL8AAAC/AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAPwAAAL8AAAC/AAAAPwAAAD8AAAC/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC//wAA/wAA/wAA/wAA/38A/38A/38A/38A//8A//8A//8A//8AAP8AAP8AAP8AAP8AAAD/AAD/AAD/AAD/SgCBSgCBSgCBSgCBAAABAAIAAwACAAEABAAFAAYABwAGAAUACAAJAAoACwAKAAkADAANAA4ADwAOAA0AEAARABIAEwASABEAFAAVABYAFwAWABUA" } }, "materials": { @@ -100,54 +125,29 @@ } }, "nodes": { - "Geometry-mesh002Node": { + "rootNode": { "children": [], - "matrix": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ], "meshes": [ "Geometry-mesh002" ], - "name": "Mesh" - }, - "node_1": { - "children": [ - "Geometry-mesh002Node" - ], "matrix": [ 1, 0, 0, 0, 0, + 1, 0, - -1, 0, 0, - 1, 0, + 1, 0, 0, 0, 0, 1 - ], - "name": "Y_UP_Transform" + ] } }, "programs": { @@ -164,7 +164,7 @@ "scenes": { "defaultScene": { "nodes": [ - "node_1" + "rootNode" ] } }, @@ -230,4 +230,4 @@ }, "samplers": {}, "textures": {} -} \ No newline at end of file +} From 20cef4739c59014be56fb5afceebc07c151ca9c2 Mon Sep 17 00:00:00 2001 From: Robert Taglang Date: Tue, 30 Aug 2016 15:54:52 -0400 Subject: [PATCH 3/3] Clarified normalized in test --- Specs/Scene/ModelSpec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Specs/Scene/ModelSpec.js b/Specs/Scene/ModelSpec.js index 72a8837ecd61..bd445f9ded30 100644 --- a/Specs/Scene/ModelSpec.js +++ b/Specs/Scene/ModelSpec.js @@ -1677,7 +1677,7 @@ defineSuite([ } } - it('loads a gltf with color attributes', function() { + it('loads a gltf with normalized color attributes', function() { return loadModel(boxColorUrl).then(function(m) { expect(m.ready).toBe(true); expect(scene.renderForSpecs()).toEqual([0, 0, 0, 255]);