1.安装three.js

bower install three --save

2.在require-backend.js引入three.js

我是在后台展示所以在require-backend中引入

3.在需要展示的模块的js文件使用three.js

我是写的接口 使用ajax调用,也可以在控制器中操作文件转为数组,js读取

define(['jquery', 'bootstrap', 'backend', 'addtabs', 'three', 'echarts', 'echarts-theme', 'template'], function ($, undefined, Backend, Datatable, THREE, Echarts, undefined, Template) {var Controller = {index: function () {$.ajax({//请求方式type: 'POST',//服务器返回的数据类型dataType: 'json',url: 'IP地址/index.php/api/loader/xyz',data: {url: 'IP地址/assets/data/result1.txt',},success: function (data) {var array = data.data.array;var numArray = [];for (let i = 0; i < array.length; i++) {numArray.push(parseFloat(array[i]))}let scene = new THREE.Scene();// 2.第二步:将数组转换成类型化数组const vertices = new Float32Array(numArray)// 3.第三步const geometry = new THREE.BufferGeometry() // 声明一个缓冲几何体对象const pos = new THREE.BufferAttribute(vertices, 3)geometry.attributes.position = posvar material = new THREE.PointsMaterial({color: 0xff1133,size: 1.0 //点对象像素尺寸});//点模型对象var points = new THREE.Points(geometry.center(), material);scene.add(points);var onwheelNum = 1const ambientLight = new THREE.AmbientLight(0xffffff, 0.1); // 创建环境光scene.add(ambientLight); // 将环境光添加到场景const spotLight = new THREE.SpotLight(0xffffff); // 创建聚光灯spotLight.position.set(50, 50, 50);spotLight.castShadow = true;scene.add(spotLight);const element = document.getElementById("3dpanel");const width = element.clientWidth; // 窗口宽度const height = element.clientHeight; // 窗口高度const k = width / height; // 窗口宽高比let camera = new THREE.PerspectiveCamera(45, k, 0.1, 1000);camera.position.set(20, 20, 400); // 设置相机位置camera.lookAt(new THREE.Vector3(10, 40, 0)); // 设置相机方向scene.add(camera);let renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });renderer.setSize(width, height); // 设置渲染区域尺寸renderer.shadowMap.enabled = true; // 显示阴影renderer.shadowMap.type = THREE.PCFSoftShadowMap;renderer.setClearColor(0x000000, 1); // 设置背景颜色element.appendChild(renderer.domElement);function render() {renderer.render(scene, camera);}render();element.onwheel = (e) => {let delta = (e.wheelDelta && (e.wheelDelta > 0 ? 1 : -1))if (delta > 0) {//放大onwheelNum += 0.1points.scale.set(onwheelNum, onwheelNum, onwheelNum);render();} else if (delta < 0) {//缩小onwheelNum -= 0.1points.scale.set(onwheelNum, onwheelNum, onwheelNum);render();}}element.addEventListener('mousedown', onMouseDown, false);element.addEventListener('mouseup', onMouseup, false);var rotateStart;rotateStart = new THREE.Vector2();function onMouseDown(event) {event.preventDefault();mouseDown = true;mouseX = event.clientX;//出发事件时的鼠标指针的水平坐标mouseY = event.clientY;//出发事件时的鼠标指针的水平坐标rotateStart.set(event.clientX, event.clientY);document.addEventListener('mousemove', onMouseMove2, false);}function onMouseup(event) {mouseDown = false;document.removeEventListener("mousemove", onMouseMove2);}function onMouseMove2(event) {if (!mouseDown) {return;}var deltaX = event.clientX - mouseX;var deltaY = event.clientY - mouseY;mouseX = event.clientX;mouseY = event.clientY;rotateScene(deltaX, deltaY);}//设置模型旋转速度,可以根据自己的需要调整function rotateScene(deltaX, deltaY) {//设置旋转方向和移动方向相反,所以加了个负号var ydeg = deltaX / 279;var xdeg = deltaY / 279;//deg 设置模型旋转的弧度points.rotation.y += ydeg;points.rotation.x += xdeg;render();}},error: function (jqXHR) {//请求失败函数内容}})}}return Controller
});

4.在api下的控制器中创建Loader.php

5.Loader控制器编写如下

<?phpnamespace app\api\controller;
use app\common\controller\Api;class Loader extends Api
{//如果$noNeedLogin为空表示所有接口都需要登录才能请求//如果$noNeedRight为空表示所有接口都需要验证权限才能请求//如果接口已经设置无需登录,那也就无需鉴权了//// 无需登录的接口,*表示全部protected $noNeedLogin = ['*'];// 无需鉴权的接口,*表示全部protected $noNeedRight = ['*'];/*** 测试方法** @ApiTitle    (接口名字)* @ApiSummary  (描述信息)* @ApiMethod   (POST)* @ApiRoute    (/api/loader/xyz/)*/public function xyz(){$file = $this->request->post("url");$content = file_get_contents($file);    //文件内容读入字符串if (empty($content)) {$this->error('文件内容为空');} else {$content = mb_convert_encoding($content, 'UTF-8', 'ASCII,UTF-8,GB2312,GBK,BIG5'); //转换字符编码为utf-8$content = str_replace("\r\n",",",$content);$content = str_replace("\t",",",$content);$array = explode(",", $content); //转换成数组$this->success('返回成功',['array' => $array]);}}
}

6.txt文件中的格式

     X          Y          Z↓           ↓          ↓

fastadmin使用three.js,导入xyz的txt文件,展示3D模型相关推荐

  1. html中引入txt文件,如何导入放置在txt文件中的.html文件中的代码?

    所以,我想要的是这个.我有一个HTML文件,我想从代码加载文本文件.因此,浏览器应该从该文本文件中获取代码并将其作为HTML代码的一部分进行阅读.这里有一个例子:如何导入放置在txt文件中的.html ...

  2. matlab 将txt导入excel,[转载]MATLAB  批量导入excel和txt文件的方法

    将一个文件目录下所有的文件名字全部倒入到一个文件中,除了使用ls函数以外,还可以使用 file=dir('C:UsersAdministratorDesktopMATLAB数据的导入导出以及试验的数据 ...

  3. matlab 批量导入excel,MATLAB  批量导入excel和txt文件的方法

    将一个文件目录下所有的文件名字全部倒入到一个文件中,除了使用ls函数以外,还可以使用 file=dir('C:\Users\Administrator\Desktop\MATLAB数据的导入导出以及试 ...

  4. [转载] js 读取和输出txt文件

    https://www.jb51.net/article/46712.htm ActiveXObject is not defined,ActiveXObject是IE浏览器独有支持的插件,其他浏览器 ...

  5. three.js加载3D模型,在网页上展示3D模型(.glb.gltf.fbx格式)

    Three.js是一款开源的主流3D绘图JS引擎,简单点,可以将它理解为three+js就可以了,three表示3D,js表示JavaScript的意思. 结构 .glb.gltf文件最好放在服务器上 ...

  6. 89 Three.js 导入dae格式的骨骼绑定动画模型

    简介 上一节,我们导入了一个官方的FBX格式的骨骼模型,实现了动画效果.这一节,更换了dae格式的模型导入,主要是这个模型返回的数据和FBX的返回格式有一些区别,下面我们将在案例中解析中间的区别. 实 ...

  7. js和java导出txt文件怎么打开文件_JS本地文件操作,JS读写txt文件

    /** * object.OpenTextFile(filename[, iomode[, create[, format]]]) * * 参数: * object 必选项.object 应为 Fil ...

  8. 用three.js在网页实现3D模型的展示

    作者 | 林智超__ 来源 | https://www.jianshu.com/p/0798a76121af 最近在做一个在网页端展示3D模型的项目,现在简单介绍一下怎么实现功能. 首先,下载thre ...

  9. three.js实现3D模型展示

    开头说明下  文章是转载我同事一个 哥们的.怕自己 以后会用 拿过来  方便以后使用 three.js实现3D模型展示 由于项目需要展示3d模型,所以对three做了点研究,分享出来 希望能帮到大家 ...

最新文章

  1. 两两对应成排的 表格 样式
  2. Ubuntu 安装 Docker 容器
  3. 【招聘(北京)】.NETCORE开发工程师(微服务方向)
  4. Java的新视差控件(JavaFX)
  5. 面试 | 程序猿面试,Elasticsearch被坑被虐的体无完肤...
  6. python爬虫实战(1)——爬取知乎热门回答图片
  7. ssh与tcp wappers
  8. python: 正则表达式2--元字符与re模块
  9. Delphi货币类型转中文大写金额
  10. python如何导入excel表格_使用Python读取电子表格中的数据
  11. Python之os库
  12. 通过 SQL Server 视图访问另一个IP地址数据库服务器表的方法
  13. Ubuntu上打开windows共享文件夹进行读写操作的命令
  14. BAT等互联网公司薪资分享
  15. 会议室录播方案及录播设备推荐
  16. sony6000正在连接服务器,极速对焦+11张每秒连拍 Sony A6000评测
  17. EPICS Scaler记录和相关软件
  18. 对于2019全国高速公路视频联网工作实施方案的理解:视频上云网关与省级视频云平台
  19. 反向放大器为何要使用同相增益(也称作噪声增益),来计算带宽
  20. 如何用python画数学图案_使用Matplotlib 绘制精美的数学图形例子

热门文章

  1. 最熟悉的陌生人DOM
  2. Flip Gamedfs
  3. 点击---显示悬浮页面窗口
  4. End-to-end Learning for Inter-Vehicle Distance and Relative Velocity Estimation in ADAS with a Monoc
  5. 腾讯视频网页版无法打开的问题
  6. python下载电影_打造一款Python实现自动下载电影的“脚本”!那种电影也可以哦!...
  7. 使用vant weapp组件做左拉删除功能
  8. 如何输入罗马数字I,II,III
  9. python3多行输入字符串_详解Python3 定义一个跨越多行的字符串的多种方法
  10. 就在尽头的下雨天,迷糊的前方