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

WEB 3D技術(shù) three.js 聚光燈

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

本文 我們來說說 點(diǎn)光源和聚光燈

點(diǎn)光源 就像一個(gè)電燈泡一樣 想四周發(fā)散光
而聚光燈就像手電筒一樣 像一個(gè)方向射過去 距離越遠(yuǎn)范圍越大 光越弱

我們先來看一個(gè)聚光燈的效果
我們可以編寫代碼如下

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);

// 聚光燈光源
const spotlight = new THREE.SpotLight(0xffffff, 1);
spotlight.position.set(0, 2, 1);
spotlight.castShadow = true;
scene.add(spotlight);

// 創(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(3, 3),
  new THREE.MeshStandardMaterial({ color: 0xeeeeee })
);
plane.position.set(0, -1, 0);
plane.rotation.x = -Math.PI / 2;
plane.receiveShadow = true;
scene.add(plane);

// 創(chuàng)建一個(gè)canvas容器并追加到body上
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.shadowMap.enabled = 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();

SpotLight 聚光燈
然后通過 position 設(shè)置一下光的位置
運(yùn)行代碼如下
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
目前看 我們光是從直線照過來的 但其實(shí) 我們可以不通過position去算位置
可以直接通過 target 告訴它我們燈的目標(biāo)是誰
我們將代碼改成這樣

// 環(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 spotlight = new THREE.SpotLight(0xffffff, 1);
spotlight.castShadow = true;
spotlight.target = sphere1;
scene.add(spotlight);

這里 我們直接不設(shè)置它的position了 直接讓他打在我們 sphere1這個(gè)球體上了
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
angle 可以調(diào)整它的角度
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
我們調(diào)成這樣

const spotlight = new THREE.SpotLight(0xffffff, 1);
spotlight.position.set(1, 2, 0.5);
spotlight.castShadow = true;
scene.add(spotlight);

WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
然后 我們修改一下角度

const spotlight = new THREE.SpotLight(0xffffff, 1);
spotlight.position.set(1, 0, 2);
spotlight.castShadow = true;
spotlight.angle = Math.PI / 6;
scene.add(spotlight);

WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
我們將他改成 1
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
大概效果就是這樣
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
值越小 它聚焦的范圍就越小

distance 設(shè)置光照距離 簡單說 就是 設(shè)置你這個(gè)光 它能設(shè)多遠(yuǎn)
聚光燈的話 光照范圍會(huì)越遠(yuǎn)越擴(kuò)大 但聚焦越來越弱光照變?nèi)?那么 就是在你設(shè)置的距離中 沿途不斷擴(kuò)大范圍光強(qiáng)度慢慢變?nèi)?直到到了你的指定位置 完全消失
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript

例如 我們這里這樣寫

const spotlight = new THREE.SpotLight(0xffffff, 1);
spotlight.position.set(1, 0, 2);
spotlight.castShadow = true;
spotlight.angle = 1;
spotlight.distance = 3;
scene.add(spotlight);

它的光照距離就只能到3
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
我們改 兩百

const spotlight = new THREE.SpotLight(0xffffff, 1);
spotlight.position.set(1, 0, 2);
spotlight.castShadow = true;
spotlight.angle = 1;
spotlight.distance = 200;
scene.add(spotlight);

明顯就把我們物體后面的陰影整個(gè)照出來了
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
penumbra 設(shè)置光周圍的一個(gè)衰減效果
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
這個(gè)值是 0 到 1

const spotlight = new THREE.SpotLight(0xffffff, 1);
spotlight.position.set(1, 0, 2);
spotlight.castShadow = true;
spotlight.angle = 1;
spotlight.distance = 200;
spotlight.penumbra = 0;
scene.add(spotlight);

默認(rèn)值就是 0 效果不太明顯
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
我們來個(gè) 0.9

const spotlight = new THREE.SpotLight(0xffffff, 1);
spotlight.position.set(1, 0, 2);
spotlight.castShadow = true;
spotlight.angle = 1;
spotlight.distance = 200;
spotlight.penumbra = 0.9;
scene.add(spotlight);

WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
就是 光線的兩側(cè)效果光會(huì)值越大越弱

decay 沿著光照的距離衰減
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
默認(rèn)值是2 會(huì)比較符合現(xiàn)實(shí)中的情況

我們給個(gè) 0

const spotlight = new THREE.SpotLight(0xffffff, 1);
spotlight.position.set(1, 0, 2);
spotlight.castShadow = true;
spotlight.angle = 1;
spotlight.distance = 200;
spotlight.decay = 0;
scene.add(spotlight);

光照效果衰減的就基本沒有 就會(huì)顯得前后都很亮
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
我們調(diào)成2 光照縮減明顯就變快了
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
調(diào)成 10 基本一下就縮沒了
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
但 如果你想在邏輯事件中 例如 GUI 中去修改 decay 就要開啟 渲染器的光照計(jì)算 physicallyCorrectLights字段 給個(gè)true就行
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
intensity 的話 也可以控制我們光的強(qiáng)度
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
它的默認(rèn)值 就是個(gè) 1
我們這里來個(gè)10
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript
效果就變得非常明顯了
WEB 3D技術(shù) three.js 聚光燈,前端,3d,javascript文章來源地址http://www.zghlxwxcb.cn/news/detail-811585.html

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

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

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

相關(guān)文章

  • WEB 3D技術(shù) three.js 3D賀卡(3) 點(diǎn)光源燈光動(dòng)畫效果

    WEB 3D技術(shù) three.js 3D賀卡(3) 點(diǎn)光源燈光動(dòng)畫效果

    經(jīng)過 上文 WEB 3D技術(shù) three.js 3D賀卡(2) 加入天空與水面效果 我們將水面 和 天空的效果搭建了一下 那么 我們將四周 點(diǎn)光源的效果做一下 首先 我們將 renderer.toneMappingExposure 的值 改為 0.1 讓效果看著明顯一點(diǎn) 這樣 整個(gè)界面就會(huì)暗下來 然后 我們在任意位置 加入代碼 創(chuàng)建一個(gè)點(diǎn)

    2024年01月19日
    瀏覽(106)
  • 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)境 我們簡單搭了一個(gè)賀卡雛形 然后 我們要引入一個(gè)hdr的一個(gè)天空的效果 所以 我們需要在代碼中導(dǎo)入 RGBELoader 這里 大家可以選擇下載我的hdr資源 WEB 3D技術(shù) three.js 3D賀卡 天空 hdr資源 下載好之后呢 我們在外面套一個(gè) xhdr 文件夾

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

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

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

    2024年02月01日
    瀏覽(99)
  • 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里面都是非常大的場景 有些工具 它會(huì)因?yàn)檫^大做了壓縮 導(dǎo)致 我們開始是用不了的 我們可以官網(wǎng)搜索 draco 如下圖選擇 這是個(gè)解壓工具 用在我們各種的3D建模軟件中 大部分是通用的 我們先在代碼中導(dǎo)入工具 我們在項(xiàng)目根目錄中 找到 node_modules下的 three 然后

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

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

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

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

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

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

    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)營活動(dòng)新玩法層出不窮,web 3D炙手可熱,本文將一步步帶大家了解如何利用Three.js和Blender來打造一個(gè)沉浸式web 3D展覽館。 3D展覽館是什么,先來預(yù)覽下效果: 看起來像個(gè)3D冒險(xiǎn)類手游,用戶可以操縱屏幕中央的虛擬搖桿,以第一人稱視角

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

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

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

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

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

    three.js使用Sprite精靈實(shí)現(xiàn)文字或者圖片廣告牌 1.將文字繪制到Canvas,調(diào)整對應(yīng)寬高。 2.作為Cavans材質(zhì)綁定到Sprite 3.加載到場景調(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場景構(gòu)建+three.js+室內(nèi)圍墻,倉庫,樓梯,貨架模型等,第一人稱進(jìn)入場景案例

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

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

    2024年02月10日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包