MonoTouch OpenTK和UniformMatrix4

时间:2011-12-04 11:51:29

标签: iphone opengl-es xamarin.ios opentk

我正在尝试将OpenTK Matrix4传递给着色器制服,但GL.UniformMatrix4似乎没有合适的重载。重载接受floatfloat[]ref float。类似地,我找不到将Matrix4实例转换为float数组的方法 - 我看过一个在Matrix4上使用ToArray方法的示例,但这似乎不存在于我正在使用的发行版中。

当然,我遗漏了一些简单的东西,因为这对于将模型/视图/投影矩阵传递给着色器非常重要。

我正在使用最新版MonoTouch的OpenTK版本。

2 个答案:

答案 0 :(得分:4)

这个辅助函数有效,但看起来像是一个黑客。

基本上它只是传递Row0,Col0的地址。由于C#不保证结构中字段的顺序,理论上它比运气更有效。

public static void UniformMatrix4(int location, Matrix4 value)
{
    GL.UniformMatrix4(location, 1, false, ref value.Row0.X);
}

当然,OpenTK应该具有允许直接传递Matrix4的绑定。

答案 1 :(得分:3)

根据iphone标记,我假设您使用的是OpenTK.Graphics.ES20.GL,而不是常规桌面OpenTK.Graphics.OpenGL.GL。 OpenGL ES绑定不像标准桌面绑定那样彻底,它包含向量和矩阵的重载。

您编写的方法与实际OpenGL绑定的方法几乎完全相同,只是将Matrix4作为ref传递,因为按值传递Matrix4的速度很慢。

只是仅供参考,可以使用StructLayoutAttribute LayoutKind Sequential来保证C#中结构中字段的顺序,而OpenTK数学结构就是这样。