欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

uniapp小程序和h5如何使用three.js詳解

 更新時間:2022年12月12日 10:51:23   作者:山與路  
Three.js是通過對WebGL接口的封裝與簡化而形成的一個易用的圖形庫,下面這篇文章主要給大家介紹了關(guān)于uniapp小程序和h5如何使用three.js的相關(guān)資料,需要的朋友可以參考下

前言

個人認(rèn)為uniapp同時開發(fā)小程序和h5多多少少在某些地方存在不兼容問題,這也比較苦惱,特別是在使用某些ui庫的時候更加讓人頭大,要邊看邊對比,有時候h5那邊樣式或者什么的都o(jì)k,但是小程序那邊就直接拉胯,著實有點難受,好了廢話不多說了

h5

threejs本身好像就是開發(fā)web的一個庫,所以我們先從簡單入手,h5對threejs的兼容性要比小程序要好很多,而且方便很多

首先我們需要去官網(wǎng)下載相關(guān)的threejs的相關(guān)庫

threejs.org/build/three…

three.js/examples at…

在寫之前我們需要先導(dǎo)入必要的包

const  THREE=require('@/static/js/three.js');
import {
OrbitControls
} from '@/static/js/lib/controls/OrbitCon

在使用時可能會出現(xiàn)以下情況

我們直接找到OrbitControls.js文件導(dǎo)入three.js即可,可能還有更好的方法

小程序

小程序其實對threejs兼容性不是很好,我也不知道到底哪個庫能完全兼容threejs,不過個人目前使用three-platformize比較好的

安裝依賴

這里直接安裝小程序版的threejs----->three-platformize

yarn add three-platformize

這里為什么要直接安裝three-platformize而不安裝threejs,因為three-platformize要依賴threejs,所以three-platformize會自帶threejs相關(guān)的包

繪制立方體

var scene = new THREE.Scene();
		var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(0, 0, 10);
scene.add(camera);
const geometry = new THREE.BoxGeometry(1, 1, 1);
const materials = new THREE.MeshBasicMaterial();
const cube = new THREE.Mesh(geometry, materials);
scene.add(cube);
const light = new THREE.AmbientLight(0xffffff);
scene.add(light);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
let t = document.getElementById('content');
t.appendChild(renderer.domElement);
const controls = new THREE.OrbitControls(camera, renderer.domElement)
function animate() {
        requestAnimationFrame(animate);
        renderer.render(scene, camera);
}
animate();

這樣即可實現(xiàn)立方體,基本上和其他threejs使用一致,所以這里也不多說什么了

繪制一個可以旋轉(zhuǎn)的立方體

在寫之前我們需要先導(dǎo)入必要的包

import * as THREE from 'three-platformize';
//軌道控制器
import { OrbitControls } from 'three-platformize/examples/jsm/controls/OrbitControls'

接下來我們需要在html寫一個canvas,這個是必須要寫的,因為小程序好像只支持有canvas的基礎(chǔ)下對canvas進行繪制

接下來獲取canvas

我們要先獲取到canvas,獲取到當(dāng)前節(jié)點,如果節(jié)點都獲取不到則代碼或許你得仔細(xì)看看,是不是單詞拼寫錯誤或者其他原因

uni.createSelectorQuery()
.in(this)
.select('#webgl')
.fields({ node: true })
.exec(res => {
        console.log(res[0].node);
});

獲取到節(jié)點后,則需要注冊WechatPlatform如果不注冊則在后續(xù)的WebGLRenderer將導(dǎo)致無法渲染

const canvas = res[0].node;
const platform = new WechatPlatform(canvas); // webgl canvas
platform.enableDeviceOrientation('game'); // 開啟DeviceOrientation
THREE.PLATFORM.set(platform);
this.platform = platform;

three繪制立方體的代碼(這里就不介紹了,基本上和上面的h5代碼類似)

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, canvas.width / canvas.height, 0.1, 1000);
camera.position.set(0, 0, 10);
scene.add(camera);
const geometry = new THREE.BoxGeometry(1, 1, 1);
const materials = new THREE.MeshBasicMaterial();
const cube = new THREE.Mesh(geometry, materials);
scene.add(cube);
const light = new THREE.AmbientLight(0xffffff);
scene.add(light);
//注意,這里必須要添加一個{ canvas: canvas },不然會報createElementNS錯誤
const renderer = new THREE.WebGLRenderer({ canvas: canvas });
renderer.setSize(canvas.width, canvas.height);
const controls = new OrbitControls(camera, renderer.domElement);
function animate() {
    //這里不再是requestAnimationFrame而是canvas.requestAnimationFrame
    canvas.requestAnimationFrame(animate);
    renderer.render(scene, camera);
}
animate();

讓立方體可以自動旋轉(zhuǎn)

小程序和h5是不一樣的,不能旦旦加了OrbitControls就能實現(xiàn)自由動,這里需要添加3個方法

  • touchStart
  • touchMove
  • touchEnd

添加這三個方法才能使立方體開始任意旋轉(zhuǎn)

效果

總結(jié)

到此這篇關(guān)于uniapp小程序和h5使用three.js的文章就介紹到這了,更多相關(guān)uniapp小程序和h5使用three.js內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用純前端JavaScript實現(xiàn)Excel導(dǎo)入導(dǎo)出方法過程詳解

    使用純前端JavaScript實現(xiàn)Excel導(dǎo)入導(dǎo)出方法過程詳解

    這篇文章主要介紹了使用純前端JavaScript實現(xiàn)Excel導(dǎo)入導(dǎo)出方法過程詳解,文章通過示例代碼和圖文解析介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • js實現(xiàn)上傳并壓縮圖片效果

    js實現(xiàn)上傳并壓縮圖片效果

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)上傳并壓縮圖片的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 最簡單的JS實現(xiàn)json轉(zhuǎn)csv的方法

    最簡單的JS實現(xiàn)json轉(zhuǎn)csv的方法

    這篇文章主要介紹了最簡單的JS實現(xiàn)json轉(zhuǎn)csv的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • layui form表單提交后實現(xiàn)自動刷新

    layui form表單提交后實現(xiàn)自動刷新

    今天小編就為大家分享一篇layui form表單提交后實現(xiàn)自動刷新,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動效果

    微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript 異步調(diào)用框架 (Part 3 - 代碼實現(xiàn))

    JavaScript 異步調(diào)用框架 (Part 3 - 代碼實現(xiàn))

    在上一篇文章里,我們說到了要實現(xiàn)一個Async.Operation類,通過addCallback方法傳遞回調(diào)函數(shù),并且通過yield方法返回回調(diào)結(jié)果?,F(xiàn)在我們就來實現(xiàn)這個類吧。
    2009-08-08
  • JS原型與原型鏈的深入理解

    JS原型與原型鏈的深入理解

    這篇文章主要和大家一起深入理解JS原型與原型鏈,原型是JavaScript中一個比較難理解的概念,本文為大家解決這個難題,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 基于JavaScript實現(xiàn)百度搜索框效果

    基于JavaScript實現(xiàn)百度搜索框效果

    這篇文章主要為大家詳細(xì)介紹了基于JavaScript實現(xiàn)百度搜索框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • JavaScript編寫簡單的計算器

    JavaScript編寫簡單的計算器

    這篇文章主要介紹了JavaScript如何編寫簡單的計算器,功能很簡單,可以實現(xiàn)加減乘除功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-11-11
  • 使用JS location實現(xiàn)搜索框歷史記錄功能

    使用JS location實現(xiàn)搜索框歷史記錄功能

    這篇文章主要介紹了使用JS location實現(xiàn)搜索框歷史記錄功能,本文通過實例 代碼講解的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12

最新評論