fei.html 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <title>三维器官可视化网页</title>
  5. <meta charset="utf-8">
  6. <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  7. <style>
  8. body {
  9. font-family: Monospace;
  10. background-color: #000;
  11. color: #fff;
  12. margin: 0px;
  13. overflow: hidden;
  14. }
  15. #info {
  16. color: #fff;
  17. position: absolute;
  18. top: 10px;
  19. width: 100%;
  20. text-align: center;
  21. z-index: 100;
  22. display:block;
  23. }
  24. #info a, .button { color: #ff0; font-weight: bold; text-decoration: underline; cursor: pointer }
  25. </style>
  26. </head>
  27. <body>
  28. <div id="info">
  29. 三维器官分割可视化网页渲染采用WebGL开源框架three.js,
  30. </div>
  31. <script src="js/three.min.js"></script>
  32. <script src="js/TrackballControls.js"></script>
  33. <script src="js/VTKLoader.js"></script>
  34. <script src="js/StereoEffect.js"></script>
  35. <script src="js/dat.gui.min.js"></script>
  36. <script src="js/Detector.js"></script>
  37. <script src="js/stats.min.js"></script> //
  38. <script>
  39. if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
  40. var VrRender;//创建一个双屏渲染器,当处于双屏状态,则使用双屏渲染器进行渲染
  41. var container, stats;
  42. var camera, controls, scene, renderer;
  43. var cross;
  44. init();
  45. animate();
  46. function init() {
  47. camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 0.05, 1e10 );
  48. //camera.position.z = 0.2;
  49. //camera.position.x = 0.3;
  50. //camera.position.y = 0.3;
  51. camera.position.set(20,20,250)
  52. controls = new THREE.TrackballControls( camera );
  53. controls.rotateSpeed = 5.0;
  54. controls.zoomSpeed = 5;
  55. controls.panSpeed = 2;
  56. controls.noZoom = false;
  57. controls.noPan = false;
  58. controls.staticMoving = true;
  59. controls.dynamicDampingFactor = 0.3;
  60. scene = new THREE.Scene();
  61. scene.add( camera );
  62. scene.add( new THREE.GridHelper( 800, 80 ) );
  63. // light
  64. var dirLight = new THREE.DirectionalLight( 0xffffff );
  65. dirLight.position.set( 200, 200, 1000 ).normalize();
  66. camera.add( dirLight );
  67. camera.add( dirLight.target );
  68. var materialf = new THREE.MeshLambertMaterial( { color:0xff0000, side: THREE.DoubleSide ,transparent: true, opacity: 1} );
  69. var materialb = new THREE.MeshLambertMaterial( { color:0xffff00, side: THREE.BackSide ,transparent: true, opacity: 0.8});
  70. var material2 = new THREE.MeshLambertMaterial( { color:0xff0000, side: THREE.DoubleSide,transparent: true, opacity: 0.8 } );
  71. var material3 = new THREE.MeshLambertMaterial( { color: 0x000080,side: THREE.DoubleSide,transparent: true, opacity: 0.8 } );
  72. var material4 = new THREE.MeshLambertMaterial( { color:0x008000, side: THREE.DoubleSide,transparent: true, opacity: 0.8 } );
  73. var material5 = new THREE.MeshLambertMaterial( { color:0x0000FF, side: THREE.DoubleSide ,transparent:true, opacity: 0.8} );
  74. var material6 = new THREE.MeshLambertMaterial( { color:0x008000, side: THREE.DoubleSide,transparent: true, opacity: 0.8 } );
  75. var material7 = new THREE.MeshLambertMaterial( { color:0xA52A2A, side: THREE.DoubleSide,transparent: true, opacity: 0.8 } );
  76. var material8 = new THREE.MeshLambertMaterial( { color:0xBDB76B, side: THREE.DoubleSide,transparent: true, opacity: 0.8 } );
  77. var material9 = new THREE.MeshLambertMaterial( { color:0xF0F8FF, side: THREE.DoubleSide ,transparent: true, opacity: 0.8} );
  78. var loader = new THREE.VTKLoader();
  79. loader.addEventListener( 'load', function ( event ) {
  80. var geometry = event.content;
  81. var mesh = new THREE.Mesh( geometry, materialf );
  82. mesh.position.set(.05, -0.19, 0 );
  83. scene.add( mesh );
  84. } );
  85. var loader1 = new THREE.VTKLoader();
  86. loader1.addEventListener( 'load', function ( event ) {
  87. var geometry1 = event.content;
  88. var mesh = new THREE.Mesh( geometry1, materialb );
  89. mesh.position.set(0.2, -0.19, 0 );
  90. scene.add( mesh );
  91. } );
  92. var loader2 = new THREE.VTKLoader();
  93. loader2.addEventListener( 'load', function ( event ) {
  94. var geometry2 = event.content;
  95. var mesh = new THREE.Mesh( geometry2, material2 );
  96. mesh.position.set(0.5, -0.19, 0 );
  97. scene.add( mesh );
  98. } );
  99. var loader3 = new THREE.VTKLoader();
  100. loader3.addEventListener( 'load', function ( event ) {
  101. var geometry = event.content;
  102. var mesh = new THREE.Mesh( geometry, material3 );
  103. mesh.position.set(.05, -0.19, 0 );
  104. scene.add( mesh );
  105. } );
  106. var loader4 = new THREE.VTKLoader();
  107. loader4.addEventListener( 'load', function ( event ) {
  108. var geometry = event.content;
  109. var mesh = new THREE.Mesh( geometry, material4 );
  110. mesh.position.set(.05, -0.19, 0 );
  111. scene.add( mesh );
  112. } );
  113. var loader5 = new THREE.VTKLoader();
  114. loader5.addEventListener( 'load', function ( event ) {
  115. var geometry = event.content;
  116. var mesh = new THREE.Mesh( geometry, material5 );
  117. mesh.position.set(.05, -0.19, 0 );
  118. scene.add( mesh );
  119. } );
  120. var loader6 = new THREE.VTKLoader();
  121. loader6.addEventListener( 'load', function ( event ) {
  122. var geometry = event.content;
  123. var mesh = new THREE.Mesh( geometry, material6 );
  124. mesh.position.set(.05, -0.19, 0 );
  125. scene.add( mesh );
  126. } );
  127. var loader7 = new THREE.VTKLoader();
  128. loader7.addEventListener( 'load', function ( event ) {
  129. var geometry = event.content;
  130. var mesh = new THREE.Mesh( geometry, material7 );
  131. mesh.position.set(.05, -0.19, 0 );
  132. scene.add( mesh );
  133. } );
  134. var loader8 = new THREE.VTKLoader();
  135. loader8.addEventListener( 'load', function ( event ) {
  136. var geometry = event.content;
  137. var mesh = new THREE.Mesh( geometry, material8 );
  138. mesh.position.set(.05, -0.19, 0 );
  139. scene.add( mesh );
  140. } );
  141. var loader9 = new THREE.VTKLoader();
  142. loader9.addEventListener( 'load', function ( event ) {
  143. var geometry = event.content;
  144. var mesh = new THREE.Mesh( geometry, material9 );
  145. mesh.position.set(.05, -0.19, 0 );
  146. scene.add( mesh );
  147. } );
  148. loader.load( "lungs.vtk" );
  149. // renderer
  150. renderer = new THREE.WebGLRenderer( { antialias: false } );
  151. renderer.setSize( window.innerWidth, window.innerHeight );
  152. container = document.createElement( 'div' );
  153. document.body.appendChild( container );
  154. container.appendChild( renderer.domElement );
  155. stats = new Stats();
  156. stats.domElement.style.position = 'absolute';
  157. stats.domElement.style.top = '0px';
  158. container.appendChild( stats.domElement );
  159. //
  160. window.addEventListener( 'resize', onWindowResize, false );
  161. }
  162. function onWindowResize() {
  163. camera.aspect = window.innerWidth / window.innerHeight;
  164. camera.updateProjectionMatrix();
  165. renderer.setSize( window.innerWidth, window.innerHeight );
  166. controls.handleResize();
  167. }
  168. function animate() {
  169. requestAnimationFrame( animate );
  170. controls.update();
  171. renderer.render( scene, camera );
  172. stats.update();
  173. }
  174. </script>
  175. </body>
  176. </html>