three.js - 使用 BufferGeometry 的简单正方形
问题描述
我曾经在我的项目中使用 THREE.Geometry 制作了一个自定义正方形。现在,在three.js 的最新更新之后,Geometry 被完全删除,我必须让我的代码与 BufferGeometry 一起使用。我有点困惑我必须如何更改代码才能使其工作。我现在并没有真正得到顶点部分。我曾经有 4 个由 Vector3 和两个面组成的顶点。
所以它看起来像这样:
let v1 = new THREE.Vector3(...,...,...)
let v2 = new THREE.Vector3(...,...,...)
let v3 = new THREE.Vector3(...,...,...)
let v4 = new THREE.Vector3(...,...,...)
obj.vertices.push(v1)
obj.vertices.push(v2)
obj.vertices.push(v3)
obj.vertices.push(v4)
let face1 = new THREE.Face3(0, 1, 2)
let face2 = new THREE.Face3(2, 3, 0)
obj.faces.push(face1)
obj.faces.push(face2)
我已经阅读了 THREE 网站上的文档,但我真的不明白如何更改它以使其与 BufferGeometry 一起使用。任何提示将不胜感激。
谢谢
解决方案
像这样尝试:
let camera, scene, renderer;
init();
render();
function init() {
camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.01, 10);
camera.position.z = 2;
scene = new THREE.Scene();
const geometry = new THREE.BufferGeometry();
const vertices = [
-1, -1, 0,
1, -1, 0,
1, 1, 0,
-1, 1, 0
];
const indices = [
0, 1, 2, // first triangle
2, 3, 0 // second triangle
];
geometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));
geometry.setIndex(indices);
const material = new THREE.MeshBasicMaterial();
const mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
}
function render() {
renderer.render(scene, camera);
}
body {
margin: 0;
}
<script src="https://cdn.jsdelivr.net/npm/three@0.126.1/build/three.js"></script>
推荐阅读
- ios - 以编程方式退出 AVPlayerViewController 全屏?
- php - Eclipse PDT - 如何在整个项目中强制进行全面的文件验证
- python - 为什么图像上传失败,错误为 selenium.common.exceptions.WebDriverException:消息:未知错误:无法聚焦元素
- django - 使用 re_path 处理 URL 参数中的空格
- lucene - 如何返回在索引中获得命中的查询词
- javascript - 使用 React 在 Bootstrap (V 3.3.7) 模式中渲染图表
- javascript - 在 textarea 或 contenteditable div 中键入 TAB 时检测最后一个书面单词
- javascript - 更改 Anychart 雷达图中的线条颜色
- python - 加快同一个大文件中的多个字符串搜索?
- intellij-idea - 如果未启用“列出所有 Gerrit 更改”,则 Gerrit 更改不会出现在 IntelliJ IDEA 中