提交 ef7ead99 编写于 作者: M Mr.doob

Sprites example refactoring and clean up.

上级 71fed600
......@@ -18,13 +18,12 @@
<body>
<script src="../build/three.min.js"></script>
<script src="js/libs/stats.min.js"></script>
<script>
var stats;
var camera, scene, renderer;
var cameraOrtho, sceneOrtho;
var camera, cameraOverlays, scene, sceneOverlays, renderer;
var spriteTL, spriteTR, spriteBL, spriteBR, spriteC;
var mapC;
......@@ -35,22 +34,22 @@
function init() {
cameraOverlays = new THREE.OrthographicCamera( 0,window.innerWidth, window.innerHeight, 0, -10,10);
camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 2100 );
camera.position.z = 1500;
scene = new THREE.Scene();
sceneOverlays = new THREE.Scene();
cameraOrtho = new THREE.OrthographicCamera( 0, window.innerWidth, window.innerHeight, 0, - 10, 10 );
scene = new THREE.Scene();
scene.fog = new THREE.Fog( 0x000000, 1500, 2100 );
sceneOrtho = new THREE.Scene();
// create sprites
var amount = 200;
var radius = 500;
var mapA = THREE.ImageUtils.loadTexture( "textures/sprite0.png", undefined, function() { createHUDSprites() } );
var mapA = THREE.ImageUtils.loadTexture( "textures/sprite0.png", undefined, createHUDSprites );
var mapB = THREE.ImageUtils.loadTexture( "textures/sprite1.png" );
mapC = THREE.ImageUtils.loadTexture( "textures/sprite2.png" );
......@@ -90,39 +89,6 @@
scene.add( group );
// add 2d-sprites
var createHUDSprites = function() {
var scaleX = mapA.image.width;
var scaleY = mapA.image.height;
var materialA1 = new THREE.SpriteMaterial( { map: mapA, opacity: 0.25 } );
var materialA2 = new THREE.SpriteMaterial( { map: mapA, opacity: 0.5 } );
var materialA3 = new THREE.SpriteMaterial( { map: mapA, opacity: 1 } );
// Simulating deprecated option "alignment: THREE.SpriteAlignment.topLeft"
var x=100+scaleX/2;
var y=window.innerHeight-100-scaleY/2;
sprite = new THREE.Sprite( materialA1 );
sprite.position.set( x, y, 1 );
sprite.scale.set( scaleX, scaleY, 1 );
sceneOverlays.add( sprite );
sprite = new THREE.Sprite( materialA2 );
sprite.position.set( x+50, y-50, 2 );
sprite.scale.set( scaleX, scaleY, 1 );
sceneOverlays.add( sprite );
sprite = new THREE.Sprite( materialA3 );
sprite.position.set( x+100, y-100, 3 );
sprite.scale.set( scaleX, scaleY, 1 );
sceneOverlays.add( sprite );
}
// renderer
renderer = new THREE.WebGLRenderer();
......@@ -131,14 +97,6 @@
renderer.autoClear = false; // To allow render overlay on top of sprited sphere
document.body.appendChild( renderer.domElement );
// stats
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '0px';
stats.domElement.style.zIndex = 100;
document.body.appendChild( stats.domElement );
//
......@@ -146,13 +104,63 @@
}
function onWindowResize() {
function createHUDSprites ( texture ) {
var material = new THREE.SpriteMaterial( { map: texture } );
var width = material.map.image.width;
var height = material.map.image.height;
spriteTL = new THREE.Sprite( material );
spriteTL.scale.set( width, height, 1 );
sceneOrtho.add( spriteTL );
spriteTR = new THREE.Sprite( material );
spriteTR.scale.set( width, height, 1 );
sceneOrtho.add( spriteTR );
camera.aspect = window.innerWidth / window.innerHeight;
cameraOverlays = new THREE.OrthographicCamera( 0,window.innerWidth, window.innerHeight, 0, -10,10);
spriteBL = new THREE.Sprite( material );
spriteBL.scale.set( width, height, 1 );
sceneOrtho.add( spriteBL );
spriteBR = new THREE.Sprite( material );
spriteBR.scale.set( width, height, 1 );
sceneOrtho.add( spriteBR );
spriteC = new THREE.Sprite( material );
spriteC.scale.set( width, height, 1 );
sceneOrtho.add( spriteC );
updateHUDSprites();
};
function updateHUDSprites () {
var material = spriteTL.material;
var widthHalf = material.map.image.width / 2;
var heightHalf = material.map.image.height / 2;
spriteTL.position.set( widthHalf, window.innerHeight - heightHalf, 1 ); // top left
spriteTR.position.set( window.innerWidth - widthHalf, window.innerHeight - heightHalf, 2 ); // top right
spriteBL.position.set( widthHalf, heightHalf, 0 ); // bottom left
spriteBR.position.set( window.innerWidth - widthHalf, heightHalf, 3 ); // bottom right
spriteC.position.set( window.innerWidth * 0.5, window.innerHeight * 0.5, 4 ); // center
};
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
cameraOrtho.right = window.innerWidth;
cameraOrtho.top = window.innerHeight;
cameraOrtho.updateProjectionMatrix();
updateHUDSprites();
renderer.setSize( window.innerWidth, window.innerHeight );
}
......@@ -160,9 +168,7 @@
function animate() {
requestAnimationFrame( animate );
render();
stats.update();
}
......@@ -201,10 +207,9 @@
group.rotation.y = time * 0.75;
group.rotation.z = time * 1.0;
time += 0.02;
renderer.clear();
renderer.render( scene, camera );
renderer.render( sceneOverlays, cameraOverlays );
renderer.render( sceneOrtho, cameraOrtho );
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册