序言
相信通过前两章的阅读,在项目中你能根据实际情况快速选定需要的几何体与材质。本章将优化这个物体,实质更加真实,加上一些纹理,让其更加细腻。
添加纹理
threejs提供了 TextureLoader,可以使得我们非常方便的添加纹理贴图。
构造函数
TextureLoader() 创建一个新的TextureLoader.
方法
共有方法请参见其基类Loader。
.load ( url : String) : Texture
url — 文件的URL或者路径,也可以为 Data URI.
效果图
纹理贴图(bg2.jpg)
var texture = new THREE.TextureLoader().load( "./bg2.jpg" );
var material = new THREE.MeshPhongMaterial({
color: 0xffffff,
map: texture,
specular:0xd0c7be,
});
完整代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{margin: 0; width: 0;}
body{overflow: hidden;}
</style>
<script src="three.js" type="text/javascript" charset="utf-8"></script>
<script src="OrbitControls.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
</body>
<script type="text/javascript">
//创建场景
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xbbbbbb);
scene.position.x = -1;
scene.position.y = -1;
//创建相机
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
//创建渲染器
var renderer = new THREE.WebGLRenderer();
//设置渲染器大小
renderer.setSize(window.innerWidth, window.innerHeight);
//将渲染器添加到页面中
document.body.appendChild(renderer.domElement);
//点光源
var point = new THREE.PointLight(0xeeeeee);
point.position.set(400, 200, 300); //点光源位置
scene.add(point); //点光源添加到场景中
//辅助线开始
var arrowHelper = new THREE.AxesHelper( 115 );
scene.add(arrowHelper)
var spotLight = new THREE.SpotLight( 0xeeeeee );
spotLight.position.set( 0, 380, 0 );
scene.add( spotLight );
var spotLightHelper = new THREE.SpotLightHelper( spotLight );
scene.add( spotLightHelper );
var helper = new THREE.CameraHelper( camera );
scene.add( helper );
//辅助线结束
var texture = new THREE.TextureLoader().load( "./bg2.jpg" );
//创建立方体
var geometry = new THREE.TorusKnotBufferGeometry( 10, 4);
var material = new THREE.MeshPhongMaterial({
color: 0xffffff,
map: texture,
specular:0xd0c7be,
});
var torusKnot = new THREE.Mesh( geometry, material );
//创建网格 包含立方体与立方体上的材质
scene.add(torusKnot)
//可以适当调整相机位置
camera.position.z = 56;
//渲染循环、动画循环
function render() {
renderer.render(scene,camera);//执行渲染操作
}
render();
var controls = new THREE.OrbitControls(camera,renderer.domElement);//创建控件对象
controls.addEventListener('change', render);//监听鼠标、键盘事件
</script>
</html>