WPF 中的逐像素光照

Posted

技术标签:

【中文标题】WPF 中的逐像素光照【英文标题】:Per-Pixel Lighting in WPF 【发布时间】:2014-07-14 14:46:36 【问题描述】:

是否可以通过使用它们的着色器效果在 WPF 3d 应用程序 (C#) 中实现逐像素光照?

我有一个在 WPF 中运行的基本 3d 应用程序,但它只显示 Gouraud 着色,通过将顶点之间的着色颜色值插入到多边形的内部。我尝试实现每像素照明方法,例如 Phong,但我意识到我似乎无法访问 WPF 像素着色器效果中的插值法线。 这就是 WPF 的局限,直接用 C++ 和 OpenGL/DirectX 比较好?

【问题讨论】:

您仍然可以使用 xna 来避免原生编程。我总是以这个演示为例:youtube.com/watch?v=RDIeijJkV14。它是用 xna&silverlight 制造的 【参考方案1】:

据我所知,是的,这是 WPF 的限制...与 OpenGL 可以进行逐像素着色相反,WPF 只允许您使用网格几何体。

我认为一种方法是创建包含着色器效果的纹理,然后在每个三角形中应用它。 这将花费更长的计算时间,但应该可以工作。

问候

【讨论】:

DirectX 中也提供像素着色器。这是 WPF 的限制。将阴影放在纹理中是一种技巧,它没有考虑光线和运动,并且在移动物体、灯光或视点时会看起来非常错误。

以上是关于WPF 中的逐像素光照的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D -- shader光照常用函数和变量

使用 javascript 的逐像素动画

Unity渲染路径 Rendering Paths_3_Vertex Lit 顶点光照

第五章 Unity中的基础光照

WPF中的文本度量

Numpy 中的逐行索引