ThreeJS-按不同顺序添加对象会影响alpha/显示
ThreeJS - adding objects in different order affects alpha / display
我的程序使用自定义属性创建动态数量的点云对象,其中包括每个粒子的alpha值。然而,当对象相互嵌套(比如球体)时,即使粒子的alpha设置正确,较小的(内部)对象也会被较大的对象遮挡,这一点也很好。当我颠倒将点云对象添加到场景的顺序时,从较大的对象开始,向下到较小的对象,我可以通过较大的对象看到较小的对象。我的问题是,是否有一种方法可以告诉渲染器更新或重新计算alpha值,或者重新渲染较小的内部对象,使其显示出来?
我遇到了和你一样的问题。我修复了它,为每个网格计算和设置渲染深度。为此,您需要相机位置和网格中心。
您可能已经为每个对象创建了网格。如果将所有这些网格保存到阵列中,则更容易计算和设置这些对象的渲染深度。
下面是我的一个例子。
updateRenderDepthOnRooms(cameraPosition: THREE.Vector3): void {
var rooms: Room[] = this.getAllRooms();
rooms.forEach((room) => {
var roomCenter = getCenter(room.mesh.geometry);
var renderDepth = 0 - roomCenter.distanceToSquared(cameraPosition);
room.mesh.renderDepth = renderDepth;
});
}
function getCenter(geometry: THREE.Geometry): THREE.Vector3 {
geometry.computeBoundingBox();
var bb = geometry.boundingBox;
var offset = new THREE.Vector3();
offset.addVectors(bb.min, bb.max);
offset.multiplyScalar(0.5);
return offset;
}
因此,要获得对象的中心,可以从网格中询问几何体,并使用我的示例中的getCenter(..)函数。然后使用ThreeJs函数distance ToSquared(..)计算渲染深度,然后将此渲染深度设置为网格。
就是这样。希望这对你有帮助。
相关文章:
- 如何将不可变的js导入angular 2(alpha)
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- jQuery工具验证器自定义效果-添加&消除影响
- 如何在不影响其他元素的情况下扩展DIV
- NodeJ中的注释会影响性能吗
- 是否可以使用Chart.js缩短雷达图上的外部标签,而不影响其他标签
- 如何(功能)检测浏览器是否支持WebM alpha透明度
- "过渡到“;影响Ember中的页面刷新
- 我如何使解析查询不同,这样它们就不会相互影响
- 设置1400个Raphael.js对象的不透明度动画会影响动画性能
- Javascript em根据窗口/视口尺寸调整大小,不影响文档样式的text/css
- 在提交时影响其他文档
- javascript getAttribute是否会影响性能或触发布局
- 如何在不影响网站页面速度的情况下在我的网站上使用谷歌字体
- Javascript:当同时按下两个键时,留下其中一个也会影响另一个的听众
- JavaScript-在不影响索引的情况下将元素插入数组
- 在元素数组上循环只会影响最后一个元素
- Navgoco不是一个影响密码保护页面的功能
- ThreeJS-按不同顺序添加对象会影响alpha/显示