是否有可能在Three.js中的同一面上将多个纹理叠加在一起,以便在webGL中加速alpha加速?
纹理(或应该)应用于同一面,使得底部纹理(纹理1)没有alpha通道,并且上面的纹理以类似下面图像示例中的纹理2的方式被引导.
这种混合可以使用HTML5 Canvas作为前置步骤来实现,但由于纹理位图可能很大,我更喜欢跳过Canvas混合操作.
我通过创建网格的副本并对每个网格应用一个纹理进行测试,并使其他网格透明并移动了一点,几乎成功,但有一些闪烁,因为对象不能完全在同一位置,有一些纹理之间的空间不是正确的效果.他们看起来应该像是混合在一起.Photoshop(如下图所示).

我使用webgl渲染器创建了一个场景,我放置了多个可以选择和移动的3D对象.但是当选择一个对象时,我想绘制它的轴.将线条绘制到对象的中心没有问题,但我希望它们出现在场景中的任何其他内容之前,即使其他对象在前面也可以看到它们 - 就像在Blender中一样.
我尝试使用renderDepth参数,但我不认为我理解如何使用它,我没有得到任何结果.
谢谢您的帮助.
我正在尝试实现一个跟随屏幕上鼠标的命令箭头,但有时它最终隐藏在另一个对象后面。有没有办法调整 z 缓冲区或其他东西来始终将箭头渲染在顶部。我不想在顶部创建第二个场景(如此 处的解决方案所示:Three.js - Geometry on another )。谢谢。
我正在尝试在其他对象之上渲染对象。
在小提琴中,将绿色圆环结渲染在红色框和地板的顶部。
我一直在尝试mesh.renderDepth = 0, 1, 1000,什么都没改变。
材质已如下创建:
material = new THREE.MeshBasicMaterial( { color: 0x00ff00, transparent: true, opacity: 0.5 } );
Run Code Online (Sandbox Code Playgroud)
如何使用renderDepth实现此目的?我还有其他设置吗?
使用depthTestto true可以工作,但是不能接受,因为凹形网格(如圆环)会遇到多边形重叠的问题,尤其是在不透明的情况下。
虽然我没有设法在运行两个场景的情况下获得其他解决方案,但令我感到震惊的是,与仅使用一个场景相比,它具有更多的开销和灵活性,renderDepth
可以正常使用的JSFiddle:http://jsfiddle.net/QHssJ/
谢谢您的帮助
我目前有一个自定义着色器在天幕上绘制渐变,并希望在天幕前面有一个太阳/月亮(从用户的角度来看).最简单的方法就是拥有太阳和月亮的精灵,但出现的问题是精灵会被留在天幕内(精灵位于天幕的前方和中间位置).我试图用polygonoffset解决这个问题,但这似乎不适用于精灵对象.
所以我的问题是,如何在天空之上设置太阳/月亮而不必修改我的自定义天幕着色器以添加渐变的太阳/月亮纹理(这可能最终会非常困难)?
下面是我的天空着色器的代码.
new THREE.ShaderMaterial({
uniforms: {
glow: {
type: "t",
value: THREE.ImageUtils.loadTexture(DEFAULT_PATH+"glow2.png")
},
color: {
type: "t",
value: THREE.ImageUtils.loadTexture(DEFAULT_PATH+"sky2.png")
},
lightDir: {
type: "v3",
value: self.lightPos
}
},
vertexShader: [
"varying vec3 vWorldPosition;",
"varying vec3 vPosition;",
"void main() {",
"vec4 worldPosition = modelMatrix * vec4(position, 1.0);",
"vWorldPosition = worldPosition.xyz;",
"vPosition = position;",
"gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);",
"}"
].join("\n"),
fragmentShader: [
"uniform sampler2D glow;",
"uniform sampler2D color;",
"uniform vec3 lightDir;",
"varying vec3 vWorldPosition;",
"varying vec3 vPosition;", …Run Code Online (Sandbox Code Playgroud)