2011-06-10 5 views
6

Me interesa escribir una aplicación OpenGL en JOGL 2, usando sombreadores en lugar de la interconexión de funciones fijas. Tendré que hacer una buena parte de la Matriz Matriz de precisión doble 4x4 en el lado de la CPU, para reemplazar el negocio de push/pop/transform de la tubería de función fija. La misma aplicación también incluirá algún código de aprendizaje automático que requerirá operaciones en matrices grandes. He mirado JBLAS para cosas de aprendizaje automático (y dado que ya estoy usando JNI para JOGL, hay desventajas mínimas para depender de otra biblioteca nativa)), pero no estoy seguro de si es la mejor opción para GL- matrices relacionadas. ¿Pensamientos?Biblioteca de matriz de Java rápida adecuada para JOGL + matriz matemática genérica?

Respuesta

4

¿Sólo se necesita para manipular matrices de 4x4? La mayoría de las bibliotecas de álgebra lineal de propósito general han sido altamente optimizadas para matrices grandes con poca atención puesta en las más pequeñas. Parte de la razón por la que escribí EJML fue abordar este problema y motivar a otros desarrolladores a optimizar las matrices pequeñas. EJML es el más rápido para matrices pequeñas, pero es posible hacerlo mejor.

Si realmente necesita mucho rendimiento, no usaría ninguno de los sospechosos habituales y, en su lugar, lanzaría su propio código altamente especializado. Debería ser posible superar las bibliotecas de propósito general varias veces.

ejemplo simple para la matriz de 2x2:

public class Matrix2x2 { 
    double a11,a12,a21,a22; 
} 

public static void mult(Matrix2x2 a , Matrix2x2 b , Matrix2x2 c) { 
    c.a11 = a.a11*b.a11 + a.12*b.a21; 
    c.a12 = a.a11*b.a12 + a.12*b.a22; 
    c.a21 = a.a21*b.a11 + a.22*b.a21; 
    c.a22 = a.a21*b.a12 + a.22*b.a22; 
} 

Nota No he tratado de compilar este código, es sólo un ejemplo.

0

Por un lado, mirando a la documentación de la API de JBLAS Creo que no es la "mejor opción" para hacer frente a las matrices de OpenGL porque echa de menos algunas funciones fundamentales:

para conseguir algo en la pantalla con OpenGL se le necesita las matrices de proyección en perspectiva habituales y posiblemente algo para calcular las transformaciones afines en sus objetos. Pero el primero es solo unos pocos LOC que puedes obtener a través de copypasta y el último es trivial porque Java ya los tiene on board, así que creo que estás listo para usar lo que tienes.

0

Probablemente desee utilizar diferentes bibliotecas para el aprendizaje automático y OpenGL.

OpenGL se beneficiará significativamente del uso de matrices pequeñas, rápidas y optimizadas que tienen un diseño especial para vectores 2D, 3D y 4D. Estos se incluyen generalmente en su biblioteca OpenGL o motor de juego, por ejemplo LWJGL incluye Matrix4f y amigos. Existen otras funciones relacionadas con los gráficos que estas bibliotecas también proporcionarán, p. es posible que desee cuaterniones para las rotaciones.

Los algoritmos de aprendizaje automático, por otro lado, querrán matrices grandes optimizadas para cómputo paralelo. Algo como Parallel Colt sería apropiado.

Cuestiones relacionadas