2011-01-12 1 views
10

저는 멀티 쓰레드 실시간 raytracer를 C++로 쓰고 싶었지만, 모든 벡터와 행렬 로직을 구현하고 싶지는 않습니다. 그것으로. 나는 이것을 위해 좋은 라이브러리를 찾기 위해 연구를 할 것이라고 생각했지만 많은 성공을 얻지 못했습니다 ...raytracer를 쓰고 싶습니다. 사용할 대수 라이브러리에 붙어 있습니다. (C++)

구현이 빠르며 친절한 라이센싱이 중요합니다. 나는 boost에 기본 대수가 있다는 것을 읽었지 만 속도가 얼마나 좋은지에 대해서는 아무 것도 찾을 수 없었다.

나머지는 Google이 매우 신속하다고 주장하는 Armadillo을 알려주고 다른 들어 본 적이없는 다른 라이브러리와 비교합니다.
그렇다면 정확하고 편리하다고 주장하는 Seldon을 얻었습니다. 정확히 어디에서 규모를 파악할 수는 없었습니다.
마지막으로 나는 여기에서 검색하는 동안 StackOverflow에서 언급 한 적이있는 Eigen에 대해 읽었습니다.

내 대학의 CG 강의에서 대수학에 HLSL을 사용하여 (학생들에게 raytracer를 구현/최적화하게 함), GLSL을 사용할 수 있는지 여부를 생각하게되었습니다. 다시 말하지만, 나는 어떤 옵션이 가장 효율적인지, 또는 대수 라이브러리에 대한 일반적인 합의가 무엇인지 전혀 알지 못합니다. 여기 좀 도와 수 있도록 기대했다, 그래서 나는 진짜 개발 : 시작할 수 있습니다

PS : 나는 사이트로 연결했지만, 아직

+1

나는 ompf.org (http://ompf.org)의 포럼이 존재하는 가장 빠른 광선 추적기로 가득 채워질 것을 적극 권장합니다. 그리고 그들 중 많은 사람들은 그들이 일하는 방식에 대한 상세한 정보를 포함하고 있습니다. –

답변

12

내가 권하고 싶습니다 충분한 담당자가 없습니다 당신 자신의 일과를 쓰는 것. raytracer를 작성할 때 대다수의 대수가 동일한 작은 컬렉션을 사용한다는 것을 알았습니다. 기본적으로 필요한 것은 더하기, 빼기 등을 지원하는 벡터 클래스뿐입니다. 거기에서 필요한 것은 모두 도트 및 크로스입니다.

솔직히 GLSL을 사용하면 어쨌든 (점, 십자가 및 간단한 벡터 수학 만 지원하며 다른 모든 것은 직접 코딩해야합니다.) 더 많은 것을 제공하지 않습니다. 또한 C++에서 프로토 타이핑을 한 후 CUDA로 옮길 것을 권장합니다. GPU 코드를 디버깅하는 것이 다소 어렵 기 때문에 CPU에서 작동하도록 만들면 CUDA에서 작동하도록 비트를 다시 코딩 할 수 있습니다.

실제로 레이 트레이서는 상당히 간단합니다. 그것은 그것들을 빨리 만드는 것입니다. 그것은 대부분의 시간과 최적화를 취할 가속 구조입니다. 적어도 그것은 나를 위해했다.

+0

자신 만의 광선 - 오브젝트 교차 루틴을 작성 했습니까? 아니면 라이브러리가 이것을 처리 할 수 ​​있습니까? –

+0

이것은 정확하게 내가 찾던 답변 유형입니다. 감사합니다! – robrene

+0

나는 내 자신을 썼다. 그리고 그것은 어렵지 않습니다. 삼각형의 광선 추적기로 시작했습니다. Blender에서 어떤 객체를 삼각형 목록으로 내보낼 수출업자를 썼습니다. raytracer의 v1은 ray-> triangle intersection을 수행하면됩니다. 그 후 BVH 트리를 구현했습니다. 기본적으로 삼각형의 그룹을 가져 와서 큐브로 묶습니다. 큐브는 더 많은 큐브로 포장됩니다. 거기에서 광선 - 삼체 교차 테스트를 수행하고 삼각형을 칠 때까지 트리를 계속 걷습니다. –

0

내 프로젝트의 경우 glm을 사용했습니다. 어쩌면 그럴 수도 있습니다. 그들이 을 BLAS가 지향있어 (내가 당신이 좋은 3D 기반의 선형 대수 라이브러리를 찾고 가정) 때문에 아마 같은 boost::ublas 또는 seldon을 도서관

주, 당신을 맞게되지 않습니다.

또한 DirectX 라이브러리는 C 호환 스타일로 인해 사용하기가 어렵지만 꽤 좋습니다.

0

당신은 ++ 당신은 대부분 C에서, 실시간 레이트 레이싱의 http://ompf.org/forum/

이 포럼 취급을보고해야 POVRAY

+3

PoVRay는 C++ 코드베이스의 빛나는 예제가 아닙니까? –

2

에 대한 소스 코드를 볼 수 있습니다. 그것은 당신에게 포인터와 샘플 소스를 줄 것이다.

대부분의 시간, 모든 사이클 카운트로, 사람들이 외부 벡터 수학 libs가에 의존하지 않는 : 최적화 등, 사용중인 컴파일러, 인라인, SSE (또는 벽돌 쌓는) 또는하지의 사용에

을 따라
+1

그 URL은 더 이상 유효하지 않습니다.이 URL은 OMPF2에 사용하십시오. http://ompf2.com/index.php – bjorke

1

OpenEXR 패키지의 일부인 "IlmBase"를 사용하는 것이 좋습니다. ILM이 개발 한 잘 작성된 C++이며 전문적으로 그래픽 소프트웨어를 작성하고 사용하는 사람들이 널리 사용합니다.

관련 문제