2011-01-12 14 views
10

C++ kendi çok iş parçacıklı gerçek zamanlı raytracer yazmak istiyorum, ama ben gelmek tüm vektör ve matris mantığı uygulamak istemiyorum Bununla. Bunun için iyi bir kütüphane bulmak için biraz araştırma yapacağımı düşünmüştüm ama çok fazla başarı elde edemedim ...Bir raytracer yazmak, hangi cebir kitaplığı kullanmak için takılı (C++)

Uygulamanın hızlı olması ve tercihen bazı kolay lisanslama ile birlikte gelmesi önemlidir. boost'un temel cebire sahip olduğunu okudum, ancak hızıyla ilgili iyi bir şey bulamadım.

Diğerleri için Google çok hızlı olduğunu iddia eden Armadillo bana verdi ve duymadığım diğer kütüphanelerle kendini karşılaştırdı.
Daha sonra, verimli ve kullanışlı olduğunu iddia eden Seldon aldım, ancak ölçek üzerinde tam olarak nerede olduklarını bulamadım.
Son olarak, burada arama yaparken StackOverflow üzerinde de belirtmiş olduğum Eigen'u okudum. Benim üniversitede CG konferansta

, onlar bunun için GLSL kullanabilirsiniz olsun veya olmasın bana düşünce var, (öğrenci/uygulamak Raytracer kısımlarını optimize yapma) cebir için HLSL kullanın. Yine, hangi seçeneğin en verimli olduğunu veya cebir kütüphanelerinde genel fikir birliğinin ne olduğu hakkında hiçbir fikrim yok. Burada bana yardım edebilecek SO umuyordum, bu yüzden bazı gerçek gelişme :) ile başlayabilirsiniz

PS: Ben sitelere bağlantı çalıştı, ama henüz

+1

Ompf.org'u (http://ompf.org) tavsiye etmeliyim ki, forumları varolan en hızlı raytracerlerle doludur. Ve bunların çoğu, nasıl çalıştıkları hakkında ayrıntılı bilgi içerir. –

cevap

12

ben tavsiye ederim yeterli temsilcisi yok kendi rutinlerini yazıyor. Raytracer yazdığımda, cebirin çoğunun aynı küçük toplama yöntemini kullandığını gördüm. Temel olarak tek ihtiyacınız olan, toplama, çıkarma, vb. Destekleyen bir vektör sınıfıdır. Ve gerçekten ihtiyacınız olan tek şey Dot ve Cross.

GLSL kullanarak dürüst olmak size zaten bundan daha fazlasını vermeyecektir (sadece nokta, çapraz ve basit vektör matematiğini destekler, her şey el ile kodlanmış olmalıdır). C++ 'da prototiplemeyi ve daha sonra CUDA'ya geçmeyi tavsiye ederim. Bir GPU kodunun hatalarını ayıklamak oldukça zordur, böylece CPU'da çalışarak CUDA'da çalışmak için biraz daha çalışabilirsiniz. Gerçekte raytracerler oldukça basittir. Onları hızlı yapmak çok zor. Zamanınızın çoğunu ve optimizasyonunuzu alacak olan hızlandırma yapıları. En azından benim için yaptı.

+0

Kendi ışın nesnesi kesiştirme rutinlerinizi yazdınız mı, yoksa bir kütüphane bunu halledebilir mi? –

+0

Bu tam olarak aradığım cevap türü, teşekkürler! – robrene

+0

Kendi yazdım. Ve bu zor değil. Kaba kuvvetle başladım, sadece üçgen raytracer. Blender'dan herhangi bir nesneyi üçgenler listesi olarak ihraç edecek bir ihracatçı yazdım. Sonra raytrac'ın v1'inin sadece ray-> üçgen kesişimine ihtiyacı vardır. Bundan sonra bir BVH ağacı uyguladı. Temelde üçgen gruplarını alıp küplere sarın. Küpler daha fazla küp içine sarılır. Oradan bir ray-> küp kavşak testi yapın ve bir üçgene vurana kadar ağaca doğru yürümeye devam edin. –

0

Projelerim için glm kullandım, belki de size uyar. onlar BLAS odaklı gören (ve sana iyi bir 3D güdümlü lineer cebir kütüphanesinde aradığınız varsayıyorum) çünkü muhtemelen gibi boost::ublas veya seldon kütüphaneleri

Not size uygun olmayacaktır.

Ayrıca, dxmath DirectX kitaplığı, bazen C-uyumlu stili nedeniyle kullanımı zor olsa da oldukça iyidir.

0

Sen ++ Sen çoğunlukla C, gerçek zamanlı ışınizlemeyle ait http://ompf.org/forum/

Bu forum davranır bakmak almalı POVRAY

+3

PoVRay, C++ kod tabanının tam bir örneği değil, değil mi? –

2

için kaynak koduna görünebilir. Size işaretçiler ve örnek kaynağı verecektir.

Çoğu zaman, her döngü sayısı olarak, insanlar dış vektör matematik kütüphanelerini güvenmeyin: optimizasyonlar vb kullandığınız derleyici, inlining, SSE (veya kindof) olmadığını kullanımı üzerinde

bağlıdır
+1

Bu URL artık geçerli değil, bunu OMPF2 için kullanın: http://ompf2.com/index.php – bjorke

1

OpenEXR paketinin bir parçası olan "IlmBase" ürününü öneririm. İyi yazılmış C++, ILM tarafından geliştirilmiş ve grafik yazılımı profesyonelce yazıp kullanan kişiler tarafından yaygın olarak kullanılmaktadır.

İlgili konular