我需要画一大堆立方体,每一面都有(可能)独特的纹理.一些纹理也具有透明度的一部分.具有透明纹理的立方体后面的立方体应该透过透明纹理显示.但是,我绘制立方体的顺序似乎决定了透明度是否有效,这是我想要避免的.看这里:
cubeEffect.CurrentTechnique = cubeEffect.Techniques["Textured"];
Block[] cubes = new Block[4];
cubes[0] = new Block(BlockType.leaves, new Vector3(0, 0, 3));
cubes[1] = new Block(BlockType.dirt, new Vector3(0, 1, 3));
cubes[2] = new Block(BlockType.log, new Vector3(0, 0, 4));
cubes[3] = new Block(BlockType.gold, new Vector3(0, 1, 4));
foreach(Block b in cubes) {
b.shape.RenderShape(GraphicsDevice, cubeEffect);
}
Run Code Online (Sandbox Code Playgroud)
这是Draw方法中的代码.它产生了这个结果: 第一张图片http://oi53.tinypic.com/av4tv7.jpg
如您所见,叶子立方体后面的纹理在另一侧是不可见的.当我在数组中反转索引3和0时,我得到这个:

很明显,绘图的顺序正在影响立方体.我怀疑它可能与混合模式有关,但我不知道从哪里开始.
您依靠深度缓冲来实现遮挡.此技术仅适用于不透明对象.
要为包含透明对象的场景实现正确的遮挡:
将DepthBufferEnable和DepthBufferWriteEnable设置为true
绘制所有不透明的几何体
将DepthBufferEnable设置为true,但将DepthBufferWriteEnable更改为false
按照与相机的距离对alpha混合对象进行排序,然后按照从后到前的顺序绘制它们
由Shawn Hargreaves 从深度排序alpha混合对象中提取
| 归档时间: |
|
| 查看次数: |
6319 次 |
| 最近记录: |