我来自OpenGL的土地,所以我与glColor函数类似,以及它们如何使用默认GL混合方法输出的纹理。我似乎无法让GraphicsDevice.BlendFactor像glColor一样工作,但我可能没有使用正确的混合设置。如果不使用着色器,可以在XNA中获得相同的功能吗?例如,我想将当前颜色设置为RGB(1,0,0),并且我希望白色云在输出时显示为红色。XNA glColor等效
1
A
回答
3
无法在设备上设置颜色。颜色(即使在OpenGL中)是一个顶点的东西。 OpenGL只是让你设置所有顶点的默认值。
如果您在XNA中使用SpriteBatch
,那么它将使用顶点处理所有魔术,并且其大部分Draw(...)
重载都有color
参数。
如果您自己发送顶点到卡上,请确保您的顶点格式包含Color
组件。 Here's a tutorial关于如何创建自定义顶点格式(尽管它不包含Color
组件)。
或者,您可以使用其中一种内置格式,如VertexPositionColor
或VertexPositionColorTexture
。
值得指出的是,在XNA中没有“没有着色器”。您可以使用BasicEffect
(或其他内置效果之一),它可以使用颜色数据完成预期的工作,也就是说,它可以为您的纹理着色。并且SpriteBatch
也在内部使用着色器。
2
您还可以使用BasicEffect(或其他效果)的Fog和Alpha设置以固定的颜色绘制纹理,并仍然使用它们的原始Alpha值(我使用它来设置实体在获取时闪烁白色被子弹击中)。
例子:
// Draw a silhouette in solid orange at 75% opacity
basic_effect.FogColor = new Vector3(1.0f, 0.5f, 0.0f);
basic_effect.Alpha = 0.75f;
basic_effect.FogEnabled = true;
basic_effect.FogStart = 1;
basic_effect.FogEnd = 0;
... draw triangles ...
相关问题
- 1. glColor,glMatrixMode神秘地给出“无效操作”错误
- 2. XNA效果和模式
- 3. glColor不工作,出现随机颜色
- 4. XNA等距瓷砖渲染问题
- 5. XNA删除着色器效果
- 6. XNA是否有效取代Managed Directx?
- 7. 在XNA中创建转换效果
- 8. C++ urljoin等效
- 9. IsFinite()等效
- 10. Oracle'printf'等效
- 11. in_array - 'in_object'等效?
- 12. get_FOO_display等效ChoiceBlock
- 13. 等效ElasticSearch
- 14. addslashes JavaScript等效
- 15. Django ORM等效
- 16. CIN的等效
- 17. .equals()等效
- 18. ITextSharp VB.net等效
- 19. Image.FromHbitmap WPF等效
- 20. Angular2等效ReactDOM.render
- 21. wxStaticBox等效QT
- 22. 等效的mysqli
- 23. WPF Radiobutton等效
- 24. Android .designer.cs等效?
- 25. StatusStrip等效
- 26. 等效命令
- 27. 四路等效
- 28. DDL等效
- 29. 等效缩写
- 30. Mac GridView等效
我试图实现与BasicEffect这种效果。我更愿意说没有'自定义'着色器。看起来你甚至不能在这个设备上自己创建=(..我有一个有数百个多边形的对象,我需要对颜色和alpha进行脉冲排序,从设备上解除顶点缓冲区对象并重置所有顶点的顶点颜色和alpha对我来说似乎不是那么好,而BlendFactor似乎对我没有任何帮助,也许我错过了一些东西? – Kyle 2010-09-22 01:53:18
啊 - 所以这更多的是关于BasicEffect的一个问题,尝试一下照明选项,我认为'AmbientLightColor'会做你想做的(或者如果你的模型被点亮了,那么就是'DiffuseColor') – 2010-09-22 02:44:41
DiffuseColor绝对有效!使用Alpha给出了整个颜色/ alpha功能,并且这个功能可以与LightingEnabled:false一起使用,所以我相信它也可以保存在一些着色器操作中。感谢您的帮助! – Kyle 2010-09-22 03:15:06