Files
three.js/examples/webgl_scene_test_blender.html
T
Mr.doob 76e7ea3461 Added namespace to all the objects that missed it (geometries, uniforms, etc)
WebGLRenderer antialias is off by default (considering Firefox doesn't support it...)
Formatting clean up here and there
2011-04-09 12:38:39 +01:00

479 lines
9.8 KiB
HTML

<!DOCTYPE HTML>
<html lang="en">
<head>
<title>three.js webgl - io - scene loader [blender]</title>
<meta charset="utf-8">
<style type="text/css">
body {
background:#000;
color:#fff;
padding:0;
margin:0;
overflow:hidden;
font-family:georgia;
text-align:center;
}
#info {
position: absolute;
top: 0px; width: 100%;
padding: 5px;
font-family: Monospace;
font-size: 13px;
text-align: center;
z-index:100;
}
#progress {
color:red;
top:7em;
width: 100%;
font-size:3em;
font-variant:small-caps;
font-weight:bold;
position:absolute;
z-index:100;
text-align: center;
text-shadow: #000 0px 0px 10px;
display:none;
}
#start {
color:#fff;
text-shadow: #000 0px 0px 2px;
padding:0.1em 0.3em;
width:3em;
text-align: center;
display:none;
}
.shadow {
-moz-box-shadow: 0px 0px 5px #000;
-webkit-box-shadow: 0px 0px 5px #000;
box-shadow: 0px 0px 5px #000;
}
#progressbar {
text-align: center;
background: white;
width: 250px;
height: 10px;
}
#bar {
background:#d00;
width:50px;
height:10px;
}
.enabled {
color: lime!important;
cursor:pointer;
}
.enabled:hover {
text-shadow: #0f0 0px 0px 5px !important;
}
.disabled {
background:gray;
cursor:default;
}
a { color:red }
canvas { pointer-events:none; z-index:10; }
#log { position:absolute; top:0; display:block; text-align:left; z-index:1000; pointer-events:none; }
#scene_explorer {
background:transparent;
color:#fff;
width:200px;
position:absolute;
text-align:left;
top:0px;
z-index:200;
overflow:auto;
}
#section_exp {
background:rgba(0,0,50,0.5);
padding:0.5em 0;
display:none;
}
#scene_explorer h3 {
font-size:1em;
padding:0;
margin:0;
color:orange;
}
#scene_explorer a {
color:#555;
font-weight:bold;
text-decoration:none;
font-size:1.2em;
font-family:Monospace;
}
#scene_explorer a:hover {
background:#555;
color:rgba(0,0,50,1);
}
.part {
display:none;
padding:0 0 0.5em 2em;
}
</style>
</head>
<body>
<div id="info">
<a href="http://github.com/mrdoob/three.js">three.js</a> - scene loader test [blender]
</div>
<div id="scene_explorer">
<a id="plus_exp" href="#">[+]</a>
<div id="section_exp"></div>
</div>
<div id="progress">
<span id="message">Loading ...</span>
<center>
<div id="progressbar" class="shadow"><div id="bar" class="shadow"></div></div>
<div id="start" class="disabled">Start</div>
</center>
</div>
<pre id="log"></pre>
<script type="text/javascript" src="../build/Three.js"></script>
<script type="text/javascript" src="js/Detector.js"></script>
<script type="text/javascript" src="js/RequestAnimationFrame.js"></script>
<script type="text/javascript" src="js/Stats.js"></script>
<script type="text/javascript">
if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
var SCREEN_WIDTH = window.innerWidth;
var SCREEN_HEIGHT = window.innerHeight;
var container,stats;
var camera, scene, loaded;
var renderer;
var mesh, zmesh, geometry;
var mouseX = 0, mouseY = 0;
var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;
document.addEventListener( 'mousemove', onDocumentMouseMove, false );
init();
animate();
function $( id ) {
return document.getElementById( id );
}
function handle_update( result, pieces ) {
refreshSceneView( result );
renderer.initWebGLObjects( result.scene );
var m, material, count = 0;
for ( m in result.materials ) {
material = result.materials[ m ];
if ( ! ( material instanceof THREE.MeshFaceMaterial ) ) {
if( !material.program ) {
console.log(m);
renderer.initMaterial( material, result.scene.lights, result.scene.fog );
count += 1;
if( count > pieces ) {
//console.log("xxxxxxxxx");
break;
}
}
}
}
}
function init() {
container = document.createElement( 'div' );
document.body.appendChild( container );
var loadScene = createLoadScene();
scene = loadScene.scene;
camera = loadScene.camera;
renderer = new THREE.WebGLRenderer();
renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
renderer.domElement.style.position = "relative";
container.appendChild( renderer.domElement );
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '0px';
stats.domElement.style.right = '0px';
stats.domElement.style.zIndex = 100;
container.appendChild( stats.domElement );
$( "start" ).addEventListener( 'click', onStartClick, false );
var callback_progress = function( progress, result ) {
var bar = 250,
total = progress.total_models + progress.total_textures,
loaded = progress.loaded_models + progress.loaded_textures;
if ( total )
bar = Math.floor( bar * loaded / total );
$( "bar" ).style.width = bar + "px";
count = 0;
for ( var m in result.materials ) count++;
handle_update( result, Math.floor( count/total ) );
}
var callback_sync = function( result ) {
/*
// uncomment to see progressive scene loading
scene = result.scene;
camera = result.currentCamera;
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setClearColor( result.bgColor, result.bgAlpha );
*/
//handle_update( result, 1 );
}
var callback_async = function( result ) {
loaded = result;
$( "message" ).style.display = "none";
$( "progressbar" ).style.display = "none";
$( "start" ).style.display = "block";
$( "start" ).className = "enabled";
handle_update( result, 1 );
}
$( "progress" ).style.display = "block";
var loader = new THREE.SceneLoader();
loader.load( "obj/blenderscene/scene.js", callback_sync, callback_async, callback_progress );
$( "plus_exp" ).addEventListener( 'click', createToggle( "exp" ), false );
}
function setButtonActive( id ) {
$( "start" ).style.backgroundColor = "green";
}
function onStartClick() {
$( "progress" ).style.display = "none";
scene = loaded.scene;
camera = loaded.currentCamera;
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setClearColor( loaded.bgColor, loaded.bgAlpha );
}
function onDocumentMouseMove(event) {
mouseX = ( event.clientX - windowHalfX );
mouseY = ( event.clientY - windowHalfY );
}
function createLoadScene() {
var result = {
scene: new THREE.Scene(),
camera: new THREE.Camera( 65, window.innerWidth / window.innerHeight, 1, 1000 )
};
result.camera.position.z = 100;
var object, geometry, material, light, count = 500, range = 200;
material = new THREE.MeshLambertMaterial( { color:0xffffff } );
geometry = new THREE.Cube( 5, 5, 5 );
for( var i = 0; i < count; i++ ) {
object = new THREE.Mesh( geometry, material );
object.position.x = ( Math.random() - 0.5 ) * range;
object.position.y = ( Math.random() - 0.5 ) * range;
object.position.z = ( Math.random() - 0.5 ) * range;
object.rotation.x = Math.random() * 6;
object.rotation.y = Math.random() * 6;
object.rotation.z = Math.random() * 6;
object.matrixAutoUpdate = false;
object.updateMatrix();
result.scene.addObject( object );
}
result.scene.matrixAutoUpdate = false;
light = new THREE.PointLight( 0xffffff );
result.scene.addLight( light );
light = new THREE.DirectionalLight( 0x111111 );
light.position.x = 1;
result.scene.addLight( light );
return result;
}
//
function animate() {
requestAnimationFrame( animate );
render();
stats.update();
}
function render() {
camera.position.x += ( mouseX - camera.position.x ) * .001;
camera.position.y += ( - mouseY - camera.position.y ) * .001;
renderer.render( scene, camera );
}
function log( text ) {
var e = $("log");
e.innerHTML = text + "<br/>" + e.innerHTML;
}
// Scene explorer user interface
function toggle( id ) {
var scn = $( "section_" + id ).style,
btn = $( "plus_" + id );
if ( scn.display == "block" ) {
scn.display = "none";
btn.innerHTML = "[+]";
}
else {
scn.display = "block";
btn.innerHTML = "[-]";
}
}
function createToggle( label ) { return function() { toggle( label ) } };
function refreshSceneView( result ) {
$( "section_exp" ).innerHTML = generateSceneView( result );
var config = [ "obj", "geo", "mat", "tex", "lit", "cam" ];
for ( var i = 0; i < config.length; i++ )
$( "plus_" + config[i] ).addEventListener( 'click', createToggle( config[i] ), false );
}
function generateSection( label, id, objects ) {
var html = "";
html += "<h3><a id='plus_" + id + "' href='#'>[+]</a> " + label + "</h3>";
html += "<div id='section_" + id + "' class='part'>";
for( var o in objects ) {
html += o + "<br/>";
}
html += "</div>";
return html;
}
function generateSceneView( result ) {
var config = [
[ "Objects", "obj", result.objects ],
[ "Geometries", "geo", result.geometries ],
[ "Materials", "mat", result.materials ],
[ "Textures", "tex", result.textures ],
[ "Lights", "lit", result.lights ],
[ "Cameras", "cam", result.cameras ]
];
var html = "";
for ( var i = 0; i < config.length; i++ )
html += generateSection( config[i][0], config[i][1], config[i][2] );
return html;
}
</script>
</body>
</html>