gpt4 book ai didi

c# - 如何呈现不同于填充 XNA 的立方体的特定边缘? (单人游戏)

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:30 24 4
gpt4 key购买 nike

我正在使用 C#、Monogame 和 XNA 4.0。在我的场景中,我有很多立方体。有些是连接的,有些不是。我想用另一个着色器而不是填充来渲染立方体的边缘。除此之外,我想用另一种颜色(或更厚)渲染连接立方体的外边缘,而不是立方体对象内的边缘。这是一张小画,可以清楚地说明我想做什么(对不起,我的绘画技巧不好,但我想你会明白的)。

Desired Results

  1. 我知道如何使用特定着色器渲染立方体,我也能够渲染线框,但我无法连接这两种方法。除此之外,使用这种方法无法对外部线条进行不同的渲染。

  2. 我尝试使用像漫画着色器的边缘搜索这样的后期效果,但在这种方法中我无法只渲染特定的边缘。除此之外,如果两个立方体彼此相邻,则着色器无法识别边缘。

我不是在从您那里寻找现成的解决方案,但我很乐意获得一些关于如何实现我的目标的提示/方法/教程/类似项目/等。那里有着色器专家吗?我已经无计可施了。

(如果你想发布一个现成的解决方案,我不会生气 :D)

最佳答案

很遗憾您没有使用延迟着色,如果您使用的话,这将非常直接地实现。

如果您可以通过纹理查找访问屏幕上每个像素的法线和 Material ,您就可以轻松地对其进行后处理。您可以使用 3x3 过滤器内核并搜索足够大的法向不连续点(这会捕捉轮廓边缘),还可以搜索位于 Material ID 之间过渡的像素(这会捕捉蓝色和橙色立方体之间的边缘)。如果您的过滤器邻域满足这两个条件中的任何一个,则绘制一个黑色像素以形成轮廓。

如果您在绘制立方体时使用 MRT 渲染,并且将法线 + Material ID 编码为 RGBA 纹理 (x,y,z,material),您应该能够做到这一点。

基础理论在this paper中有描述。 (第 13 页)。在这种情况下,您可以使用 Material (或对象 ID,如果您希望每个立方体都有轮廓),而不是使用深度作为轮廓的次要特征。

关于c# - 如何呈现不同于填充 XNA 的立方体的特定边缘? (单人游戏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18432091/

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