发现一个问题,相机注视目标必须用 three.vector3,否则相机不知道lookat谁去了!
上代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="threejsBuild/build/three.js" ></script>
<style type="text/css">
div#canvas-frame {
border: none;
cursor: pointer;
width: 100%;
height: 600px;
background-color: #EEEEEE;
}
</style>
</head>
<body id="canvas-frame" >
<script>
var renderer;
var width=window.innerWidth;
var height = window.innerHeight;
function initThree() {
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
renderer.setClearColor(0x000000, 1.0);
}
var camera;
function initCamera() {
camera = new THREE.PerspectiveCamera(75, width / height, 1, 10000);
camera.position.x = 100;
camera.position.y = 0;
camera.position.z = 0;
camera.up.x = 0;
camera.up.y = 0;
camera.up.z = 1;
var pos=new THREE.Vector3(0,0,0);
// camera.lookAt(pos);
}
var scene;
function initScene() {
scene = new THREE.Scene();
}
var light;
function initLight() {
light = new THREE.DirectionalLight(0xFF0000, 1.0, 0);
light.position.set(100, 100, 200);
scene.add(light);
}
var cube;
function initObject() {
var geometry = new THREE.CubeGeometry(1,1,1);
var material = new THREE.MeshBasicMaterial({color: 0x00ff00});
cube = new THREE.Mesh(geometry, material);
scene.add(cube);
//camera.lookAt(cube.position);
}
var text;
var mirror;
function initText(){
var loader = new THREE.FontLoader();
loader.load('threejsBuild/examples/fonts/helvetiker_bold.typeface.json',function(response){
var font = response;
var textGeometry = new THREE.TextGeometry("hello threejs!",{
"font" : font,
"size" : 70,
"height" : 20,
"bevelEnabled" : true,
"bevelSize": 2
})
text = new THREE.Mesh(textGeometry,new THREE.MultiMaterial( [
new THREE.MeshPhongMaterial( { color: 0xffffff, shading: THREE.FlatShading } ),
new THREE.MeshPhongMaterial( { color: 0xffffff, shading: THREE.SmoothShading } )
] ))
textGeometry.computeBoundingBox();
var centerOffset = -0.5 * (textGeometry.boundingBox.max.x-textGeometry.boundingBox.min.x);
text.position.x = centerOffset;
text.position.y = 30;
text.lookAt(camera.position);
text.rotation.x = Math.PI;
mirror = new THREE.Mesh(textGeometry,new THREE.MultiMaterial( [
new THREE.MeshPhongMaterial( { color: 0xffffff, shading: THREE.FlatShading } ),
new THREE.MeshPhongMaterial( { color: 0xffffff, shading: THREE.SmoothShading } )
] ));
mirror.rotation.x = - Math.PI;
mirror.position.x = centerOffset;
mirror.position.z = 20;
mirror.position.y = -30;
scene.add(text);
scene.add(mirror);
mirror.lookAt(camera.position);
camera.lookAt(text.position);
var plane = new THREE.Mesh(
new THREE.PlaneBufferGeometry( 10000, 10000 ),
new THREE.MeshBasicMaterial( { color: 0xfffffff, opacity: 0.5, transparent: true } )
);
plane.rotation.x = -Math.PI/2;
plane.position.y = 0;
scene.add(plane);
});
}
function render()
{
requestAnimationFrame(render);
renderer.clear();
//cube.rotation.y += 0.1;
renderer.render(scene, camera);
}
function threeStart() {
initThree();
initCamera();
initScene();
initLight();
// initObject();
initText();
render();
}
threeStart();
</script>
</body>
</html>
后续将js文件单独提出来使用。