three.js学习点滴(1) — 创建场景

创建场景直接上代码 :

<!DOCTYPE html>
<html lang="en">
<head>
<title>CreateScene.html</title>
</head>
<body>
<div id = "container3d"></div>
<script src="js/three.js"></script>
<script src="js/OrbitControls.js"></script>
<script src="js/Detector.js"></script>
<script src="js/stats.min.js"></script>
<script>

var controls;
var container,stats;
var camera, scene;
var renderer;

var mesh, zmesh, geometry;

var mouseX = 0, mouseY = 0;
var isShowFPS = true;

initScene();
animate();
//初始化场景
function initScene(){
	//场景 
	scene = new THREE.Scene();
	//摄像机
	camera = new THREE.PerspectiveCamera(45,window.innerWidth / window.innerHeight , 1,20000);
	camera.position.set(0, 180,200);
	
	//控制器
	controls = new THREE.OrbitControls( camera );
	controls.addEventListener( 'change', render );

	//灯光
	var ambientLight = new THREE.AmbientLight(0xffffff);
    scene.add(ambientLight);
	// directional lighting
	var directionalLight = new THREE.DirectionalLight(0xffffff);  //美术场景渲染后,可以不用打这么多灯光了
	directionalLight.position.set(0, 0, 10);
	scene.add(directionalLight);
	
	//three.js自带的几何体(以平面为例)
	plane = new THREE.Mesh(new THREE.PlaneGeometry(500 ,500, 8 , 8 ) , new THREE.MeshBasicMaterial({color : 0x000000 , opacity : 0.25 , transparent : false , wireframe : true}));
	plane.visible = true;
	plane.position.set(-2 , 1,0);
	plane.rotation.set(-Math.PI/2,0,0 );
	scene.add(plane);
	// 容器 
	container = document.getElementById("container3d");
	//渲染器
	renderer = new THREE.WebGLRenderer({antialias:true});
	renderer.setSize(window.innerWidth,window.innerHeight);
	//renderer.setScissor( 200, 200, window.innerWidth, window.innerHeight );
	//renderer.setViewport( 300, 0, window.innerWidth, window.innerHeight );
	container.appendChild(renderer.domElement);
	
	//  显示帧率
	if(isShowFPS){
		stats = new Stats();
		stats.domElement.style.position = 'absolute';
		stats.domElement.style.bottom = '0px';
		stats.domElement.style.zIndex = 100;
		container.appendChild( stats.domElement );
	}

	// SKYBOX/FOG  天空盒子
	//scene.fog = new THREE.FogExp2( 0x9999ff, 0.00025 );  //是否有雾效果
	var materialArray = [];
	materialArray.push(new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( "textures/skybox/px.jpg" ) }));
	materialArray.push(new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( "textures/skybox/nx.jpg" ) }));
	materialArray.push(new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( "textures/skybox/py.jpg" ) }));
	materialArray.push(new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( "textures/skybox/ny.jpg" ) }));
	materialArray.push(new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( "textures/skybox/pz.jpg" ) }));
	materialArray.push(new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( "textures/skybox/nz.jpg" ) }));
	for (var i = 0; i < 6; i++){
	   materialArray[i].side = THREE.BackSide;
	}
	var skyboxMaterial = new THREE.MeshFaceMaterial( materialArray );
	var skyboxGeom = new THREE.CubeGeometry( 2000, 2000,2000, 1, 3, 1 );
	var skybox = new THREE.Mesh( skyboxGeom, skyboxMaterial );
	scene.add( skybox );

	//红小球精灵
	var ballTexture = THREE.ImageUtils.loadTexture("textures/ball.png");

	var ballMaterial = new THREE.SpriteMaterial({map : ballTexture , useScreenCoordinates : true , alignment : THREE.SpriteAlignment.center});
	ballSprite = new THREE.Sprite(ballMaterial);
	ballSprite.scale.set(32,32,1.0);
	ballSprite.position.set(500,500,0);
	scene.add(ballSprite);
	
	//绑定事件
	window.addEventListener( 'resize', onWindowResize, false );
};


function onWindowResize() {

	windowHalfX = window.innerWidth / 2;
	windowHalfY = window.innerHeight / 2;

	camera.aspect = window.innerWidth / window.innerHeight;
	camera.updateProjectionMatrix();
	renderer.setSize( window.innerWidth, window.innerHeight );
}

function animate() {
	requestAnimationFrame( animate );
	render();
	controls.update();
	stats.update();
}
function render() {
	renderer.render( scene, camera );
}
</script>

</body>
</html>

运行结果 :


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值