ThreeJS geometry的顶点世界坐标

<!DOCTYPE html>
<html lang="en">

	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			body {
				margin: 0;
				overflow: hidden;
				/* 隐藏body窗口区域滚动条 */
			}
		</style>
		<!--引入three.js三维引擎-->
		<script src="../../three.js-master/build/three.js"></script>
		<!-- 引入threejs扩展控件OrbitControls.js -->
		<script src="../../three.js-master/examples/js/controls/OrbitControls.js"></script>
	</head>

	<body>
		<script>
			/**
			 * 创建场景对象Scene
			 */
			var scene = new THREE.Scene();
			let geometry3 = new THREE.PlaneGeometry(100, 100);
			let material3 = new THREE.MeshBasicMaterial({
				color: 0x00ff00,
				//side: THREE.DoubleSide
			});
			let rect = new THREE.Mesh(geometry3, material3);
			rect.rotateX(Math.PI/2); //x轴旋转90度
			
			
			
			scene.updateMatrixWorld(true);
			var worldPosition = new THREE.Vector3();
			rect.getWorldPosition(worldPosition)
			
			console.log('原始顶点坐标',rect.geometry.vertices);
			
			rect.geometry.vertices.forEach(el=>{				
				var vector = el.clone();
				vector.applyMatrix4( rect.matrixWorld );
				console.log('旋转后的顶点世界坐标',vector);
			});
			
			scene.add(rect);
console.log(rect.toJSON());


			// 			// 辅助坐标系   老版本AxisHelper 新版本AxesHelper
			var axisHelper = new THREE.AxisHelper(250);
			scene.add(axisHelper);
			/**
			 * 光源设置
			 */
			//点光源
			// var point = new THREE.PointLight(0xffffff);
			// point.position.set(400, 200, 300); //点光源位置
			// scene.add(point); //点光源添加到场景中
			// //环境光
			// var ambient = new THREE.AmbientLight(0x444444);
			// scene.add(ambient);
			/**
			 * 相机设置
			 */
			var width = window.innerWidth; //窗口宽度
			var height = window.innerHeight; //窗口高度
			var k = width / height; //窗口宽高比
			var s = 150; //三维场景显示范围控制系数,系数越大,显示的范围越大
			//创建相机对象
			var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
			camera.position.set(200, 300, 200); //设置相机位置
			camera.lookAt(scene.position); //设置相机方向(指向的场景对象)
			/**
			 * 创建渲染器对象
			 */
			var renderer = new THREE.WebGLRenderer();
			renderer.setSize(width, height); //设置渲染区域尺寸
			renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
			document.body.appendChild(renderer.domElement); //body元素中插入canvas对象

			// 渲染函数
			function render() {
				renderer.render(scene, camera); //执行渲染操作
			}
			render();
			//创建控件对象  相机对象camera作为参数   控件可以监听鼠标的变化,改变相机对象的属性
			var controls = new THREE.OrbitControls(camera);
			//监听鼠标事件,触发渲染函数,更新canvas画布渲染效果
			controls.addEventListener('change', render);
		</script>
	</body>

</html>

  参考:

http://www.yanhuangxueyuan.com/Three.js_course/first.html

http://techbrood.com/zh/news/webgl/three_js-%E5%AF%B9%E8%B1%A1%E5%B1%80%E9%83%A8%E5%9D%90%E6%A0%87%E8%BD%AC%E6%8D%A2%E4%B8%BA%E4%B8%96%E7%95%8C%E5%9D%90%E6%A0%87.html

 

 

 

From:https://www.cnblogs.com/xuejianxiyang/p/9706789.html

转载于:https://www.cnblogs.com/xuejianxiyang/p/9706789.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Three.js中的Geometry是其他很多Geometry(如BoxGeometry、SphereGeometry)的基类,它是用来创建几何体的对象。Geometry对象包含了顶点、面和UV坐标等信息,可以用来描述一个物体的形状。\[1\] 在Three.js中,可以通过添加顶点、面和UV坐标来创建一个Geometry对象。顶点是物体的顶点坐标,面是由顶点组成的三角形或四边形,而UV坐标则是用来贴上纹理的坐标。通过设置这些属性,可以创建出各种不同形状的物体。 例如,可以通过以下代码创建一个三角形,并为其贴上纹理: ```javascript var vertices = \[ new THREE.Vector3(-1.0, -1.0, 0.0), new THREE.Vector3(1.0, -1.0, 0.0), new THREE.Vector3(1.0, 1.0, 0.0) \]; var face = new THREE.Face3(0, 1, 2); var faces = \[face\]; var uvs = \[ \[ new THREE.Vector2(0.0, 0.0), new THREE.Vector2(1.0, 0.0), new THREE.Vector2(1.0, 1.0) \] \]; var geometry = new THREE.Geometry(); geometry.vertices = vertices; geometry.faces = faces; geometry.faceVertexUvs\[0\] = uvs; var texture = new THREE.TextureLoader().load('test.jpg'); var material = new THREE.MeshBasicMaterial({ map: texture }); var mesh = new THREE.Mesh(geometry, material); scene.add(mesh); ``` 这段代码创建了一个三角形的Geometry对象,并为其贴上名为'test.jpg'的纹理。最后,通过创建一个Mesh对象,将Geometry和Material结合起来,并将其添加到场景中。\[2\] 除了基本的几何体,Three.js还提供了许多其他类型的Geometry,如ConeGeometry、BoxGeometry等,可以根据需要选择合适的Geometry来创建不同形状的物体。例如,可以使用ConeGeometry来创建一个圆锥体: ```javascript var cone = new THREE.Mesh(new THREE.ConeGeometry(100, 100, 100, 10, false, 0, Math.PI * 3 / 2), material); scene.add(cone); ``` 这段代码创建了一个圆锥体的Geometry对象,并使用相应的Material创建了一个Mesh对象,最后将其添加到场景中。\[3\] #### 引用[.reference_title] - *1* *2* [ThreejsGeometry的用法示例](https://blog.csdn.net/yb0022/article/details/103329939)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [THREE.JS之几何体(Geometry)](https://blog.csdn.net/u011135260/article/details/52725162)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值