Skip to content

Commit 701fa70

Browse files
committed
Add support for time and frame in web viewer
1 parent c0b9b9f commit 701fa70

2 files changed

Lines changed: 39 additions & 5 deletions

File tree

javascript/MaterialXView/source/index.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,17 +170,19 @@ function onWindowResize()
170170
function animate()
171171
{
172172
requestAnimationFrame(animate);
173+
const scene = viewer.getScene();
173174

174175
if (turntableEnabled)
175176
{
176177
turntableStep = (turntableStep + 1) % 360;
177178
var turntableAngle = turntableStep * (360.0 / turntableSteps) / 180.0 * Math.PI;
178-
viewer.getScene()._scene.rotation.y = turntableAngle;
179-
viewer.getScene().setUpdateTransforms();
179+
scene._scene.rotation.y = turntableAngle;
180+
scene.setUpdateTransforms();
180181
}
181182

182-
renderer.render(viewer.getScene().getScene(), viewer.getScene().getCamera());
183-
viewer.getScene().updateTransforms();
183+
scene.updateUniforms();
184+
renderer.render(scene.getScene(), scene.getCamera());
185+
scene.updateTransforms();
184186

185187
if (captureRequested)
186188
{

javascript/MaterialXView/source/viewer.js

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ export class Scene
4343
const cameraFarDist = 100.0;
4444
const cameraFOV = 60.0;
4545
this._camera = new THREE.PerspectiveCamera(cameraFOV, aspectRatio, cameraNearDist, cameraFarDist);
46-
46+
this._frame = 0;
47+
4748
this.#_gltfLoader = new GLTFLoader();
4849

4950
this.#_normalMat = new THREE.Matrix3();
@@ -265,6 +266,37 @@ export class Scene
265266
});
266267
}
267268

269+
/**
270+
* Update uniforms for all scene objects. This is called once per frame
271+
* and updates time and frame count uniforms.
272+
*/
273+
updateUniforms() {
274+
this._frame++;
275+
276+
const scene = this.getScene();
277+
const time = performance.now() / 1000.0;
278+
const frame = this._frame;
279+
280+
scene.traverse((child) =>
281+
{
282+
if (child.isMesh && child.material && child.material.uniforms)
283+
{
284+
const uniforms = child.material.uniforms;
285+
if (uniforms)
286+
{
287+
if (uniforms.u_time)
288+
{
289+
uniforms.u_time.value = time;
290+
}
291+
if (uniforms.u_frame)
292+
{
293+
uniforms.u_frame.value = frame;
294+
}
295+
}
296+
}
297+
});
298+
}
299+
268300
// Determine string DAG path based on individual node names.
269301
getDagPath(node)
270302
{

0 commit comments

Comments
 (0)