gpt4 book ai didi

c# - 3D 原语 XNA 4.0 上的透明纹理问题

转载 作者:太空狗 更新时间:2023-10-30 00:57:37 24 4
gpt4 key购买 nike

我需要绘制一大组立方体,每一面都有(可能)独特的纹理。一些纹理也有部分透明度。透明纹理后面的立方体应该通过透明纹理显示出来。但是,我绘制立方体的顺序似乎决定了透明度是否有效,这是我想避免的。看这里:

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);
}

这是 Draw 方法中的代码。它产生这个结果: the first image

如您所见,叶立方体后面的纹理在另一侧不可见。当我在数组中反转索引 3 和 0 时,我得到这个: correct image

很明显,绘制顺序会影响立方体。我怀疑这可能与混合模式有关,但我不知道从哪里开始。

最佳答案

您依靠深度缓冲来实现遮挡。此技术仅适用于不透明物体。

为包含透明物体的场景实现正确的遮挡:

  1. 设置 DepthBufferEnable 和DepthBufferWriteEnable 为真

  2. 绘制所有不透明的几何图形

  3. 将 DepthBufferEnable 设置为 true,但将 DepthBufferWriteEnable 更改为假的

  4. 对 alpha 混合对象进行排序与相机的距离,然后绘制它们按照从后到前的顺序

摘自 Depth sorting alpha blended objects通过肖恩哈格里夫斯

关于c# - 3D 原语 XNA 4.0 上的透明纹理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4683030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com