广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >AngularJS中如何使用three.js
  • 702
分享到

AngularJS中如何使用three.js

2024-04-02 19:04:59 702人浏览 独家记忆
摘要

小编给大家分享一下angularjs中如何使用three.js,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AngularJS中

小编给大家分享一下angularjs中如何使用three.js,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

AngularJS中使用three.js的实例详解

一、轨迹球的引入问题

一开始我是用下面的方式引如轨迹球,但是会报Trackballcontrols is undefined的错。

import * as THREE from 'three';
import * as Trackballcontrols from 'three';

但其实我是能够在node_module下的threejs的包中找到Trackballcontrols的文件的,我一开始以为是引用的路径没对然后修改路径到对应包下Trackballcontrols.js所在的位置。尝试后发现错误依然在。Google后发现有类似的问题但是他用的是另一个控制器,解决的方案依然是修改引用方式。修改为required的引用,但实际上这种方式还是没有效果。

最后我发现Trackballcontrols其实是有专门的一个包的,npm安装对应的包之后如下引用即可解决问题

import * as THREE from 'three';
import * as Trackballcontrols from 'three-trackballcontrols';

二、将renderer.domElement放到对应的dom中

其实放domElement的方法很简单就是找到对应的dom将domElement添加进去就好,因为NG里对Dom的直接操作比较少所以有的时候可能会觉得比较麻烦,我一开始也考虑过用JQ或者原生去获取这个对象,但是后面发现直接用NG的方法就可以了,代码如下

<div #MapGL class="map clearfix"></div>
import { Component, ElementRef, OnInit, OnDestroy, ViewChild } from '@angular/core';


@ViewChild('MapGL') mapGL: ElementRef;

initRenderer(){
  this.renderer = new THREE.webGLRenderer();
  this.renderer.setSize(1000, 800);
  this.renderer.setClearColor(0xFFFFFF);
  this.mapGL.nativeElement.append(this.renderer.domElement);
}

三、setInterval和requestAnimationFrame的问题

在NG中如果像平时一样通过下面这种方式进行画面的render,会因为this的指向问题报错。

requestAnimationFrame(this.doRender());

而如果用下面这样的setInterval来执行render画面其实是不稳定的,更大的问题是,在你离开页面在返回时,浏览器会一次性执行离开的这段时间内所有的setInterval中的事件,浏览器可能就直接卡死了。

setInterval(()=>{this.doRender()}, 1000/60);

解决这个问题还是得用requestAnimationFrame,既然我们已经知道是this指向导致的问题,那么其实绑定下this就可以,因为requestAnimationFrame的参数类型限制,所以我们需要对renderer用箭头函数做一下处理就能满足正常效果了。

requestAnimationFrame(()=>{return this.doRender()});

四、轨迹球角度改变的流畅性

做完上面三个步奏后我们就能看见和之前我那篇博客提到的一样的模型效果了,但能够顾很明显的发现角度变换的时候流畅性变差了。一开始我认为是框架的问题会造成渲染一次的周期变长,有点楞逼不知道这下怎么改了。结果在看轨迹球源码找解决方案的时候发现其实特别简单,改一下属性就可以了,把轨迹球的rotateSpeed属性写大点就好了。

五、在three.js中如何通过鼠标位置获取想要选择的Object

其实这个看起来好像很难其实Three.js的开发指南里面已经有对应的例子和方法了,代码如下:

onDocumentMouseDown(event) {
  event.preventDefault();
  let vector = new THREE.Vector3(( event.clientX / window.innerWidth ) * 2 - 1, -( event.clientY / window.innerHeight ) * 2 + 1, 0.5);
  vector = vector.unproject(this.camera);

  let raycaster = new THREE.Raycaster(this.camera.position, vector.sub(this.camera.position).nORMalize());

  let intersects = raycaster.intersectObjects(this.scene.children);

  if (intersects.length > 0) {
   console.log(intersects[0])//这个就是点中的对象
  }
 }


//绑定事件
$(this.renderer.domElement).on('mousedown', (e)=>{});

里面的逻辑我就不详细解释了。

以上是“AngularJS中如何使用three.js”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: AngularJS中如何使用three.js

本文链接: https://www.lsjlt.com/news/72700.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • AngularJS中如何使用three.js
    小编给大家分享一下AngularJS中如何使用three.js,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AngularJS中...
    99+
    2022-10-19
  • 在vue中如何使用three.js
    这篇文章主要讲解了“在vue中如何使用three.js”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在vue中如何使用three.js”吧!1.首先安装three.js、引入npm ...
    99+
    2023-07-05
  • AngularJS中如何使用$resource
    这篇文章主要为大家展示了“AngularJS中如何使用$resource”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“AngularJS中如何使用$resour...
    99+
    2022-10-19
  • angularJS如何使用
    小编给大家分享一下angularJS如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!事件指令:ng-click/dblcl...
    99+
    2022-10-19
  • three.js Mool3D模型类如何使用
    这篇文章主要介绍“three.js Mool3D模型类如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“three.js Mool3D模型类如何使用”文章能帮助大家解决问题。...
    99+
    2023-07-05
  • angularjs中如何使用ui-router分层
    小编给大家分享一下angularjs中如何使用ui-router分层,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先我们先定义...
    99+
    2022-10-19
  • 如何在AngularJs中结合SpringMVC使用
    本篇文章给大家分享的是有关如何在AngularJs中结合SpringMVC使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先我们把springmvc的环境搭好,先来web....
    99+
    2023-05-31
    angularjs springmvc
  • AngularJS中如何使用应用模块化
    这篇文章主要介绍AngularJS中如何使用应用模块化,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一.模块化的好处(1)实现逻辑更清晰、可读性强;(2)团队开发分工明确,容易控制;...
    99+
    2022-10-19
  • AngularJS中如何使用jQuery的zTree插件
    这篇文章主要介绍了AngularJS中如何使用jQuery的zTree插件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇AngularJS中如何使用jQuery的zTree插件文章都会有所收获,下面我们一起来看...
    99+
    2023-07-04
  • vue中使用three.js报错怎么办
    小编给大家分享一下vue中使用three.js报错怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言最近在学习three.js,同时也学习一下vue3,然后...
    99+
    2023-06-29
  • 手把手教你在vue中使用three.js
    目录在vue中使用three.js1.首先安装three.js、引入2.在页面内写入three.js 总结在vue中使用three.js 下面我会介绍three.js的基础...
    99+
    2023-03-01
    vue使用threejs threejs教程 three.js案例
  • three.js中如何通过模块导入
    这篇文章主要为大家展示了“three.js中如何通过模块导入”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“three.js中如何通过模块导入”这篇文章吧。前言通...
    99+
    2022-10-19
  • AngularJS中如何移除URL中的#
    本篇文章为大家展示了AngularJS中如何移除URL中的#,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。AngularJS 默认将会使用一个 # 号来对URL进行...
    99+
    2022-10-19
  • vue3项目中使用three.js的操作步骤
    目录前言一、three.js是什么?二、vue3中下载与安装three.js三、操作步骤1.创建场景2.创建物体3.添加光源4.添加相机5.开始渲染四、myThree.vue源代码五...
    99+
    2023-01-15
    vue3 three.js vue使用three.js
  • 在微信小程序中怎么使用three.js
    本篇内容主要讲解“在微信小程序中怎么使用three.js”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在微信小程序中怎么使用three.js”吧!1.首先引入下载材料,最后有完整源码默认你很熟悉...
    99+
    2023-07-05
  • 如何用Three.js写一个下雨动画
    这篇文章主要讲解了“如何用Three.js写一个下雨动画”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用Three.js写一个下雨动画”吧!前置知识We...
    99+
    2022-10-19
  • AngularJS如何使用ocLazyLoad实现js延迟加载
    这篇文章主要介绍AngularJS如何使用ocLazyLoad实现js延迟加载,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!开发一个系统遇到了一个问题,用angular路由一个htm...
    99+
    2022-10-19
  • AngularJS中的过滤器filter怎么使用
    这篇文章主要介绍“AngularJS中的过滤器filter怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“AngularJS中的过滤器filter怎么使用”文章能帮助大家解决问题。在Angul...
    99+
    2023-07-04
  • AngularJS如何利用路由传值
    小编给大家分享一下AngularJS如何利用路由传值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下 1.导包&nbs...
    99+
    2022-10-19
  • 如何使用HTML/CSS和Three.js实现喷火龙小游戏
    这篇文章主要介绍了如何使用HTML/CSS和Three.js实现喷火龙小游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 ...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作