<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
body { margin: 0; }
canvas { width: 100%; height: 100%; }
</style>
</head>
<body>
<script src="js/three.min.js"></script>
<script src="js/controls/OrbitControls.js"></script>
<script src="js/ThreeBSP.js"></script>
<script>
var scene;
function initScene(){
scene = new THREE.Scene();
}
function updateControls() {
controls.update();
}
var camera;
function initCamera(){
camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000);
camera.position.z = 40;
camera.position.y = 40;
camera.position.x = 20;
camera.lookAt({x:0,y:0,z:0});
controls = new THREE.OrbitControls( camera );
controls.addEventListener( 'change', updateControls );
}
var renderer;
function initRender(){
renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
renderer.setClearColor(0xFFFFFF, 1.0);
}
var light;
function initLight() {
// A start
// 第二个参数是光源强度,你可以改变它试一下
light = new THREE.DirectionalLight(0xFF0000,1);
// 位置不同,方向光作用于物体的面也不同,看到的物体各个面的颜色也不一样
light.position.set(0,0,1);
scene.add(light);
// A end
}
function initObject(){
// 坐标轴
var axis = new THREE.AxisHelper(20);
// 在场景中添加坐标轴
scene.add(axis);
// 地面
var floor = new THREE.BoxGeometry( 70, 100, 1);
//var floorMaterial = new THREE.MeshBasicMaterial( {color: '#87CEEB', wireframe: false } );
var floorMaterial = new THREE.MeshBasicMaterial( {color: '#87CEEB', wireframe: false } );
var texture = THREE.ImageUtils.loadTexture("images/floor.jpg",null,function(t)
{
});
texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set(40, 40);
var material = new THREE.MeshBasicMaterial({map:texture});
var floorCube = new THREE.Mesh( floor, material );
scene.add( floorCube );
floorCube.rotation.x += 0.5*Math.PI;
// 墙面
var cubeGeometry = new THREE.BoxGeometry(1, 10, 60);
// 创建墙面材料
//var cubeMaterial = new THREE.MeshBasicMaterial({ color: '#8B0A50', wireframe: false});
var cubeMaterial = new THREE.MeshBasicMaterial({ color: '#8B0A50', wireframe: false});
/************各个面设置不同的纹理*********/
var matArray = [];
//matArray.push(new THREE.MeshBasicMaterial({color: 0x9cb2d1}));
matArray.push(new THREE.MeshBasicMaterial({color: 0x9cb2d1}));
matArray.push(new THREE.MeshBasicMaterial({color: 0xafc0ca}));
matArray.push(new THREE.MeshBasicMaterial({color: 0xd6e4ec}));
matArray.push(new THREE.MeshBasicMaterial({color: 0x9cb2d1}));
matArray.push(new THREE.MeshBasicMaterial({color: 0x9cb2d1}));
matArray.push(new THREE.MeshBasicMaterial({color: 0x9cb2d1}));
var faceMaterial = new THREE.MeshFaceMaterial(matArray);
var matArray = [];
matArray.push(new THREE.MeshBasicMaterial({color: 0xafc0ca}));
matArray.push(new THREE.MeshBasicMaterial({color: 0x9cb2d1}));
matArray.push(new THREE.MeshBasicMaterial({color: 0xd6e4ec}));
matArray.push(new THREE.MeshBasicMaterial({color: 0x9cb2d1}));
matArray.push(new THREE.MeshBasicMaterial({color: 0x9cb2d1}));
matArray.push(new THREE.MeshBasicMaterial({color: 0x9cb2d1}));
var faceMaterial1 = new THREE.MeshFaceMaterial(matArray);
// 合成立方体
//var cube = new THREE.Mesh( cubeGeometry, cubeMaterial );
var cube = new THREE.Mesh( cubeGeometry, faceMaterial1 );
// 设置墙面位置
cube.position.x = -15;
cube.position.y = 5;
cube.position.z = 0;
// 在场景中添加墙面
scene.add(cube);
// 墙面1
var cubeGeometry = new THREE.BoxGeometry(1, 10, 30);
// 合成立方体
var cube = new THREE.Mesh( cubeGeometry, faceMaterial1 );
// 设置墙面位置
cube.position.x = 0;
cube.position.y = 5;
cube.position.z = 30;
cube.rotation.y += 0.5*Math.PI;
// 在场景中添加墙面
scene.add(cube);
// 墙面2
var cubeGeometry = new THREE.BoxGeometry(1, 10, 60);
// 合成立方体
var cube = new THREE.Mesh( cubeGeometry, faceMaterial );
// 设置墙面位置
cube.position.x = 15;
cube.position.y = 5;
cube.position.z = 0;
// 在场景中添加墙面
scene.add(cube);
// 墙面3
var cubeGeometry = new THREE.BoxGeometry(1, 10, 30);
// 合成立方体
//var cube = new THREE.Mesh( cubeGeometry, faceMaterial );
var cube = new THREE.Mesh( cubeGeometry ); // 设置墙面位置
cube.position.x = 0;
cube.position.y = 5;
cube.position.z = -30;
cube.rotation.y += 0.5*Math.PI;
// 在场景中添加墙面
// scene.add(cube);
// 门
var door = new THREE.BoxGeometry(1, 8, 9);
// 创建门材料
//var doorMaterial = new THREE.MeshBasicMaterial({ color: '#FFFF00', wireframe: true,transparent:true,opacity:0.6});
//var door_cube = new THREE.Mesh( door, faceMaterial);
var door_cube = new THREE.Mesh( door);
// 设置门位置
door_cube.position.x = 0;
door_cube.position.y = 5;
door_cube.position.z = -30;
door_cube.rotation.y += 0.5*Math.PI;
//scene.add(cube);
var sphere1BSP = new ThreeBSP(cube);
var cube2BSP = new ThreeBSP(door_cube);
resultBSP = sphere1BSP.subtract(cube2BSP);
result = resultBSP.toMesh();
result.material.shading = THREE.FlatShading;
result.geometry.computeFaceNormals();
result.geometry.computeVertexNormals();
result.material.needsUpdate = true;
result.geometry.buffersNeedUpdate = true;
result.geometry.uvsNeedUpdate = true;
scene.add(result);
//var l = new THREE.Line( drawShape().createPointsGeometry(10), new THREE.LineBasicMaterial({color:0xff3333, linewidth:2}));
//scene.add(l);
/*var options = {
amount: 10,
bevelThickness: 2,
bevelSize: 1,
bevelSegments: 3,
bevelEnabled: true,
curveSegments: 12,
steps: 1
};
shape = createMesh(new THREE.ExtrudeGeometry(drawShape(), options));*/
}
function drawShape(){
var shape = new THREE.Shape();
shape.moveTo(10, 10);
shape.lineTo(10, 40);
shape.lineTo(40, 40);
shape.lineTo(10, 10);
return shape;
}
function rend
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
ThreeJS-RXL.rar (16个子文件)
images
floor.jpg 8KB
index.html 8KB
js
controls
EditorControls.js 8KB
DeviceOrientationControls.js 3KB
FlyControls.js 7KB
PointerLockControls.js 1KB
MouseControls.js 1KB
TransformControls.js 32KB
OrbitControls.js 24KB
FirstPersonControls.js 6KB
OrthographicTrackballControls.js 14KB
TrackballControls.js 14KB
DragControls.js 5KB
VRControls.js 2KB
ThreeBSP.js 17KB
three.min.js 421KB
共 16 条
- 1
资源评论
- yangcy92162017-01-17非常谢谢,这是我需要的。
- 淘-2016-10-12棒棒哒,从帖子跟过来下的
- evomap2017-10-24不错对想入门者有帮助
- 达达兽超进化2017-05-15和描述一致,有很大的参考意义。
- mevender2017-09-22终于找到扣洞的方法了,3js的东西还真不太多。
dragonrxl
- 粉丝: 36
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- libjpeg 编译所需的 Win32.mak vs编译libjpeg
- 自动驾驶-状态估计和定位-粒子滤波实现和源码.pdf
- 数据可视化-智慧物流服务中心大屏页面.zip
- yolov5,SSD 可能使用到的一些代码
- bbbbbbbbbbbbbbbbbb
- 安卓逆向学习笔记之Frida Stalker 还原OLLVM AES.docx
- 安卓逆向学习笔记之unicorn来trace还原OLLVM Base64.docx
- 基于jquery的自定义表格组件实现
- Nessus最新20240426离线安装插件all-2.0.tar.gz
- 最新版本私钥助记词碰撞器大富豪使用python进行制作通过接口的方式进行验证支持多币种多链多网络一分钟万次验证高出货率
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功