亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

three.js中點對象(Point)和點材質(zhì)(PointsMaterial)的具體使用

 更新時間:2023年07月26日 15:32:33   作者:jieyucx  
本文主要介紹了three.js中點對象(Point)和點材質(zhì)(PointsMaterial)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、點對象和點材質(zhì)基本介紹

1. 點材質(zhì)(PointsMaterial):

點材質(zhì)用于渲染點對象,它決定了點的顏色、透明度等屬性。

常用屬性有:

  • color: 點的顏色,默認(rèn)為白色。
  • opacity: 點的透明度,默認(rèn)為1。
  • size: 點的大小,可以使用PointScaleAttenuation屬性同時調(diào)整大小。
  • sizeAttenuation: 是否使用點大小衰減(根據(jù)相機(jī)遠(yuǎn)近自動調(diào)整點的大?。J(rèn)為true。
  • map: 對點紋理進(jìn)行設(shè)置,可以使用貼圖來代替單色點,如星空。

舉例說明:

var material = new THREE.PointsMaterial({ 
    color: 0xffffff, 
    size: 0.1 
}); 

2. 點對象(Three.Point):

點對象用于渲染單個點,可以通過添加多個點對象來形成點云。

常用屬性有:

  • position: 點的位置,可以是THREE.Vector3類型的變量。
  • color: 點的顏色,使用PointsMaterial的color屬性進(jìn)行設(shè)置,默認(rèn)為白色。
  • size: 點的大小,使用PointsMaterial的size屬性進(jìn)行設(shè)置,默認(rèn)為1。

舉例說明:

var pointGeometry = new THREE.Geometry(); 
pointGeometry.vertices.push( new THREE.Vector3( 0, 0, 0 ) ); 
var pointMaterial = new THREE.PointsMaterial( { size: 5, color: 0xff0000 } ); 
var point = new THREE.Points( pointGeometry, pointMaterial ); 

3. 基本運用示例

1. 步驟詳解

首先我們需要創(chuàng)建一個場景、相機(jī)和渲染器:

// 1、創(chuàng)建場景
const scene = new THREE.Scene();
// 2、創(chuàng)建相機(jī)
const camera = new THREE.PerspectiveCamera(
  75,
  window.innerWidth / window.innerHeight,
  0.1,
  1000
);
// 設(shè)置相機(jī)位置
camera.position.set(0, 0, 10);
scene.add(camera);
// 初始化渲染器
const renderer = new THREE.WebGLRenderer();
// 設(shè)置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight);
// 開啟場景中的陰影貼圖
renderer.shadowMap.enabled = true;
renderer.physicallyCorrectLights = true;
// 將webgl渲染的canvas內(nèi)容添加到body
document.body.appendChild(renderer.domElement);

接著,我們需要創(chuàng)建一個球體,和定義一個點材質(zhì),

// 創(chuàng)建球幾何體
const sphereGeometry = new THREE.SphereBufferGeometry(3, 30, 30);
// 設(shè)置點材質(zhì)
const pointsMaterial = new THREE.PointsMaterial();
pointsMaterial.size = 0.1; // 設(shè)置點的大小
// 相機(jī)深度而衰減
pointsMaterial.sizeAttenuation = true; // 設(shè)置點的大小是否隨著距離的增加而減小

將幾何體和材質(zhì)傳入點對象,并將點對象添加到場景中

const points = new THREE.Points(sphereGeometry, pointsMaterial); // 將幾何體和材質(zhì)傳入點對象
scene.add(points); // 將點對象添加到場景中

最后創(chuàng)建軌道控制器控制物體,和創(chuàng)建渲染函數(shù),渲染場景和相機(jī)

// 創(chuàng)建軌道控制器
const controls = new OrbitControls(camera, renderer.domElement);
// 設(shè)置控制器阻尼,讓控制器更有真實效果,必須在動畫循環(huán)里調(diào)用.update()。
controls.enableDamping = true;
function render() { // 渲染函數(shù)
  controls.update(); // 更新控制器
  renderer.render(scene, camera); // 渲染器渲染場景和相機(jī)
  //   渲染下一幀的時候就會調(diào)用render函數(shù)
  requestAnimationFrame(render);
}
render();

2.效果如圖:

3.完整示例代碼

import * as THREE from "three";
// 導(dǎo)入軌道控制器
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
// 導(dǎo)入動畫庫
import gsap from "gsap";
// 導(dǎo)入dat.gui
import * as dat from "dat.gui";
// 目標(biāo):認(rèn)識pointes
const gui = new dat.GUI();
// 1、創(chuàng)建場景
const scene = new THREE.Scene();
// 2、創(chuàng)建相機(jī)
const camera = new THREE.PerspectiveCamera(
  75,
  window.innerWidth / window.innerHeight,
  0.1,
  1000
);
// 設(shè)置相機(jī)位置
camera.position.set(0, 0, 10);
scene.add(camera);
// 創(chuàng)建球幾何體
const sphereGeometry = new THREE.SphereBufferGeometry(3, 30, 30);
// 設(shè)置點材質(zhì)
const pointsMaterial = new THREE.PointsMaterial();
pointsMaterial.size = 0.1; // 設(shè)置點的尺寸大小,默認(rèn)為1
// 相機(jī)深度而衰減
pointsMaterial.sizeAttenuation = true;
const points = new THREE.Points(sphereGeometry, pointsMaterial); // 將幾何體和材質(zhì)傳入點對象
scene.add(points);
// 初始化渲染器
const renderer = new THREE.WebGLRenderer();
// 設(shè)置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight);
// 開啟場景中的陰影貼圖
renderer.shadowMap.enabled = true;
renderer.physicallyCorrectLights = true;
// 將webgl渲染的canvas內(nèi)容添加到body
document.body.appendChild(renderer.domElement);
// 創(chuàng)建軌道控制器
const controls = new OrbitControls(camera, renderer.domElement);
// 設(shè)置控制器阻尼,讓控制器更有真實效果,必須在動畫循環(huán)里調(diào)用.update()。
controls.enableDamping = true;
function render() {
  controls.update();
  renderer.render(scene, camera);
  //   渲染下一幀的時候就會調(diào)用render函數(shù)
  requestAnimationFrame(render);
}
render();
// 監(jiān)聽畫面變化,更新渲染畫面
window.addEventListener("resize", () => {
  //   console.log("畫面變化了");
  // 更新攝像頭
  camera.aspect = window.innerWidth / window.innerHeight;
  //   更新攝像機(jī)的投影矩陣
  camera.updateProjectionMatrix();
  //   更新渲染器
  renderer.setSize(window.innerWidth, window.innerHeight);
  //   設(shè)置渲染器的像素比
  renderer.setPixelRatio(window.devicePixelRatio);
});

如上面的示例,我們用點材質(zhì)(pointsMaterial)和點對象(point)結(jié)合 球體(THREE.SphereBufferGeometry(3, 30, 30))實現(xiàn)了以點的形式構(gòu)建一個球體,我們放大球體看看

可以看到每個點其實是由小立方體組成的。

到此這篇關(guān)于three.js中點對象(Point)和點材質(zhì)(PointsMaterial)的具體使用的文章就介紹到這了,更多相關(guān)three.js中點對象和點材質(zhì)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS+CSS實現(xiàn)簡單滑動門(滑動菜單)效果

    JS+CSS實現(xiàn)簡單滑動門(滑動菜單)效果

    這篇文章主要介紹了JS+CSS實現(xiàn)簡單滑動門(滑動菜單)效果,通過JavaScript響應(yīng)鼠標(biāo)事件動態(tài)設(shè)置頁面元素樣式實現(xiàn)滑動菜單功能,需要的朋友可以參考下
    2015-09-09
  • js輪播圖無縫滾動效果

    js輪播圖無縫滾動效果

    這篇文章主要為大家詳細(xì)介紹了js輪播圖無縫滾動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • JS實現(xiàn)水平移動與垂直移動動畫

    JS實現(xiàn)水平移動與垂直移動動畫

    這篇文章主要為大家詳細(xì)介紹了JS實現(xiàn)水平移動與垂直移動動畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 淺談JS獲取元素的N種方法及其動靜態(tài)討論

    淺談JS獲取元素的N種方法及其動靜態(tài)討論

    這篇文章主要介紹了淺談JS獲取元素的N種方法及其動靜態(tài)討論,非常具有實用價值,需要的朋友可以參考下
    2017-08-08
  • JavaScript異步操作的方法小結(jié)

    JavaScript異步操作的方法小結(jié)

    在現(xiàn)代Web開發(fā)中,異步編程是不可或缺的一部分,JavaScript通過多種方式支持異步操作,允許開發(fā)者處理非阻塞代碼執(zhí)行,從而提高應(yīng)用性能和響應(yīng)速度,本文給大家介紹了JavaScript異步操作的常見方法,需要的朋友可以參考下
    2025-01-01
  • JavaScript-定時器0~9抽獎系統(tǒng)詳解(代碼)

    JavaScript-定時器0~9抽獎系統(tǒng)詳解(代碼)

    這篇文章主要介紹了 JavaScript-定時器0~9抽獎系統(tǒng),通過代碼實例說明函數(shù)調(diào)用的整體操作,具體步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • javascript用戶注冊提示效果的簡單實例

    javascript用戶注冊提示效果的簡單實例

    這個可以增加用戶驗證,不用js alert來作提示,而是在右邊提示,現(xiàn)在很多網(wǎng)站都這樣做,有需要的朋友可以參考一下
    2013-08-08
  • JavaScript中for..in循環(huán)陷阱介紹

    JavaScript中for..in循環(huán)陷阱介紹

    for...in循環(huán)中的循環(huán)計數(shù)器是字符串,而不是數(shù)字它包含當(dāng)前屬性的名稱或當(dāng)前數(shù)組元素的索引,下面有個不錯的示例大家可以參考下
    2013-11-11
  • canvas 實現(xiàn)中國象棋

    canvas 實現(xiàn)中國象棋

    本文主要介紹了canvas 實現(xiàn)中國象棋的方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • webpack 4.0.0-beta.0版本新特性介紹

    webpack 4.0.0-beta.0版本新特性介紹

    本篇文章主要介紹了webpack 4.0.0-beta.0版本新特性介紹,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02

最新評論