tutorial template examples apps iphone opengl-es xamarin.ios opentk

iphone - template - xamarin ios tutorial



MonoTouch OpenTK y UniformMatrix4 (2)

Esta función de ayuda funciona, pero parece un truco.

Básicamente, solo está pasando la dirección de Row0, Col0. Sin embargo, dado que C # no garantiza el orden de los campos en una estructura, teóricamente funciona más por suerte que nada.

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

Seguramente OpenTK debería tener enlaces para permitir pasar un Matrix4 directamente.

Estoy tratando de pasar un OpenTK Matrix4 a un shader uniforme, pero no parece haber una sobrecarga adecuada para GL.UniformMatrix4. Las sobrecargas aceptan float o float[] o ref float . Del mismo modo, no puedo encontrar una manera de convertir una instancia de Matrix4 en una matriz flotante: he visto una muestra que usa un método ToArray en Matrix4, pero eso no parece estar presente en la distribución que estoy usando.

Claro que me falta algo simple, ya que esto es bastante fundamental para poder pasar una matriz de modelo / vista / proyección a un sombreador.

Estoy usando la versión de envío de OpenTK con la última versión de MonoTouch.


Basado en la etiqueta iphone, OpenTK.Graphics.ES20.GL que estás usando OpenTK.Graphics.ES20.GL y no el escritorio normal OpenTK.Graphics.OpenGL.GL . Los enlaces de OpenGL ES no son tan completos como los enlaces de escritorio estándar, que contienen sobrecargas para vectores y matrices.

El método que escribió es casi exactamente el mismo que el método de los enlaces de OpenGL reales, solo que uno pasa el Matrix4 como ref, porque pasar un Matrix4 por valor es lento.

Y solo para su información, es posible garantizar el orden de los campos en una estructura en C # utilizando StructLayoutAttribute con un LayoutKind of Sequential , y las estructuras matemáticas de OpenTK hacen precisamente eso.