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

TransformControls 是 Three.js 中的一個(gè)類,用于在網(wǎng)頁(yè)中進(jìn)行 3D 場(chǎng)景中物體的交互式操作。

這篇具有很好參考價(jià)值的文章主要介紹了TransformControls 是 Three.js 中的一個(gè)類,用于在網(wǎng)頁(yè)中進(jìn)行 3D 場(chǎng)景中物體的交互式操作。。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

demo案例

TransformControls 是 Three.js 中的一個(gè)類,用于在網(wǎng)頁(yè)中進(jìn)行 3D 場(chǎng)景中物體的交互式操作。讓我們來(lái)詳細(xì)講解它的輸入?yún)?shù)、輸出、屬性和方法:
transformcontrols,threejs,javascript,3d,開(kāi)發(fā)語(yǔ)言

輸入?yún)?shù):

TransformControls 構(gòu)造函數(shù)通常接受兩個(gè)參數(shù):

  1. camera(THREE.Camera):用于渲染場(chǎng)景的攝像機(jī)。這個(gè)參數(shù)是必需的。

  2. domElement(HTMLElement):控制器將附加到的 HTML 元素。通常是渲染器的 DOM 元素。這個(gè)參數(shù)是可選的,如果未提供,則控制器將附加到文檔主體上。

輸出:

TransformControls 實(shí)例:表示變換控制器的對(duì)象,初始化為指定的攝像機(jī),并附加到指定的 DOM 元素(如果未提供元素,則附加到文檔主體)。

屬性:

  1. object(THREE.Object3D):由變換控制器操作的對(duì)象。

  2. enabled(布爾值):指示控制器當(dāng)前是否已啟用或禁用。

  3. space(字符串):指定變換空間(‘local’ 或 ‘world’),其中應(yīng)用變換。

  4. size(數(shù)字):以像素為單位的變換控制器的大小。

  5. dragging(布爾值):指示用戶當(dāng)前是否正在拖動(dòng)控制器。

  6. showX(布爾值)、showY(布爾值)、showZ(布爾值):指示是否顯示沿 X、Y 和 Z 軸的控制手柄。

  7. mode(字符串):變換模式(‘translate’、‘rotate’ 或 ‘scale’)。

  8. camera(THREE.Camera):控制器使用的攝像機(jī)。

  9. domElement(HTMLElement):控制器附加到的 DOM 元素。

方法:

  1. attach(object: THREE.Object3D):將控制器附加到指定的對(duì)象以進(jìn)行操作。

  2. detach():將控制器從任何對(duì)象中分離,有效地停止操作,直到附加新對(duì)象為止。

  3. dispose():移除控制器,釋放資源。

  4. update():更新控制器。應(yīng)該在渲染循環(huán)中的每一幀中調(diào)用。

  5. setMode(mode: String):將變換模式設(shè)置為 ‘translate’、‘rotate’ 或 ‘scale’ 中的一種。

  6. setSize(size: Number):設(shè)置變換控制器的大?。ㄒ韵袼貫閱挝唬?。

  7. setSpace(space: String):將變換空間設(shè)置為 ‘local’ 或 ‘world’。

TransformControls 具體來(lái)說(shuō),它可以實(shí)現(xiàn)以下功能:

  1. 平移(Translate):您可以移動(dòng)物體,使其沿著三維空間中的 X、Y 或 Z 軸移動(dòng)。這對(duì)于調(diào)整物體在場(chǎng)景中的位置非常有用。

  2. 旋轉(zhuǎn)(Rotate):您可以圍繞物體的原點(diǎn)或者某一指定點(diǎn)進(jìn)行旋轉(zhuǎn)操作,改變物體的方向或朝向。

  3. 縮放(Scale):您可以調(diào)整物體的大小,使其放大或縮小。這在場(chǎng)景中創(chuàng)建視覺(jué)效果或者調(diào)整物體大小時(shí)非常有用。

  4. 設(shè)置變換空間(Set Transform Space):您可以選擇將變換應(yīng)用于物體的局部坐標(biāo)系(Local Space)還是全局坐標(biāo)系(World Space)。在局部坐標(biāo)系中進(jìn)行變換會(huì)受到物體當(dāng)前旋轉(zhuǎn)的影響,而在全局坐標(biāo)系中進(jìn)行變換則會(huì)忽略物體的旋轉(zhuǎn)。

  5. 多軸控制(Multiple Axis Control):您可以單獨(dú)控制每個(gè)軸上的變換,以便更精確地調(diào)整物體的位置、旋轉(zhuǎn)或縮放。

  6. 實(shí)時(shí)交互(Real-time Interaction):變換控制器提供實(shí)時(shí)的交互式體驗(yàn),您可以通過(guò)拖動(dòng)控制器上的手柄來(lái)直接調(diào)整物體的變換參數(shù)。

  7. 自定義設(shè)置(Customization):您可以通過(guò)控制器的屬性來(lái)自定義其外觀和行為,例如控制手柄的顯示、設(shè)置控制器的大小等。

<!DOCTYPE html>
<html lang="en">
	<head>
		<title>three.js webgl - transform controls</title>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
		<link type="text/css" rel="stylesheet" href="main.css">
	</head>
	<body>

		<div id="info">
			"W" translate | "E" rotate | "R" scale | "+/-" adjust size<br />
			"Q" toggle world/local space |  "Shift" snap to grid<br />
			"X" toggle X | "Y" toggle Y | "Z" toggle Z | "Spacebar" toggle enabled<br />
			"Esc" reset current transform<br />
			"C" toggle camera | "V" random zoom
		</div>

		<script type="importmap">
			{
				"imports": {
					"three": "../build/three.module.js",
					"three/addons/": "./jsm/"
				}
			}
		</script>

		<script type="module">

			import * as THREE from 'three';

			import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
			import { TransformControls } from 'three/addons/controls/TransformControls.js';

			let cameraPersp, cameraOrtho, currentCamera;
			let scene, renderer, control, orbit;

			init();
			render();

			function init() {

				renderer = new THREE.WebGLRenderer( { antialias: true } );
				renderer.setPixelRatio( window.devicePixelRatio );
				renderer.setSize( window.innerWidth, window.innerHeight );
				document.body.appendChild( renderer.domElement );

				const aspect = window.innerWidth / window.innerHeight;

				cameraPersp = new THREE.PerspectiveCamera( 50, aspect, 0.01, 30000 );
				cameraOrtho = new THREE.OrthographicCamera( - 600 * aspect, 600 * aspect, 600, - 600, 0.01, 30000 );
				currentCamera = cameraPersp;

				currentCamera.position.set( 5, 2.5, 5 );

				scene = new THREE.Scene();
				scene.add( new THREE.GridHelper( 5, 10, 0x888888, 0x444444 ) );

				const ambientLight = new THREE.AmbientLight( 0xffffff );
				scene.add( ambientLight );

				const light = new THREE.DirectionalLight( 0xffffff, 4 );
				light.position.set( 1, 1, 1 );
				scene.add( light );

				const texture = new THREE.TextureLoader().load( 'textures/crate.gif', render );
				texture.colorSpace = THREE.SRGBColorSpace;
				texture.anisotropy = renderer.capabilities.getMaxAnisotropy();

				const geometry = new THREE.BoxGeometry();
				const material = new THREE.MeshLambertMaterial( { map: texture } );

				orbit = new OrbitControls( currentCamera, renderer.domElement );
				orbit.update();
				orbit.addEventListener( 'change', render );

				control = new TransformControls( currentCamera, renderer.domElement );
				control.addEventListener( 'change', render );

				control.addEventListener( 'dragging-changed', function ( event ) {

					orbit.enabled = ! event.value;

				} );

				const mesh = new THREE.Mesh( geometry, material );
				scene.add( mesh );

				control.attach( mesh );
				scene.add( control );

				window.addEventListener( 'resize', onWindowResize );

				window.addEventListener( 'keydown', function ( event ) {

					switch ( event.keyCode ) {

						case 81: // Q
							control.setSpace( control.space === 'local' ? 'world' : 'local' );
							break;

						case 16: // Shift
							control.setTranslationSnap( 100 );
							control.setRotationSnap( THREE.MathUtils.degToRad( 15 ) );
							control.setScaleSnap( 0.25 );
							break;

						case 87: // W
							control.setMode( 'translate' );
							break;

						case 69: // E
							control.setMode( 'rotate' );
							break;

						case 82: // R
							control.setMode( 'scale' );
							break;

						case 67: // C
							const position = currentCamera.position.clone();

							currentCamera = currentCamera.isPerspectiveCamera ? cameraOrtho : cameraPersp;
							currentCamera.position.copy( position );

							orbit.object = currentCamera;
							control.camera = currentCamera;

							currentCamera.lookAt( orbit.target.x, orbit.target.y, orbit.target.z );
							onWindowResize();
							break;

						case 86: // V
							const randomFoV = Math.random() + 0.1;
							const randomZoom = Math.random() + 0.1;

							cameraPersp.fov = randomFoV * 160;
							cameraOrtho.bottom = - randomFoV * 500;
							cameraOrtho.top = randomFoV * 500;

							cameraPersp.zoom = randomZoom * 5;
							cameraOrtho.zoom = randomZoom * 5;
							onWindowResize();
							break;

						case 187:
						case 107: // +, =, num+
							control.setSize( control.size + 0.1 );
							break;

						case 189:
						case 109: // -, _, num-
							control.setSize( Math.max( control.size - 0.1, 0.1 ) );
							break;

						case 88: // X
							control.showX = ! control.showX;
							break;

						case 89: // Y
							control.showY = ! control.showY;
							break;

						case 90: // Z
							control.showZ = ! control.showZ;
							break;

						case 32: // Spacebar
							control.enabled = ! control.enabled;
							break;

						case 27: // Esc
							control.reset();
							break;

					}

				} );

				window.addEventListener( 'keyup', function ( event ) {

					switch ( event.keyCode ) {

						case 16: // Shift
							control.setTranslationSnap( null );
							control.setRotationSnap( null );
							control.setScaleSnap( null );
							break;

					}

				} );

			}

			function onWindowResize() {

				const aspect = window.innerWidth / window.innerHeight;

				cameraPersp.aspect = aspect;
				cameraPersp.updateProjectionMatrix();

				cameraOrtho.left = cameraOrtho.bottom * aspect;
				cameraOrtho.right = cameraOrtho.top * aspect;
				cameraOrtho.updateProjectionMatrix();

				renderer.setSize( window.innerWidth, window.innerHeight );

				render();

			}

			function render() {

				renderer.render( scene, currentCamera );

			}

		</script>

	</body>
</html>

本內(nèi)容來(lái)源于小豆包,想要更多內(nèi)容請(qǐng)?zhí)D(zhuǎn)小豆包 》文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-852378.html

到了這里,關(guān)于TransformControls 是 Three.js 中的一個(gè)類,用于在網(wǎng)頁(yè)中進(jìn)行 3D 場(chǎng)景中物體的交互式操作。的文章就介紹完了。如果您還想了解更多內(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)文章

  • three.js加載3D模型,在網(wǎng)頁(yè)上展示3D模型(.glb.gltf.fbx格式)

    three.js加載3D模型,在網(wǎng)頁(yè)上展示3D模型(.glb.gltf.fbx格式)

    Three.js是一款開(kāi)源的主流3D繪圖JS引擎,簡(jiǎn)單點(diǎn),可以將它理解為three+js就可以了,three表示3D,js表示JavaScript的意思。 結(jié)構(gòu) ?.glb.gltf文件最好放在服務(wù)器上 放在本地容易報(bào)找不到的錯(cuò)?.fbx格式文件可以在本地用3d看圖(win10自帶)打開(kāi)另存為.glb格式 index.html代碼 js代碼 項(xiàng)目案例

    2024年02月11日
    瀏覽(101)
  • 用java語(yǔ)言寫一個(gè)網(wǎng)頁(yè)爬蟲(chóng) 用于獲取圖片

    以下是一個(gè)簡(jiǎn)單的Java程序,用于爬取網(wǎng)站上的圖片并下載到本地文件夾: 這個(gè)程序首先讀取指定網(wǎng)址的HTML源碼,然后從中提取出所有的圖片URL。最后,程序利用 Java 的 IO 功能下載這些圖片并保存到指定的本地文件夾中。 需要注意的是,該程序只是一個(gè)簡(jiǎn)單的演示,實(shí)際使

    2024年02月11日
    瀏覽(30)
  • 【Three.js】Three.js中的紋理—圖像應(yīng)用和屬性調(diào)整

    【Three.js】Three.js中的紋理—圖像應(yīng)用和屬性調(diào)整

    ? Three.js是一種強(qiáng)大的JavaScript庫(kù),用于創(chuàng)建基于Web的交互式3D圖形和動(dòng)畫(huà)。在Three.js中,紋理是一項(xiàng)重要的功能,它允許我們將圖像應(yīng)用到幾何體對(duì)象上,并通過(guò)調(diào)整紋理的屬性來(lái)實(shí)現(xiàn)更豐富的視覺(jué)效果。 本文將介紹Three.js中的紋理功能,并演示如何將圖片作為紋理應(yīng)用到幾何

    2024年02月15日
    瀏覽(17)
  • Three.js教程:第一個(gè)3D場(chǎng)景

    Three.js教程:第一個(gè)3D場(chǎng)景

    推薦:將 NSDT場(chǎng)景編輯器加入你3D工具鏈 其他工具系列: NSDT簡(jiǎn)石數(shù)字孿生 下面的代碼完整展示了通過(guò)three.js引擎創(chuàng)建的一個(gè)三維場(chǎng)景,在場(chǎng)景中繪制并渲染了一個(gè)立方體的效果,為了大家更好的宏觀了解three.js引擎, 盡量使用了一段短小但完整的代碼實(shí)現(xiàn)一個(gè)實(shí)際的三維效果

    2023年04月12日
    瀏覽(164)
  • Three.js - 實(shí)現(xiàn)一個(gè)3D地球可視化

    Three.js - 實(shí)現(xiàn)一個(gè)3D地球可視化

    3D地球可視化效果 3D地球的開(kāi)發(fā)并不復(fù)雜,對(duì)球形物體進(jìn)行貼圖操作,完成球體自轉(zhuǎn)和月球公轉(zhuǎn),太陽(yáng)場(chǎng)景設(shè)置等即可 上代碼 更多詳細(xì)代碼請(qǐng)關(guān)注公眾號(hào)索?。▊渥ⅲ汗娞?hào)):

    2024年02月04日
    瀏覽(90)
  • Three.js中的3D文字效果

    Three.js中的3D文字效果

    對(duì)于一些設(shè)計(jì)網(wǎng)頁(yè)中經(jīng)常會(huì)出現(xiàn)一些3D的文字效果,本文將利用Three.js實(shí)現(xiàn)各種動(dòng)畫(huà)WebGL文本輸入效果。 示例效果 原文章 通常情況下,文本網(wǎng)格是2D的平面形狀,我們所要實(shí)現(xiàn)的3D文本形狀則是要在2D的平面下,再生成z值形成一個(gè)立體的效果。 首先,我們創(chuàng)建一個(gè)canvas元素,

    2024年02月02日
    瀏覽(22)
  • 用three.js做一個(gè)3D漢諾塔游戲(上)

    用three.js做一個(gè)3D漢諾塔游戲(上)

    本文由孟智強(qiáng)同學(xué)原創(chuàng),主要介紹了如何利用 three.js 開(kāi)發(fā) 3D 應(yīng)用,涵蓋 3D 場(chǎng)景搭建、透視相機(jī)、幾何體、材質(zhì)、光源、3D 坐標(biāo)計(jì)算、補(bǔ)間動(dòng)畫(huà)以及物體交互實(shí)現(xiàn)等知識(shí)點(diǎn)。 入門 three.js 也有一陣子了,我發(fā)現(xiàn)用它做 3D 挺有趣的,而且學(xué)習(xí)門檻也不算高。在這篇博文中,我想

    2024年03月27日
    瀏覽(88)
  • Vue中如何進(jìn)行3D場(chǎng)景展示與交互(如Three.js)

    Vue中如何進(jìn)行3D場(chǎng)景展示與交互(如Three.js)

    隨著WebGL技術(shù)的發(fā)展,越來(lái)越多的網(wǎng)站開(kāi)始使用3D場(chǎng)景來(lái)展示產(chǎn)品、游戲等內(nèi)容。在Vue中,我們可以使用第三方庫(kù)Three.js來(lái)實(shí)現(xiàn)3D場(chǎng)景的展示與交互。本文將介紹如何在Vue中使用Three.js來(lái)創(chuàng)建3D場(chǎng)景,并實(shí)現(xiàn)交互功能。 Three.js是一個(gè)用于創(chuàng)建3D圖形的JavaScript庫(kù)。它基于WebGL技術(shù),

    2024年02月09日
    瀏覽(109)
  • 【Three.js基礎(chǔ)入門】:創(chuàng)建你的第一個(gè)3D場(chǎng)景

    【Three.js基礎(chǔ)入門】:創(chuàng)建你的第一個(gè)3D場(chǎng)景

    Three.js是一種強(qiáng)大的JavaScript庫(kù),用于在Web瀏覽器中創(chuàng)建交互式的3D圖形和動(dòng)畫(huà)。無(wú)需熟練的圖形編程經(jīng)驗(yàn),你也可以通過(guò)Three.js輕松地構(gòu)建令人驚嘆的3D場(chǎng)景。 本文將帶你逐步學(xué)習(xí)如何入門Three.js,從創(chuàng)建一個(gè)簡(jiǎn)單的3D場(chǎng)景開(kāi)始。 我們將介紹如何使用Three.js創(chuàng)建你的第一個(gè)3D場(chǎng)景

    2024年02月16日
    瀏覽(764)
  • Three.JS教程5 threejs中的材質(zhì)

    Three.JS教程5 threejs中的材質(zhì)

    Three.js中的材質(zhì)(Material)是實(shí)現(xiàn)引人注目的3D效果的關(guān)鍵組件之一。本篇博客中,我們將深入探討Three.js中的材質(zhì)類型、屬性和用法。 在Three.js中,材質(zhì)是應(yīng)用于幾何體(Geometry)的外觀和紋理的規(guī)則。它們決定了對(duì)象在場(chǎng)景中如何反射光線、顯示顏色、反射環(huán)境等。 Three.j

    2024年02月21日
    瀏覽(94)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包