最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

AngularJS中使用three.js的實例詳解

 更新時間:2017年07月21日 10:40:03   投稿:lqh  
這篇文章主要介紹了AngularJS中使用three.js的實例詳解,我將之前自己做的demo放到了angularJS的一個component中,其實一開始是沒有準(zhǔn)備用框架的但是后面發(fā)現(xiàn)需要進行的雙向綁定越來越多,后期表單數(shù)據(jù)的變化量也很大,最后還是選擇用NG來做這些事情

AngularJS中使用three.js的實例詳解

一、軌跡球的引入問題

一開始我是用下面的方式引如軌跡球,但是會報Trackballcontrols is undefined的錯。

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

但其實我是能夠在node_module下的threejs的包中找到Trackballcontrols的文件的,我一開始以為是引用的路徑?jīng)]對然后修改路徑到對應(yīng)包下Trackballcontrols.js所在的位置。嘗試后發(fā)現(xiàn)錯誤依然在。google后發(fā)現(xiàn)有類似的問題但是他用的是另一個控制器,解決的方案依然是修改引用方式。修改為required的引用,但實際上這種方式還是沒有效果。

最后我發(fā)現(xiàn)Trackballcontrols其實是有專門的一個包的,npm安裝對應(yīng)的包之后如下引用即可解決問題

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

二、將renderer.domElement放到對應(yīng)的dom中

其實放domElement的方法很簡單就是找到對應(yīng)的dom將domElement添加進去就好,因為NG里對Dom的直接操作比較少所以有的時候可能會覺得比較麻煩,我一開始也考慮過用JQ或者原生去獲取這個對象,但是后面發(fā)現(xiàn)直接用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來執(zhí)行render畫面其實是不穩(wěn)定的,更大的問題是,在你離開頁面在返回時,瀏覽器會一次性執(zhí)行離開的這段時間內(nèi)所有的setInterval中的事件,瀏覽器可能就直接卡死了。

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

解決這個問題還是得用requestAnimationFrame,既然我們已經(jīng)知道是this指向?qū)е碌膯栴},那么其實綁定下this就可以,因為requestAnimationFrame的參數(shù)類型限制,所以我們需要對renderer用箭頭函數(shù)做一下處理就能滿足正常效果了。

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

四、軌跡球角度改變的流暢性

做完上面三個步奏后我們就能看見和之前我那篇博客提到的一樣的模型效果了,但能夠顧很明顯的發(fā)現(xiàn)角度變換的時候流暢性變差了。一開始我認為是框架的問題會造成渲染一次的周期變長,有點楞逼不知道這下怎么改了。結(jié)果在看軌跡球源碼找解決方案的時候發(fā)現(xiàn)其實特別簡單,改一下屬性就可以了,把軌跡球的rotateSpeed屬性寫大點就好了。

五、在three.js中如何通過鼠標(biāo)位置獲取想要選擇的Object

其實這個看起來好像很難其實Three.js的開發(fā)指南里面已經(jīng)有對應(yīng)的例子和方法了,代碼如下:

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)=>{});

里面的邏輯我就不詳細解釋了。

以上就是關(guān)于 AngularJS中使用three.js的使用注意事項及實例,大家如有疑問請留言,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 詳解AngularJS中的作用域

    詳解AngularJS中的作用域

    這篇文章主要介紹了詳解AngularJS中的作用域,是AngularJS學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-06-06
  • SeaJS 與 RequireJS 的差異對比

    SeaJS 與 RequireJS 的差異對比

    這篇文章主要介紹了SeaJS 與 RequireJS 的差異對比,本文主要對CMD規(guī)范和AMD規(guī)范的弊端做了對比,并做出了一個總結(jié),需要的朋友可以參考下
    2014-12-12
  • Angularjs 與 bower安裝和使用詳解

    Angularjs 與 bower安裝和使用詳解

    這篇文章主要介紹了Angularjs 與 bower安裝和使用詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • AngularJS過濾器filter用法分析

    AngularJS過濾器filter用法分析

    這篇文章主要介紹了AngularJS過濾器filter用法,結(jié)合實例形式分析了過濾器filter的功能、分類、使用方法與相關(guān)注意事項,需要的朋友可以參考下
    2016-12-12
  • 詳解angularJs模塊ui-router之狀態(tài)嵌套和視圖嵌套

    詳解angularJs模塊ui-router之狀態(tài)嵌套和視圖嵌套

    這篇文章主要介紹了詳解angularJs模塊ui-router之狀態(tài)嵌套和視圖嵌套,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 初識angular框架后的所思所想

    初識angular框架后的所思所想

    這篇文章主要介紹了初識angular框架后的所思所想,學(xué)習(xí)認識angular后的一些個人問題總結(jié),需要的朋友可以參考下
    2016-02-02
  • 淺談AngularJS中ng-class的使用方法

    淺談AngularJS中ng-class的使用方法

    下面小編就為大家?guī)硪黄獪\談AngularJS中ng-class的使用方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • angular動態(tài)表單制作

    angular動態(tài)表單制作

    通過實例代碼給大家詳細講述了angular動態(tài)表單的制作方法,對此有需要的朋友參考下。
    2018-02-02
  • angular ngClick阻止冒泡使用默認行為的方法

    angular ngClick阻止冒泡使用默認行為的方法

    這篇文章主要介紹了angular ngClick阻止冒泡使用默認行為的方法,較為詳細的分析了AngularJS中ngClick事件執(zhí)行原理與阻止冒泡的實現(xiàn)技巧,需要的朋友可以參考下
    2016-11-11
  • AngularJS實現(xiàn)select的ng-options功能示例

    AngularJS實現(xiàn)select的ng-options功能示例

    這篇文章主要介紹了AngularJS實現(xiàn)select的ng-options功能,結(jié)合實例形式分析了AngularJS使用ng-options操作select列表的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07

最新評論

河津市| 方城县| 岳西县| 前郭尔| 突泉县| 禄劝| 阿瓦提县| 平邑县| 浦江县| 鄂托克前旗| 石嘴山市| 迁西县| 罗甸县| 扬中市| 文成县| 屏东市| 渭南市| 灵寿县| 河南省| 泸水县| 台湾省| 合阳县| 堆龙德庆县| 新平| 东阿县| 昌邑市| 香河县| 麻城市| 湘阴县| 江北区| 合山市| 龙山县| 南丹县| 清新县| 南陵县| 盖州市| 定襄县| 莆田市| 蒲城县| 赤峰市| 通州市|