【发布时间】:2011-11-19 01:26:40
【问题描述】:
前言
首先,为什么 Silverlight 5 中的SilverlightEffect(.slfx 文件)需要顶点着色器?我正在尝试将一个简单的 2D XNA 游戏移植到 Silverlight 5 RC,并且我想使用一个基本的像素着色器。此着色器在 XNA for Windows 和 Xbox 中运行良好,但我无法将其与 Silverlight 一起编译为 SilverlightEffect。
Silverlight 工具包的MS blog 说“.slfx 和 .fx 之间没有区别”,但显然这不是真的——或者至少 SpriteBatch 在“常规 XNA”中为我们发挥了一些作用”,而且它不在“Silverlight XNA”中。
如果我尝试将像素着色器文件直接复制到 Silverlight 项目中(并将其更改为受支持的“Effect - Silverlight”导入器/处理器),当我尝试编译时,我会看到以下错误消息:
Invalid effect file. Unable to find vertex shader in pass "P0"
确实,我的像素着色器文件中没有顶点着色器。我不需要其他 2D XNA 应用程序,因为我只是在做基本的 SpriteBatch 绘图。
我尝试使用Remi Gillig's comment on this Shawn Hargreaves blog post 为我的着色器文件添加一个顶点着色器作为指导,但它并不完全奏效。着色器文件成功编译,我在屏幕上看到了我的游戏的一些相似之处,但它很小、扭曲、重复,而且全部混乱。很明显有些地方不太对劲。
真正的问题
这让我想到了我真正的问题:既然需要顶点着色器,是否有一个基本的顶点着色器函数适用于简单的 2D SpriteBatch 绘图?
如果顶点着色器需要世界/视图/项目矩阵作为参数,我应该为 2D 游戏使用什么值?
任何着色器专家可以提供帮助吗?谢谢!
【问题讨论】:
标签: silverlight xna shader