2011-06-10 28 views
6

JOGL 2'de, sabit işlevli boru hattı yerine gölgelendiriciler kullanarak bir OpenGL uygulaması yazmak istiyorum. Sabit işlevli boru hattının push/pop/transform işinin yerini alabilmek için 4x4 çift hassasiyetli matrisli matematik işlemci tarafının adil bir bit yapması gerekecek. Aynı uygulama, büyük matrislerde işlem gerektirecek bazı makine öğrenim kodlarını da içerecek. Ben makine öğrenimi için JBLAS'a baktım (ve JOG için JNI'yi zaten kullandığım için, başka bir yerel kütüphaneye bağlı olmak için minimum downsid var)), ama GL için en iyi seçim olup olmadığından emin değilim. ilgili matrisler. Düşünceler?JOGL + jenerik matris matematiği için uygun Hızlı Java matris kitaplığı?

sen olacak OpenGL ile ekranda bir şey almak için: Ben bazı temel işlevleri özlediği için değil OpenGL matrisleri ile başa çıkmak için "en iyi seçenek" olduğunu düşünüyorum JBLAS API belgelerine bakarak Bir kere

cevap

4

sadece 4x4 matrisleri işlemek gerekiyor mu? Çoğu genel amaçlı lineer cebir kütüphaneleri, daha küçük olanlara çok az dikkat çeken büyük matrisler için son derece optimize edilmiştir. EJML'u yazmamın bir nedeni, bu sorunu ele almak ve diğer geliştiricileri küçük matrisler için optimize etmek için motive etmekti. EJML, küçük matrisler için en hızlı olanıdır, ancak daha iyisini yapmak mümkündür.

gerçekten çok fazla bir performans gerekiyorsa ben kendi derece uzmanlaşmış kod rulo yerine olağan şüpheliler herhangi birini kullanmak ve olmaz. Genel amaçlı kütüphaneleri birkaç kez atlatmak mümkün olmalıdır. 2x2 matris için

Basit bir örnek: Bu kodu derlemeye denemedim

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; 
} 

Not, bu sadece bir örnektir.

0

, Her zamanki perspektif yansıtma matrislerine ve nesnelerinizdeki afinit dönüşümlerini hesaplamak için bir şeye ihtiyaç duyarsınız. Ama birincisi, copypasta ile alabileceğiniz sadece birkaç LOC ve ikincisi önemsizdir çünkü Java zaten on board'a sahiptir, bu yüzden sahip olduklarınızla gitmeye hazırsınız demektir.

0

Muhtemelen makinelerin öğrenmesi ve OpenGL için farklı kütüphaneleri kullanmak istiyorum.

OpenGL özel kasalı 2D, 3D ve 4D vektörler içindir küçük, hızlı, optimize edilmiş matris kullanımına önemli ölçüde fayda sağlayacaktır. Bunlar genellikle OpenGL kitaplığınızda veya oyun motorunda bulunur, örneğin LWJGL Matrix4f ve arkadaşları içerir. Bu kütüphanelerin de sağlayacağı grafik ile ilgili diğer çeşitli özellikler vardır. rotasyonlar için kuaterniyonlar isteyebilirsiniz.

Makine öğrenimi algoritmaları diğer yandan paralel hesaplama için optimize edilmiş büyük matrisler isteyecektir. Parallel Colt gibi bir şey uygun olurdu.