AMI - Lesson 01
Visualize 3D.
author(s):
Nicolas Rannou (github)
by nicolasrannou
HTML
<div id="my-gui-container"></div>
<div id="container"></div>
<!-- THREEJS -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r83/three.min.js"></script>
<!-- AMI CDN -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ami.js//0.0.15/ami.min.js"></script>
<!-- ANALYTICS -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-39303022-3', 'auto');
var page = '/ami/lessons/01';
ga('send', 'pageview', page);
</script>
CSS
body{
font-family: source-code-pro, sans-serif;
color:#F9F9F9;
background-color: #212121
}
#container {
background-color: #000;
left: 0;
right: 0;
top: 0;
bottom: 0;
position: absolute;
width: 100%;
height: 100%;
overflow:hidden;
}
#my-gui-container {
position: fixed;
top: 10px;
right: 10px;
z-index:1;
}
JavaScript
/* globals dat, AMI*/
// VJS classes we will be using in this lesson
var LoadersVolume = AMI.default.Loaders.Volume;
var ControlsTrackball = AMI.default.Controls.Trackball;
var HelpersStack = AMI.default.Helpers.Stack;
var HelpersSlice = AMI.default.Helpers.Slice;
var stackHelper = null;
var stacks = [];
// Setup renderer
var container = document.getElementById('container');
var renderer = new THREE.WebGLRenderer({
antialias: true,
});
renderer.setSize(container.offsetWidth, container.offsetHeight);
renderer.setClearColor(0x353535, 1);
renderer.setPixelRatio(window.devicePixelRatio);
container.appendChild(renderer.domElement);
// Setup scene
var scene = new THREE.Scene();
// Setup camera
var camera = new THREE.PerspectiveCamera(
45, container.offsetWidth / container.offsetHeight, 0.01, 10000000);
camera.position.x = 150;
camera.position.y = 150;
camera.position.z = 100;
// Setup controls
var controls = new ControlsTrackball(camera, container);
/**
* Handle window resize
*/
function onWindowResize() {
camera.aspect = container.offsetWidth / container.offsetHeight;
camera.updateProjectionMatrix();
renderer.setSize(container.offsetWidth, container.offsetHeight);
}
window.addEventListener('resize', onWindowResize, false);
/**
* Start animation loop
*/
function animate() {
controls.update();
renderer.render(scene, camera);
// request new frame
requestAnimationFrame(function() {
animate();
});
}
animate();
// Setup loader
var loader = new LoadersVolume(container);
var t2 = [
'36444280', '36444294',
];
var files = t2.map(function(v) {
return 'https://cdn.rawgit.com/FNNDSC/data/master/dicom/adi_brain/' + v;
});
loader.load(files)
.then(function() {
// merge files into clean series/stack/frame structure
var series = loader.data;
series[0].stack[0].prepare()
series[0].stack[0].pack();
series[1].stack[0].prepare()
series[1].stack[0].pack();
stacks.push(series[0].stack[0]);
...