|
|
1
2
所以在评论中 this answer 决定 另一种 这里的问题是xna 3.1中sprite批处理的顶点着色是vs_1_1。和 strictly speaking 不能将SM 3.0顶点或像素明暗器与不同版本的明暗器混合。实际上,大多数卡都能让你逃脱惩罚,但很明显,RCIX的卡(Radeon HD 4850)不会。 (这就是为什么手头上有DirectX调试运行时(从 SDK ,因为他们会警告你这样的事情。你可以使用 DebugView 查看其输出。) 这个问题有很多解决方案: 1) 到目前为止,最简单的解决方案是升级到XNA 4.0(缺点是有突破性的变化,而且它目前只在测试版中)。在这个版本的XNA中,您可以 easily specify your own vertex shader for SpriteBatch . 2) 在XNA3.1中,您可以使用带有spriteBatch的自定义顶点明暗器,但这并不容易。一个好的起点是 source code for the vertex shader used by XNA (直至XNA 4.0,见上文)。 3) 最后:也许你可以让你的明暗器使用ps_2_0?你真的需要每个纹理64个裁剪吗? |
|
|
2
1
打电话之前
原因(以及XNA 4.0中“固定”的事实)在 this article on Shawn Hargreaves' blog . ( This entry 可能也值得一读。)
基本上(XNA 3.1中):
这个 Sprite Effects sample 演示如何正确地对精灵应用效果。 |
|
|
3
1
好的,首先你需要在我的
other answer
(在结束效果之前结束批,并(从注释中)使用
现在-你的明暗器的问题。它实际上起作用了——但可能不会像你期望的那样。似乎你混淆了你的精灵绘制时的屏幕空间坐标(宽度=500,高度=500),以及你的像素遮影器工作的纹理空间坐标(宽度=1,高度=1)。 所以首先,当你在你的精灵上开洞的时候,你需要在纹理空间里开洞,就像这样:
第二,看起来像是尝试消除混叠,这会使你的切口更像是一个淡出。它需要在屏幕上绘制时考虑纹理的大小。最简单的解决方法是更改此行:
对此:
当然-这假设你的雪碧是500乘500。您应该将实际值作为一个明暗器参数传入。 如果你要画一个非正方形的雪碧,那么你需要做一些额外的数学来使坐标系“成一条直线”。我把它留作练习。 |
|
|
Ruslan · 如何在单游戏中使用或制作“效果”? 7 年前 |
|
|
MyNameIsGuzse · 找不到C#静态类 8 年前 |
|
|
John Tran · 有人能告诉我为什么这样不行吗?C#XNA 8 年前 |
|
|
PÅemysl Novák · 单博弈-等距图块,大地图上的低FPS 8 年前 |
|
|
TS1997 · 带有winforms的单游戏 9 年前 |
|
|
Joe Smith · 旋转固定在精灵上的Vector2 9 年前 |
|
|
jacksparrow · C#XNA-遍历项目并绘制它们 10 年前 |
|
|
user2056166 · 在xna上绘制圆段 10 年前 |