成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

基于three.js的一個(gè)項(xiàng)目類的編寫(xiě)

Little_XM / 1300人閱讀

摘要:這是一篇關(guān)于怎么樣基于進(jìn)行可配置的的對(duì)象創(chuàng)建的文章項(xiàng)目地址編寫(xiě)一個(gè)的基類這是創(chuàng)建的一個(gè)基類其中包含了場(chǎng)景,相機(jī),渲染器,控制器以及一些方法初始化初始化初始化更改渲染器顏色初始化控制器記錄循環(huán)幾次,后面有與清除場(chǎng)景中的物體暫停動(dòng)畫(huà)渲染

WebVR

這是一篇關(guān)于怎么樣基于three.js進(jìn)行可配置的three.js的對(duì)象創(chuàng)建的文章
項(xiàng)目地址

編寫(xiě)一個(gè)three.js的基類

這是創(chuàng)建的一個(gè)Three.js基類其中包含了場(chǎng)景,相機(jī),渲染器,控制器以及一些方法

  // VRcore.js
  import * as THREE from "three";
  const OrbitControls = require("three-orbit-controls")(THREE)
  let Scene, Camera, Renderer, Controls, loopID;

  function createScene({domContainer = document.body, fov = 50,far = 1000}){
    if (!(domContainer instanceof HTMLElement)) {
      throw new Error("domContainer is not a HTMLElement!");
    }
    // 初始化 scene
    Scene = new THREE.Scene();
    // 初始化 camera
    Camera = new THREE.PerspectiveCamera(fov, domContainer.clientWidth / domContainer.clientHeight, 1, far);
    Camera.position.set( 200, 200, 200 );
    Camera.lookAt(Scene.position);
    Scene.add(Camera);
    // 初始化 renderer
    Renderer = new THREE.WebGLRenderer({ canvas: domContainer, antialias: true, alpha: true } );
    Renderer.clear();
    Renderer.setClearColor( 0xeeeeee, 1); // 更改渲染器顏色
    Renderer.setSize(domContainer.clientWidth, domContainer.clientHeight);
    Renderer.shadowMap.Enabled = true;
    Renderer.setPixelRatio(domContainer.devicePixelRatio);
    initVR();
  }

  function initVR() {
      // 初始化控制器
      Controls = new OrbitControls(Camera, Renderer.domElement);;
      Controls.addEventListener("change", render);
      Controls.enableZoom = true;
  }

  function render() {
    Renderer.render(Scene, Camera);
  }

  function renderStart(callback) {
    loopID = 0; // 記錄循環(huán)幾次,后面有與清除場(chǎng)景中的物體
    if (loopID === -1) return;
    let animate = function(){
      loopID = requestAnimationFrame(animate);
      callback();
      Controls.update();
      render();
    }
    animate();
  }

  // 暫停動(dòng)畫(huà)渲染
  function renderStop() {
    if (loopID !== -1) {
        window.cancelAnimationFrame(loopID);
        loopID = -1;
    }
  }
  // 回收當(dāng)前場(chǎng)景
  function clearScene() {
    for(let i = Scene.children.length - 1; i >= 0; i-- ) {
        Scene.remove(Scene.children[i]);
    }
  }
  // 清理頁(yè)面
  function cleanPage() {
    renderStop();
    clearScene();
  }

  export {
    Scene,
    Camera,
    Renderer,
    Controls,
    createScene,
    initVR,
    renderStart,
    renderStop,
    clearScene,
    cleanPage
  }
創(chuàng)建一個(gè)VRpage基類

這是一個(gè)VRpage的基類,所有需要?jiǎng)?chuàng)建Three項(xiàng)目都需要繼承這個(gè)類,然后生成一個(gè)Three項(xiàng)目

  // VRpage.js
  import * as THREE from "three";
  import * as VRcore from "./VRcore.js";

  export default class VRpage {
    constructor(options) {
      // 創(chuàng)建場(chǎng)景
      VRcore.createScene(options);
      this.start();
      this.loadPage();
    }
    loadPage() {
      VRcore.renderStart(() => this.update());
      this.loaded();
    }
    initPage() {
      this.loadPage();
      this.start();
    }
    start() {}
    loaded() {}
    update() {}
  }
生成一個(gè)Three.js的項(xiàng)目

下面的文件是一個(gè)繼承了VRpage類的一個(gè)類,然后我們重寫(xiě)了start方法以及update方法,start方法中我們向場(chǎng)景中添加了一個(gè)正方體,update方法是我們給這個(gè)正方體的一個(gè)變形動(dòng)畫(huà),他會(huì)結(jié)合VRcore.js里面的renderStart方法來(lái)進(jìn)行動(dòng)畫(huà)效果

  // page.js
  import * as THREE from "three";
  import VRpage from "../../utils/VRpage.js";
  import * as VRcore from "../../utils/VRcore.js";

  export default class Page extends VRpage {
    start() { // 啟動(dòng)渲染之前,創(chuàng)建場(chǎng)景3d模型
      let geometry = new THREE.CubeGeometry(100,100,100);
      let material = new THREE.MeshLambertMaterial( { color:0x0000ff} );
      this.box = new THREE.Mesh(geometry,material);
      this.box.position.set(3, -2, -3);
      const PointLight = new THREE.PointLight(0xffffff);
      PointLight.position.set(500, 500, 500);
      const AmbientLight = new THREE.AmbientLight( 0x404040 ); // soft white light
      VRcore.Scene.add(PointLight);
      VRcore.Scene.add(AmbientLight);
      VRcore.Scene.background = new THREE.Color( 0xeeeeee ); // 更改場(chǎng)景背景色
      VRcore.Scene.add(this.box);
    }
    update() {
      this.box.rotation.y += 0.01;
    }
  }

這里我使用的是react的框架

  // index.js
  import React, { Component } from "react";
  import PropTypes from "prop-types";
  import Page from "./Page.js";
  class Oho extends Component {
    constructor() {
      super();
      this.init = this.init.bind(this);
    }

    componentDidMount() {
      const dom = document.querySelector("#Oho");
      this.init(dom);
    }

    init(dom) {
      const page = new Page({domContainer: dom});
    }

    render() {
      return (
        
); } } export default Oho;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/83515.html

相關(guān)文章

  • H5實(shí)例教學(xué)--3D全景(ThreeJs全景Demo)

    摘要:前言在現(xiàn)在市面上很多全景的環(huán)境下,要實(shí)現(xiàn)全景的方式有很多,可以用直接構(gòu)建也可以用基于的庫(kù)來(lái)實(shí)現(xiàn),還有很多別的制作全景的軟件使用本教學(xué)適用于未開(kāi)發(fā)過(guò)全景的工程獅如果覺(jué)得內(nèi)容太無(wú)聊可以直接跳到最后下載代碼理論整個(gè)全景所用的相關(guān)理論就不多說(shuō)了,就 前言 在現(xiàn)在市面上很多全景H5的環(huán)境下,要實(shí)現(xiàn)全景的方式有很多,可以用css3直接構(gòu)建也可以用基于threeJs的庫(kù)來(lái)實(shí)現(xiàn),還有很多別的制作全景的...

    GraphQuery 評(píng)論0 收藏0
  • H5實(shí)例教學(xué)--3D全景(ThreeJs全景Demo)

    摘要:前言在現(xiàn)在市面上很多全景的環(huán)境下,要實(shí)現(xiàn)全景的方式有很多,可以用直接構(gòu)建也可以用基于的庫(kù)來(lái)實(shí)現(xiàn),還有很多別的制作全景的軟件使用本教學(xué)適用于未開(kāi)發(fā)過(guò)全景的工程獅如果覺(jué)得內(nèi)容太無(wú)聊可以直接跳到最后下載代碼理論整個(gè)全景所用的相關(guān)理論就不多說(shuō)了,就 前言 在現(xiàn)在市面上很多全景H5的環(huán)境下,要實(shí)現(xiàn)全景的方式有很多,可以用css3直接構(gòu)建也可以用基于threeJs的庫(kù)來(lái)實(shí)現(xiàn),還有很多別的制作全景的...

    VPointer 評(píng)論0 收藏0
  • [開(kāi)源] Gio.js -- 一個(gè)基于 Three.js Web3D 地球數(shù)據(jù)可視化庫(kù)

    摘要:是一個(gè)基于的地球數(shù)據(jù)可視化的開(kāi)源組件庫(kù)。地址中文官網(wǎng)在線例子為什么要開(kāi)發(fā)使用這個(gè)庫(kù)的開(kāi)發(fā)是受到大會(huì)上的項(xiàng)目世界武器販賣可視化的啟發(fā),該項(xiàng)目開(kāi)發(fā)者是員工。 在這里和大家分享一個(gè)和小伙伴們一起開(kāi)發(fā)的開(kāi)源庫(kù) Gio.js 。Gio.js 是一個(gè)基于 Three.js 的 web 3D 地球數(shù)據(jù)可視化的開(kāi)源組件庫(kù)。使用 Gio.js 的網(wǎng)頁(yè)應(yīng)用開(kāi)發(fā)者,可以快速地以申明的方式創(chuàng)建自定義的 Web...

    BoYang 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.35 - WebGL:打開(kāi)網(wǎng)頁(yè)看大片

    摘要:在文末,我會(huì)附上一個(gè)可加載的模型方便學(xué)習(xí)中文藝術(shù)字渲染用原生可以很容易地繪制文字,但是原生提供的文字效果美化功能十分有限。 showImg(https://segmentfault.com/img/bVWYnb?w=900&h=385); WebGL 可以說(shuō)是 HTML5 技術(shù)生態(tài)鏈中最為令人振奮的標(biāo)準(zhǔn)之一,它把 Web 帶入了 3D 的時(shí)代。 初識(shí) WebGL 先通過(guò)幾個(gè)使用 Web...

    objc94 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<