1、创建一个基础场景

包含场景scene、透视相机PerspectiveCamera、控制器OrbitControls、点光源PointLight、半球光HemisphereLight、渲染器WebGLRenderer,以及今天的主角FBXLoader fbx加载器

场景背景颜色设置为0xf65144scene = new THREE.Scene();

scene.fog = new THREE.Fog(0x000000, 600, 3000); //雾化场景scene.background = new THREE.Color(0xf65144);复制代码

透视相机位置设置为正对x轴camera = new THREE.PerspectiveCamera(  45,  window.innerWidth / window.innerHeight,  1,  10000);

camera.position.set(0, 0, 200); //设置相机位置复制代码

灯光采用半球光和点光源两种

半球光用来渲染整个场景的颜色,点光源用来渲染模型高光// 设置光照// 半球光const hemisphereLight = new THREE.HemisphereLight(  0xffffff,  0x444444,  1);// hemisphereLight.position.set(0, 200, 0);scene.add(hemisphereLight);// 点光源light = new THREE.PointLight(0xffff00, 2, 100);

light.position.set(0, 0, 0);

scene.add(light);复制代码

...

所有基础元素创建完成后,可以在页面看到这样的场景

接下载要使用到fbxloader

文件的引用复制代码

因为是在html内写的代码,所以路径为当前文件的相对路径,可以根据自己文件位置进行更改

官网内有对于fbx加载器的使用,这里不赘述,主要讲一下材质和贴图

// 模型地址const url = "../model/fbx/beats耳机/source/beats_highpoly.fbx"const loader = new THREE.FBXLoader()

loader.load(

url,  function (loadedModel) {console.log(loadedModel);

mesh = loadedModel.children[0].clone();

scene.add(mesh);

}

);复制代码

在加载的过程中遇到一些小问题,fbx依赖的Inflate.min.js文件找不到

需要在js中引入intflate.min.js      复制代码

加载后可以看出来,没有对模型进行材质的修改和贴图,材质本身是黑色的

在上面代码中,我们打印一下loadedModel 是一个组对象group,组对象没有材质,而且并不是咱们最终要加载的模型对象,可以看一下组对象的children中的结果,有一个mesh对象,这是咱们需要渲染的对象,打印一下可以看到material材质对象

模型本身的材质是一个Phong网格材质

那么一会的贴图也会选择这样的材质

首选如果要贴图肯定需要将贴图加载为纹理,这样就要用到 TextureLoaderconst textureLoader = new THREE.TextureLoader();const textureUrl = "../model/fbx/beats耳机/textures/beats_red.png"const textureNormal = textureLoader.load(

textureUrl

);复制代码

原本贴图样式

这张图,是3D工程师导出工程的时候通过某种手段生成的,感兴趣的童鞋可以跟身边的3D工程师了解

至于每个贴图点,每个位置能够对应上模型,也是在3D工程生成时候计算好的,作为前端只是拿来用就可以

接下来对模型进行材质的重新渲染mesh = loadedModel.children[0].clone();

mesh.material = new THREE.MeshPhongMaterial({

color: 0x00ffff,

})

console.log(mesh);

scene.add(mesh);复制代码

先小试一下

通过已经被改变的颜色不难发现,可以对模型的材质进行修改

接下来需要将我们加载好的纹理贴图和模型结合上,

3D工程师在交给你一项3D工程的时候会有很多贴图,比如发光贴图,凹凸贴图、颜色贴图、环境贴图、等等...

可以通过这里看出来之前默认为null的表示之前并未对它进行材质贴图,也可以通过官网上面的material查看这些贴图具体什么作用

此次我们要对贴图进行重新渲染的是map 颜色贴图

所以将map设置为之前定义的 textureNormal 即可// 模型地址const url = "../model/fbx/beats耳机/source/beats_highpoly.fbx";const loader = new THREE.FBXLoader();

loader.load(url, function (loadedModel) {  const textureLoader = new THREE.TextureLoader();  const textureUrl =  "../model/fbx/beats耳机/textures/beats_red.png"

const textureNormal = textureLoader.load(

textureUrl

);

mesh = loadedModel.children[0].clone();

mesh.material.map = textureNormal  console.log(loadedModel.children[0]);

scene.add(mesh)

});复制代码

接下来我们就可以通过一些微调改变一下模型材质的展示

mesh.material中有一个属性shininess 控制高光显示程度,可以对它进行控制,修改高光具体显示程度

首先要调整的是灯光,我们之前对灯光只是设置上了,并没有调整打光的位置// 设置光照

// 半球光

const hemisphereLight = new THREE.HemisphereLight(

0xffaea8, // 天空发出颜色

0x7f0900, // 地面发出颜色

1 // 光照强度

);

hemisphereLight.position.set(0, 50, 60);

scene.add(hemisphereLight);

// 聚光灯

const spotLight = new THREE.SpotLight(0xffffff);

spotLight.position.set(100, 60, 100);

scene.add(spotLight);

const spotLightHelper = new THREE.SpotLightHelper(spotLight);

scene.add(spotLightHelper);复制代码

在渲染动画中,将点光源进行一个位置的转换,这样就可以调整出不同位置的高光function animate() {

requestAnimationFrame(animate);

const time = Date.now() * 0.0005;

if (light) {

light.position.x = Math.sin(time * 0.7) * 50;

// light.position.y = Math.cos(time * 0.3) * 50;

light.position.z = Math.sin(time * 0.5) * 50;

}

renderer.render(scene, camera);

}复制代码

最终调整的效果如下:

Html监听Fbx文件加载,一些three.js的基础——加载FBX模型相关推荐

  1. 使用Epoll 能监听普通文件吗?

    epoll 是 Linux 系统中常用的多路复用 I/O 组件,一般用于监听 socket 是否能够进行 I/O 操作.那么,epoll 能监听普通文件吗? epoll 是 Linux 系统中常用的多 ...

  2. 玩转oracle 11g(24):数据文件设置自扩展和监听日志文件过大处理

    10. 数据文件为打开自动扩展 select * from dba_data_files; 查询结果: AUTOEXTENSIBLE MAXBYTES MAXBLOCKS INCREMENT_BY N ...

  3. linux+默认监听+目录,C# 时时监听目录文件改动

    C# 时时监听目录文件改动: public static class DirectoryListen { public static string CountListXmlPath = CountCo ...

  4. oracle11g日志分析,Oracle11g在Windows环境下监听日志文件达到4G问题解决方案

    1.症状表现:应用无法启动,数据库连接异常缓慢,或直接超时,无法连接. 2.病情分析:监听日志文件listener.log中记录着监听连接的各种信息,并不断增长,最终达到4G. 3.解决方案一:治标, ...

  5. Linux网络编程(六)-高并发服务器03-I/O多路复用03:epoll【红黑树;根节点为监听节点】【无宏FD_SETSIZE限制;不需每次都将要监听的文件描述符从应用层拷贝到内核;不需遍历树】

    一.epoll概述 epoll的本质是一个[红黑树].监听结点为根节点. 大量并发,少量活跃效率高. epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并 ...

  6. php 监控文件夹变化,swoole 开发中监听目录文件变化, 自动重启项目

    在使用swoole的项目中, 在开发时, 会经常改动代码并查看效果, 由于swoole项目是常驻内存的, 代码改动后并不会影响已经在运行中并加载过该代码的程序, 所以需要重启项目. 为了在改动代码之后 ...

  7. flume监听服务器文件,flume监听服务器端口数据库

    flume监听服务器端口数据库 内容精选 换一换 本章节为您介绍以下内容:准备弹性云服务器作为GDS服务器在使用GDS导入导出数据之前,需要准备一台或多台与GaussDB(DWS) 集群在相同VPC内 ...

  8. html 监听input输入框的值,利用原生JS实时监听input框输入值

    利用原生JS实时监听input框输入值 原生JS中可以使用oninput,onpropertychange,onchange oninput,onpropertychange,onchange的用法 ...

  9. python监听键盘库_python监听、操作键盘鼠标库pynput详细教程|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ § 0.0.0 前言 监听.操作鼠标.键盘是实现自动化的捷径,比如我实现自动化签到用到了模拟键盘操作. p ...

  10. html鼠标滚轮监听,jQuery - 鼠标滚轮插件jquery.mousewheel.js详解(上下、左右滚动监听)...

    1,插件介绍 jquery.mousewheel.js是一个用于添加跨浏览器的鼠标滚轮支持的 jQuery插件. 2,使用说明 (1)使用该插件,只需将 mousewheel事件绑定到一个元素上即可. ...

最新文章

  1. 桌面倒计时2.0 涉及知识点详解及源码分享
  2. 在 PHP 中养成 7 个面向对象的好习惯
  3. 吴恩达机器学习笔记11-梯度下降法实践2-学习率
  4. 2015年,Web 进入移动时代
  5. 生活中常见物联网实例_物联网网关常见问题解答(一)
  6. hibernate的环境搭建
  7. Java 求一段代码运行所需要的时间——模板方法设计模式
  8. python代码测试 vim_使用tmux+vim发送测试代码行的键绑定?
  9. chr() 、ord()
  10. C:socket相关的sendto()函数简介
  11. 微软drive服务器,OneDrive:微软云存储服务
  12. 量子化学计算机程序,量子化学程序gaussian原理与功能.ppt
  13. Crystal Reports(水晶报表)安装及拉(PULL)模式/推(PUSH)模式的使用
  14. 演讲稿【物性的神奇】
  15. 使用C++11实现二维坐标转换
  16. Oracle字符串类型扩容隐患
  17. 【Windows】新系统优化设置
  18. Algorithms for Detecting Significantly Mutated Pathways in Cancer
  19. 小程序逆向加密步骤小结
  20. pymongo获取一列数据

热门文章

  1. 【项目二、蜂巢检测项目】二、模型改进:YOLOv5s-ShuffleNetV2
  2. MAC和WINDOWS链接小米路由器移动硬盘方法
  3. ARM处理器开发详解(一)
  4. 一看就懂:阿里云 OSS
  5. SEO网站收录情况分析查询方法(小技巧Tips)
  6. egret环境问题汇总
  7. 实现Discord聊天机器人
  8. 电商-支付相关表的表设计
  9. magicbook屏幕_荣誉Magicbook 15降压笔记本电脑的最佳爆炸现在
  10. kubelet liveness probe源码简析