2017-09-13 10 views
-1

첫 번째로, 저는 일반적으로 WebGL, OpenGL 프로그래밍에 익숙하지 않습니다. 나는이 도구들이 내가 문제를 해결할 수 있다고 생각하지만, 어디서부터 시작해야할지 정말로 모른다.대대적 인 레이 캐스팅 및 카운트 히트

내 문제 :목표 (삼각형 또는 메쉬)와 방향 벡터가 여러 개인 단일 원점이있는 경우 내 GPU를 사용하여 목표에 도달 한 광선 수를 계산하는 방법이 있습니다. ? 이상적으로는이 문제를 해결하기 위해 내 GPU의 성능을 사용하고 싶습니다. 내 CPU보다 더 적합합니다.

나는 내 CPU를 사용하여 이것을 수행하는 코드를 작성할 수 있다고 확신하지만 for 루프에서 내 벡터를 통과하는 데 오랜 시간이 걸린다. 당신이 시도 할 수

감사

+0

광선의 방향 벡터가 무작위로 분포합니까? 아니면 일종의 균일 한 격자를 형성합니까? 얼마나 많은 삼각형을 광선의 수와 비교 했습니까? – Quinchilion

+0

방향은 가능한 한 무작위이지만 한쪽 반구로 제한됩니다. 일반적으로 십여 개 이하의 삼각형을 가진 간단한 표적을 다루게 될 것입니다. 어떤 경우에는 3 개 또는 4 개의 별도 표적을 조사 할 필요가 있습니다. – user2693883

답변

0

, 이것은 비록 begginers의 일이 아니다 :

  1. 스토어 당신의 삼각형/VBO에 메쉬, 이것은 쉬운 부분이다.
  2. 방향 벡터를 텍스처에 쉽게 저장합니다.
  3. 인스턴스 렌더링. 이 방법으로 각 셰이더 인스턴스는 다른 식별자를가집니다.
  4. 해당 식별자를 사용하여 텍스처에서 샘플링합니다. 셰이더 인스턴스마다 방향 벡터가 다릅니다.
  5. 이제 까다로운 부분 : 쉐이더는 일부 버퍼에서 값 (이미 계산 된 히트 수)을 증가시킵니다. 이미지을 사용하십시오. wiki Image Load Store 약 , 특히 "원자 조작"부분을 읽어보십시오.
  6. 마지막으로 다른 셰이더를 사용하여 해당 이미지의 값을 읽습니다.
+0

확실히 지금 내 능력을 넘어서지만, 적어도 출발점입니다. 이제 개념을 연구하고 잘하면 그것을 알아낼 수 있습니다. 이전에는 검색어에 포함 할 검색어가 무엇 인지도 알지 못했습니다. – user2693883

0

당신이하려고 시도하고있는 것을 달성하기 위해 보는 방법은 화면에서 "반전 된"일종의 레이 캐스트에서 다른 방식으로 문제를 생각하는 것입니다.

원점, 목표 및 방향이 여러 개 있다고 가정하면 방향이 많습니다. 그래서 이것은 대략 raytracing 렌더링과 비슷하기 때문에, WebGL이 무엇을 위해 만들어 졌는지를 생각할 때 문제를 생각해 볼 수 있습니다 : 스크린에 3D 오브젝트 그리기, 프로젝션 매트릭스 사용.

  • 은에 적절한 FOV

  • 단색의 객체를 렌더링 (예를 들어 검은 색 배경에 흰색)와 함께 대상을보고, 관점 귀하의 기원에 해당하는 투영 행렬을 만듭니다 텍스처,이 프로젝션 매트릭스를 사용.

  • 동일한 투영 매트릭스를 사용하여 광선을 2D 텍스처 좌표로 "투영"하십시오.

  • 광선 방향의 결과 2D 좌표에서 텍스처 픽셀을 확인합니다. 픽셀이 흰색 인 경우이 광선이 물체에 닿습니다.

당신은 심지어 조각 쉐이더에서 이전에 만든 텍스처, 정점 버퍼에 선 방향을 전달하여, 마지막 두 부분을 달성하기 위해 다른 쉐이더를 사용할 수 있습니다. 문제는 쉐이더에서 증가 된 값을 얻는 것입니다.