three.js - Three.js InstancedMesh:更新实例矩阵后不改变着色器
问题描述
我正在使用带有自定义轮廓着色器的 InstancedMesh:
<script type="x-shader/x-vertex" id="vertexShader">
uniform float offset;
void main() {
vec4 pos = modelViewMatrix * vec4( position + normal * offset, 1.0 );
gl_Position = projectionMatrix * pos;
}
</script>
<script type="x-shader/x-fragment" id="fragmentShader">
uniform vec3 color;
uniform float intensity;
void main() {
gl_FragColor = vec4( color, intensity );
}
</script>
然后,我创建了着色器材质:
var uniforms = {
offset: { type: 'f', value: 0.001 },
color: { type: 'c', value: new THREE.Color(0x6B6B6B) },
intensity: { type: 'f', value: 1.0 },
};
var outlineMaterial = new THREE.ShaderMaterial( {
uniforms: uniforms,
vertexShader: document.getElementById( 'vertexShader' ).textContent,
fragmentShader: document.getElementById( 'fragmentShader' ).textContent
});
然后我创建了一个带有盒子几何形状和这种材质的 InstancedMesh。但是,当我更新实例矩阵时,着色器似乎没有受到影响。
var dummy = new THREE.Object3D();
var outlineGometry = new THREE.BoxGeometry(1, 1, 1);
var outline = new THREE.InstancedMesh(outlineGometry, outlineMaterial, 1);
dummy.position.set(0, 0, 0);
dummy.rotation.set(0, Math.PI/4, 0);
dummy.scale.set(0.1, 0.1, 0.1);
dummy.updateMatrix();
outline.setMatrixAt( 0, dummy.matrix );
outline.instanceMatrix.needsUpdate = true;
请检查下面的小提琴链接:我更新了实例旋转和缩放,但着色器没有改变。
你知道如何解决这个问题吗?
谢谢。
解决方案
推荐阅读
- python - 如何在 1 列中找到这 2 个数字之间的平均值?
- android - 不知道为什么会在 Mutable Live 数据上发生此错误
- html - 如何在不丢失动画的情况下将线性渐变应用于图像?
- html - CSS min-height: 100vh 为容器底部添加额外空间
- python - 如何从一列csv中求和子集并将其写入python(将每小时的数据行总和为日数据/ 8000+行到365)
- amazon-web-services - 由于 InvalidTypeException,无法通过 AWS CLI 创建 ElasticSearch 域
- java - Java 文件编译时目录位置和包声明不匹配
- javascript - 想要删除 json 数据的外部数组
- java - Log4J 找不到日志记录实现
- vue.js - 在 vueJS 中将数据从一个组件解析到另一个组件