- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否可以为每个 InstancedBufferGeometry
实例拥有不同的顶点颜色。
const xRes = 3;
const yRes = 2;
const numVertices = xRes * yRes;
geometry = new THREE.InstancedBufferGeometry();
geometry.copy(new THREE.PlaneBufferGeometry(3, 2, xRes, yRes));
const particleCount = 500;
const vertexColorArray = new Float32Array(particleCount * numVertices * 3);
for (let i = 0; i < particleCount * numVertices * 3; i++) {
vertexColorArray[i] = Math.random();
}
const colors = new THREE.BufferAttribute(vertexColorArray, 3);
geometry.addAttribute("vertexColor", colors);
在这种情况下,所有实例共享相同的顶点颜色,当我执行 const color = new THREE.InstancedBufferAttribute(vertexColorArray, 3, 1);
时,每个实例都有一个单独的颜色,但不是每个实例顶点。
着色器看起来像这样:
<script id="vshader" type="x-shader/x-vertex">
precision highp float;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
uniform float time;
attribute vec3 position;
attribute vec3 translate;
attribute vec3 vertexColor;
varying vec3 vVertexColor;
void main() {
vec4 mvPosition = modelViewMatrix * vec4(translate, 1.0);
vec3 trTime = vec3(
translate.x + time,
translate.y + time,
translate.z + time
);
float scale = 1.0;
scale = scale * 10.0 + 10.0;
mvPosition.xyz += position * scale;
vVertexColor = vertexColor;
gl_Position = projectionMatrix * mvPosition;
}
</script>
<script id="fshader" type="x-shader/x-fragment">
precision highp float;
varying vec3 vVertexColor;
void main() {
gl_FragColor = vec4(vVertexColor, 1);
}
</script>
最佳答案
您想知道使用InstancedBufferGeoemtry
时是否可以让每个实例的每个顶点具有不同的顶点颜色。
是的,这是可能的。
一种方法是以编程方式计算着色器中的颜色,或者通过基于几何顶点 ID 和实例 ID 的查找表:
geometry.addAttribute( 'vertexID', new THREE.BufferAttribute( vertexIDs, 1 ) );
geometry.addAttribute( 'instanceID', new THREE.InstancedBufferAttribute( instanceIDs, 1 ) );
因此,在着色器中,您可以访问原始几何体的顶点 ID,并且还可以访问实例的 ID。根据这两个值,您可以在着色器中为每个实例的每个顶点设置唯一的颜色。
三.js r.84
关于javascript - 每个 `InstancedBufferGeometry` 实例是否可以有不同的顶点颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43306488/
我想知道是否可以为每个 InstancedBufferGeometry 实例拥有不同的顶点颜色。 const xRes = 3; const yRes = 2; const numVertices =
我需要创建一个包含数千个简单网格的场景,因此我决定使用 InstancedBufferGeometry。我从这个例子中复制了大部分代码:https://threejs.org/examples/#we
当我渲染 3000 个模型实例并将它们保留在 View 区域中时,我得到 55FPS,但是如果我有 5000 个模型实例,但将其中 2000 个实例保留在 View 区域之外,我仍然得到 40 FPS
我正在玩实例,非常棒。 现在我试图让每个实例都转换阴影,但没有运气。我制作了兰伯特 Material 的克隆,添加了位置、比例等的实例处理,并且正在工作,但这仅转换一个阴影:位置 (0,0,0) 处原
当我渲染 3000 个模型实例并将它们保留在 View 区域中时,我得到 55FPS,但是如果我有 5000 个模型实例,但将其中 2000 个实例保留在 View 区域之外,我仍然得到 40 FPS
我正在尝试了解新的 THREE.InstancedBufferGeometry 功能的工作原理,以便我可以针对我的用例对其进行评估。具体来说,我需要一种方法,我可以在将来的某个时候添加一个对象的新实例
我正在处理一个使用点、InstancedBufferGeometry 和 RawShaderMaterial 的场景。我想在场景中添加光线转换,这样当点击一个点时我可以确定点击了哪个点。 在之前的场景
我的问题与几年前回答过的问题有关,我开始工作了: three.js texture across InstanceGeometry 我正在将我的应用程序从 r95 更新到最新的 r124。 首先,我创
我是一名优秀的程序员,十分优秀!