国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

WEB 3D技術(shù) three.js 點(diǎn)光源

這篇具有很好參考價(jià)值的文章主要介紹了WEB 3D技術(shù) three.js 點(diǎn)光源。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

本文的話 我們來(lái)設(shè)置一下點(diǎn)光源

點(diǎn)光源其實(shí)最直觀的就是可以做螢火蟲(chóng)
也可以做星光 點(diǎn)點(diǎn)的效果

我們可以直接在官網(wǎng)中搜索 Pointlight
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
大家可以在官網(wǎng)這里看一下 其實(shí) SpotLight 聚關(guān)燈中的屬性 Pointlight 點(diǎn)光源也有的
我們先編寫代碼如下

import './style.css'
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";

// 創(chuàng)建相機(jī)
const camera = new THREE.PerspectiveCamera(
    45,
    window.innerWidth / window.innerHeight,
    0.1,
    1000
);
const scene = new THREE.Scene();

// 環(huán)境光
const light = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(light);

// 創(chuàng)建球形幾何體
const sphere1 = new THREE.Mesh(
  new THREE.SphereGeometry(0.7, 32, 32),
  new THREE.MeshStandardMaterial({})
);
sphere1.castShadow = true;
sphere1.receiveShadow = true;
scene.add(sphere1);

// 添加平面
const plane = new THREE.Mesh(
  new THREE.PlaneGeometry(5, 5),
  new THREE.MeshStandardMaterial({ color: 0xeeeeee })
);
plane.position.set(0, -1, 0);
plane.rotation.x = -Math.PI / 2;
plane.receiveShadow = true;
scene.add(plane);

// 聚光燈光源
const Point = new THREE.PointLight(0xff0000, 1);
Point.position.set(1, 0, 0);
Point.castShadow = true;
Point.shadow.mapSize.set(512, 512);
scene.add(Point);


// 創(chuàng)建一個(gè)canvas容器并追加到body上
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.shadowMap.enabled = true;
renderer.physicallyCorrectLights = true;
document.body.appendChild(renderer.domElement);

// 設(shè)置相機(jī)位置
camera.position.z = 5;
camera.lookAt(0, 0, 0);

// 添加控制器
const controls = new OrbitControls(camera, renderer.domElement);

function animate() {
    controls.update();
    requestAnimationFrame(animate);
    renderer.render(scene, camera);
}
animate();

PointLight 創(chuàng)建一個(gè)點(diǎn)光源 這里我們給了 紅色0xff0000
然后 調(diào)整了 position 的位置
castShadow 允許陰影
mapSize 設(shè)置了寬高
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
我們 distance 調(diào)一下它照射的最大距離

WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
這里 我們來(lái)個(gè)1
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
這里 我們就 光距離變小了很多
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
decay 可以設(shè)置衰減的幅度 默認(rèn)2
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
我們這里 給個(gè)0 不衰減
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
光照變的非常強(qiáng)
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
如果你想在 邏輯代碼 例如 gui事件中 修改 decay 需要先將 渲染器的 physicallyCorrectLights 字段設(shè)為true
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
否者它不重新計(jì)算 你改了值 它不會(huì)變化的

當(dāng)然 開(kāi)頭 我說(shuō) 可以做螢火蟲(chóng)
這一光照效果 并沒(méi)有實(shí)現(xiàn)這個(gè)效果
很多人就會(huì)想 這做個(gè)啥的螢火蟲(chóng)哦

我們改寫代碼如下

import './style.css'
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";

// 創(chuàng)建相機(jī)
const camera = new THREE.PerspectiveCamera(
    45,
    window.innerWidth / window.innerHeight,
    0.1,
    1000
);
const scene = new THREE.Scene();

// 環(huán)境光
const light = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(light);

// 創(chuàng)建球形幾何體
const sphere1 = new THREE.Mesh(
  new THREE.SphereGeometry(0.7, 32, 32),
  new THREE.MeshStandardMaterial({})
);
sphere1.castShadow = true;
sphere1.receiveShadow = true;
scene.add(sphere1);

// 添加平面
const plane = new THREE.Mesh(
  new THREE.PlaneGeometry(5, 5),
  new THREE.MeshStandardMaterial({ color: 0xeeeeee })
);
plane.position.set(0, -1, 0);
plane.rotation.x = -Math.PI / 2;
plane.receiveShadow = true;
scene.add(plane);

const smallBall = new THREE.Mesh(
  new THREE.SphereGeometry(0.1, 20, 20),
  new THREE.MeshBasicMaterial({ color: 0xff0000 })
);
smallBall.position.set(1, 0, 0);
scene.add(smallBall);
// 聚光燈光源
const Point = new THREE.PointLight(0xff0000, 1);
Point.position.set(1, 0, 0);
Point.castShadow = true;
Point.shadow.mapSize.set(512, 512);
Point.decay = 0;

smallBall.add(Point);

// 創(chuàng)建一個(gè)canvas容器并追加到body上
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.shadowMap.enabled = true;
renderer.physicallyCorrectLights = true;
document.body.appendChild(renderer.domElement);

// 設(shè)置相機(jī)位置
camera.position.z = 5;
camera.lookAt(0, 0, 0);

// 添加控制器
const controls = new OrbitControls(camera, renderer.domElement);

function animate() {
    controls.update();
    requestAnimationFrame(animate);
    renderer.render(scene, camera);
}
animate();

我們這里 直接通過(guò) SphereGeometry 創(chuàng)造一個(gè)原點(diǎn) 材質(zhì) color設(shè)為 0xff0000 紅色 命名為 smallBall 調(diào)整 position位置后
然后 加入場(chǎng)景 scene.add(smallBall);
然后 我們之前的點(diǎn)光源直接 add到這個(gè) smallBall中
運(yùn)行結(jié)果如下
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
這樣 就做出了一個(gè)小點(diǎn)在發(fā)光的效果

然后 我們?cè)谧钕旅?加上一些代碼

const clock = new THREE.Clock();

function animate() {
    let time = clock.getElapsedTime();
    smallBall.position.z = Math.sin(time);
    smallBall.position.x = Math.cos(time);
    controls.update();
    requestAnimationFrame(animate);
    renderer.render(scene, camera);
}
animate();

const clock = new THREE.Clock(); 聲明一個(gè)時(shí)鐘
然后 在運(yùn)行是不斷計(jì)算 改變smallBall x z軸位置
就會(huì)發(fā)現(xiàn) 我們的小原點(diǎn) 一直圍繞這我們中心的球轉(zhuǎn)
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
且外部的環(huán)境光也會(huì)跟著一起動(dòng)
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
大家可能比較好奇 clock.getElapsedTime 拿到的 time 到底是什么
我們控制臺(tái)輸出一下
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
運(yùn)行代碼
WEB 3D技術(shù) three.js 點(diǎn)光源,前端,3d,javascript
在Three.js中,THREE.Clock()是一個(gè)計(jì)時(shí)器對(duì)象,getElapsedTime()方法用于獲取從創(chuàng)建計(jì)時(shí)器對(duì)象開(kāi)始到當(dāng)前時(shí)刻的時(shí)間間隔,單位為秒。代碼中,let time = clock.getElapsedTime();用于獲取動(dòng)畫運(yùn)行的時(shí)間,然后通過(guò)Math.sin(time)和Math.cos(time)來(lái)計(jì)算小球的位置。

如果你想上下動(dòng) 操作 y 就好了

我們?cè)O(shè)置可以用這個(gè)做出太陽(yáng)東升西落的效果了文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-803443.html

到了這里,關(guān)于WEB 3D技術(shù) three.js 點(diǎn)光源的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • WEB 3D技術(shù) three.js 3D賀卡(2) 加入天空與水面效果

    WEB 3D技術(shù) three.js 3D賀卡(2) 加入天空與水面效果

    上文 WEB 3D技術(shù) three.js 3D賀卡(1) 搭建基本項(xiàng)目環(huán)境 我們簡(jiǎn)單搭了一個(gè)賀卡雛形 然后 我們要引入一個(gè)hdr的一個(gè)天空的效果 所以 我們需要在代碼中導(dǎo)入 RGBELoader 這里 大家可以選擇下載我的hdr資源 WEB 3D技術(shù) three.js 3D賀卡 天空 hdr資源 下載好之后呢 我們?cè)谕饷嫣滓粋€(gè) xhdr 文件夾

    2024年01月18日
    瀏覽(95)
  • Three.js--》前端開(kāi)發(fā)者掌握3d技術(shù)不再是夢(mèng),初識(shí)threejs

    Three.js--》前端開(kāi)發(fā)者掌握3d技術(shù)不再是夢(mèng),初識(shí)threejs

    ????????這十年來(lái) web 得到了快速的發(fā)展,隨著 webgl 的普及,網(wǎng)頁(yè)的表現(xiàn)能力越來(lái)越強(qiáng)大,網(wǎng)頁(yè)上已經(jīng)開(kāi)始可以做出很多復(fù)雜的動(dòng)畫和精美的效果,還可以通過(guò) webgl 在網(wǎng)頁(yè)中繪制高性能的3d圖形,別的不說(shuō),凡是入門程序員都離不開(kāi)github這個(gè)網(wǎng)站,細(xì)心的人都會(huì)發(fā)現(xiàn),gi

    2024年02月01日
    瀏覽(98)
  • WEB 3D技術(shù) three.js draco解壓器 解決 壓縮后的gltf/glb報(bào)錯(cuò) Error: THREE.GLTFLoader: No DRACOLoader instance pravid

    WEB 3D技術(shù) three.js draco解壓器 解決 壓縮后的gltf/glb報(bào)錯(cuò) Error: THREE.GLTFLoader: No DRACOLoader instance pravid

    通常 我們 glb/gltf里面都是非常大的場(chǎng)景 有些工具 它會(huì)因?yàn)檫^(guò)大做了壓縮 導(dǎo)致 我們開(kāi)始是用不了的 我們可以官網(wǎng)搜索 draco 如下圖選擇 這是個(gè)解壓工具 用在我們各種的3D建模軟件中 大部分是通用的 我們先在代碼中導(dǎo)入工具 我們?cè)陧?xiàng)目根目錄中 找到 node_modules下的 three 然后

    2024年04月16日
    瀏覽(95)
  • web上構(gòu)建3d效果 基于three.js的實(shí)例

    web上構(gòu)建3d效果 基于three.js的實(shí)例

    web頁(yè)面上提供3D效果,可以為頁(yè)面提供不少色彩,H5之后canvas 為webgl提供了基礎(chǔ),使得在web頁(yè)面使用JS也能寫出3D的效果,其中three.js作為封裝了圖形函數(shù) 的框架,為入門提供了方便,效果圖如下。 ? 以上是官方例子中其中的三個(gè),沒(méi)接觸過(guò)的朋友肯定會(huì)覺(jué)得很神奇,事實(shí)上

    2024年02月05日
    瀏覽(89)
  • Web3D開(kāi)發(fā)經(jīng)驗(yàn)分享:基于Three.js的Web3D建模案例

    Web3D開(kāi)發(fā)經(jīng)驗(yàn)分享:基于Three.js的Web3D建模案例

    個(gè)人主頁(yè):?左本W(wǎng)eb3D,更多案例預(yù)覽請(qǐng)點(diǎn)擊==》?在線案例 個(gè)人簡(jiǎn)介:專注Web3D使用ThreeJS實(shí)現(xiàn)3D效果技巧和學(xué)習(xí)案例 ?? ??積跬步以至千里,致敬每個(gè)愛(ài)學(xué)習(xí)的你。喜歡的話請(qǐng)三連,有問(wèn)題請(qǐng)私信或者加微信 ????????隨著互聯(lián)網(wǎng)的快速發(fā)展,Web3D技術(shù)也越來(lái)越成熟,越來(lái)越

    2024年02月13日
    瀏覽(20)
  • 如何用Three.js + Blender打造一個(gè)web 3D展覽館

    如何用Three.js + Blender打造一個(gè)web 3D展覽館

    作者:vivo 互聯(lián)網(wǎng)前端團(tuán)隊(duì)- Wei Xing? 運(yùn)營(yíng)活動(dòng)新玩法層出不窮,web 3D炙手可熱,本文將一步步帶大家了解如何利用Three.js和Blender來(lái)打造一個(gè)沉浸式web 3D展覽館。 3D展覽館是什么,先來(lái)預(yù)覽下效果: 看起來(lái)像個(gè)3D冒險(xiǎn)類手游,用戶可以操縱屏幕中央的虛擬搖桿,以第一人稱視角

    2024年02月16日
    瀏覽(95)
  • web3d-three.js場(chǎng)景設(shè)計(jì)器-天空包圍盒-TWEEN.js

    web3d-three.js場(chǎng)景設(shè)計(jì)器-天空包圍盒-TWEEN.js

    THREE.JS 實(shí)現(xiàn)場(chǎng)景天空包圍盒,為了讓場(chǎng)景背景更具體,而不是呆板的純色,可以給廠家添加圍繞的包圍盒。 這里使用球體來(lái)實(shí)現(xiàn),球體中央則是場(chǎng)景 給球體添加天空的漸變色 加入場(chǎng)景 代碼如下 function createSky(?hemiLight) { ? const vertexShader = `varying vec3 vWorldPosition; ? ? void main

    2024年01月23日
    瀏覽(21)
  • web3d-three.js場(chǎng)景設(shè)計(jì)器-sprite廣告牌

    web3d-three.js場(chǎng)景設(shè)計(jì)器-sprite廣告牌

    three.js使用Sprite精靈實(shí)現(xiàn)文字或者圖片廣告牌 1.將文字繪制到Canvas,調(diào)整對(duì)應(yīng)寬高。 2.作為Cavans材質(zhì)綁定到Sprite 3.加載到場(chǎng)景調(diào)整適當(dāng)?shù)膕cale function createLabel({ text, fontSize, textColor, color, imageUrl }) { ? ? return new Promise((resolve, reject) = { ? ? ? ? let canvas = document.createElement(\\\'canvas\\\')

    2024年02月02日
    瀏覽(59)
  • web 3d場(chǎng)景構(gòu)建+three.js+室內(nèi)圍墻,倉(cāng)庫(kù),樓梯,貨架模型等,第一人稱進(jìn)入場(chǎng)景案例

    web 3d場(chǎng)景構(gòu)建+three.js+室內(nèi)圍墻,倉(cāng)庫(kù),樓梯,貨架模型等,第一人稱進(jìn)入場(chǎng)景案例

    ? 翻到了之前的一個(gè)案例,基于three.js做的倉(cāng)庫(kù)布局模擬,地圖元素除了大模型外,其他都是通過(guò)JSON數(shù)據(jù)解析動(dòng)態(tài)生成的,例如墻體,柱子門口,地標(biāo)等,集成了第一人稱的插件可以第一人稱進(jìn)入場(chǎng)景有需要的可以下載看看,對(duì)想入門的朋友應(yīng)該有一些參考價(jià)值。 /** ? ?*創(chuàng)

    2024年02月10日
    瀏覽(21)
  • 除了three.js,還有許多其他前端開(kāi)發(fā)語(yǔ)言和庫(kù)可以用于創(chuàng)建3D可視化大屏

    除了three.js,還有許多其他前端開(kāi)發(fā)語(yǔ)言和庫(kù)可以用于創(chuàng)建3D可視化大屏

    hello老鐵們...本人熟悉html5,vue對(duì)bootsrap,uniapp,layui,element,vite,antd,echarts,jq響應(yīng)式尤其擅長(zhǎng),ui設(shè)計(jì)等技能,如果ui前端工作中有遇到煩惱可私信關(guān)注評(píng)論我們共同交流進(jìn)步!謝謝?? ? ? 隨著前端技術(shù)的飛速發(fā)展,3D可視化已經(jīng)成為許多應(yīng)用場(chǎng)景中不可或缺的一部分。在

    2024年03月15日
    瀏覽(98)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包