Update model material¶
Update model material at runtime.
set_material_property.html
<!DOCTYPE html>
<!--
Model Information:
* title: Beach Ball
* source: https://sketchfab.com/3d-models/beach-ball-25e1816c0e22444bb62816d3999d1b0b
* author: MaggaModels (https://sketchfab.com/MaggaModels)
Model License:
* license type: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
* requirements: Author must be credited. Commercial use is allowed.
If you use this 3D model in your project be sure to copy paste this credit wherever you share it:
This work is based on "Beach Ball" (https://sketchfab.com/3d-models/beach-ball-25e1816c0e22444bb62816d3999d1b0b) by MaggaModels (https://sketchfab.com/MaggaModels) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
-->
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Update model material</title>
<meta property="og:description" content="Update model material at runtime." />
<meta name="mapray-version" content="experimental-feature">
<meta name="mapray-api-status" content="experimental">
<meta name="mapray-api-package" content="model-pbr">
<script src="./model-pbr/mapray.min.js"></script>
<script src="./model-pbr/maprayui.min.js"></script>
<link rel="stylesheet" href="./model-pbr/mapray.css">
<style>
body {margin: 0; padding: 0;}
html, body, div#mapray-container { height: 100%; }
</style>
</head>
<body>
<div id="mapray-container"></div>
</body>
</html>
<script>
let red, blue, yellow, white;
class AnimationView extends maprayui.StandardUIViewer {
constructor(container, options) {
super(container, options);
this.count = 0;
this.jump = true;
}
onUpdateFrame(delta_time) {
super.onUpdateFrame(delta_time);
if( this.getEntityNum() > 0 )
{
const entity = this.getEntity(0);
this.count += delta_time;
if (this.count > 1.0) {
if( this.jump ) {
entity.getNode("Sphere_yellow_0").setMaterialProperty(white);
entity.getNode("Sphere_blue_0").setMaterialProperty(white);
entity.getNode("Sphere_red_0").setMaterialProperty(white);
entity.getNode("Sphere_white_0").setMaterialProperty(red);
this.jump = false;
}
else {
entity.getNode("Sphere_yellow_0").setMaterialProperty(yellow);
entity.getNode("Sphere_blue_0").setMaterialProperty(blue);
entity.getNode("Sphere_red_0").setMaterialProperty(red);
entity.getNode("Sphere_white_0").setMaterialProperty(white);
this.jump = true;
}
this.count = 0.0;
}
}
}
}
const cloudApi = new mapray.cloud.CloudApiV2({
tokenType: mapray.cloud.CloudApi.TokenType.ACCESS_TOKEN,
token: "<YOUR_MAPRAY_ACCESS_TOKEN>"
});
// The StandardUIView in the ui package includes mouse-based camera manipulation.
const uiviewer = new AnimationView( "mapray-container", {
dem_provider: new mapray.StandardDemProvider( cloudApi.getDefaultDemAsResource() )
});
uiviewer.setCameraPosition({
longitude: 139.76489,
latitude: 35.67209,
height: 455
});
uiviewer.setLookAtPosition({
longitude: 139.76489,
latitude: 35.67209,
height: 455
});
const resource = cloudApi.get3DDatasetAsResource( [ 5178883078881280 ] );
const loader = new mapray.SceneLoader( uiviewer.viewer.scene, resource, {
onEntity: ( loader, entity, prop ) => {
red = entity.cloneMaterial("material");
yellow = entity.cloneMaterial("yellow");
blue = entity.cloneMaterial("blue");
white = entity.cloneMaterial("white");
uiviewer.addEntity(entity);
}
} );
loader.load();
</script>
Info
このサンプルコードは、<YOUR_MAPRAY_ACCESS_TOKEN>を、あなたのMapray CloudアカウントのOrganization Tokenに置き換えるまで、期待通りに動作しません。