加载obj模型和mtl材质文件 Three.js
2023-03-14 22:55:50 时间
原文:
https://threejs.org/examples/?q=obj#webgl_loader_obj_mtl
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>obj Viewer</title>
<style>
body {
margin: 0;
overflow: hidden;
}
.label {
color: #0F0;
font-family: sans-serif;
padding: 2px;
background: rgba(0, 0, 0, .6);
}
</style>
<link type="text/css" rel="stylesheet" href="css/index.css">
</head>
<body>
</body>
<script src="src/dat.gui.min.js"></script>
<script src="src/three.min.js"></script>
<script src="src/DDSLoader.js"></script>
<script src="src/MTLLoader.js"></script>
<script src="src/OBJLoader.js"></script>
<script src="src/OrbitControls.js"></script>
<script type="text/javascript">
var scene = new THREE.Scene();
var camera, renderer, labelRenderer;
addLights();
addCameras();
addMisc();
addControllers();
loadModels();
render();
function QueryPara(name) {
var regExp = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var info = window.location.search.substr(1).match(regExp);
if (info != null) return unescape(info[2]); return null;
}
function render() {
renderer.render(scene, camera);
requestAnimationFrame(render);
}
function addLights() {
var dLight = new THREE.DirectionalLight(0xffffff, 0.5);
dLight.castShadow = true;
dLight.position.set(0, 80, 80);
//Set up shadow properties for the light
dLight.shadow.camera.near = 20; //产生阴影的最近距离
dLight.shadow.camera.far = 200; //产生阴影的最远距离
dLight.shadow.camera.left = -200; //产生阴影距离位置的最左边位置
dLight.shadow.camera.right = 200; //最右边
dLight.shadow.camera.top = 200; //最上边
dLight.shadow.camera.bottom = -80; //最下面
scene.add(dLight);
var ambient = new THREE.AmbientLight(0x888888);
scene.add(ambient);
}
function addCameras() {
var width = window.innerWidth; //
var height = window.innerHeight; //
var k = width / height; //
var s = 100; //
//
camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 3000);
camera.position.set(200, 300, 200); //
camera.lookAt(scene.position); //
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(width, height);
renderer.setClearColor(0xb9d3ff, 1);//
// 开启阴影支持
renderer.shadowMap.enabled = true;
// 阴影类型
renderer.shadowMap.type = THREE.BasicShadowMap;//THREE.PCFSoftShadowMap;
document.body.appendChild(renderer.domElement); //body
}
function addMisc() {
scene.add(new THREE.AxesHelper(300));
window.addEventListener('resize', onWindowResize, false);
}
function addControllers() {
var controls = new THREE.OrbitControls(camera, renderer.domElement);
}
var manager = new THREE.LoadingManager();
manager.addHandler(/.dds$/i, new DDSLoader());
function onProgress(xhr) {
if (xhr.lengthComputable) {
var percentComplete = xhr.loaded / xhr.total * 100;
console.log('model ' + Math.round(percentComplete, 2) + '% downloaded');
}
}
function onError() { }
function loadModels() {
var fileName = QueryPara("obj") || 'GateValve';
new MTLLoader(manager)
.setPath('models/')
.load(fileName+'.mtl', function (materials) {
materials.preload();
console.log("materials:", materials);
new OBJLoader(manager)
.setMaterials(materials)
.setPath('models/')
.load(fileName+'.obj', function (obj) {
obj.scale.set(1, 1, 1);
obj.position.set(0, 0, 0);
obj.rotation.x += 0;
obj.castShadow = true;
scene.add(obj);
console.log(obj.children);
}, onProgress, onError);
});
}
function onWindowResize() {
var width = window.innerWidth;
var height = window.innerHeight;
camera.aspect = width / height;
camera.updateProjectionMatrix();
renderer.setSize(width, height);
render();
}
</script>
</html>
效果:
(正文完!)
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的