자바를 사용하여 1995 년부터 3D 게임 프로그래밍의 블랙 아트 (Black Art of Programming)를 기반으로 한 매우 원시적 인 3D 그래픽 엔진을 작성했습니다. 화면에 단색 폴리곤을 그리고 장면을 중심으로 카메라를 움직일 수있는 시점까지갔습니다. ". 한 번에 너무 많은 반투명 픽셀을 표시하지 않는 한 반투명 개체를 올바르게 처리하는 Z 버퍼가 Z로 정렬됩니다. 나는 조명을 추가하고 싶은 시점에있다. 나는 그것을 간단하게하고 싶다, 그리고 주변의 빛은 충분히 단순 해 보인다, 지향성의 빛도 꽤 간단해야한다. 하지만 저는 광원을 움직여 매우 원시적 인 그림자를 드리 우는 기능을 가진 점 조명을 원합니다 (주로 벽을 통해 빛이 비치는 것을 원하지 않습니다).점 광원을 구조화하는 방법은 무엇입니까?
내 문제는 내가이 문제에 접근하는 가장 좋은 방법을 모른다는 것입니다. 나는 점 광원이 일정한 각도에서 광선을 주조한다고 상상해 봅니다. 그리고이 광선들이 다각형을 교차 시키면 그 다각형을 조명하고 앞으로 움직이지 않을 것입니다. 그러나 여러 개의 광원과 여러 개의 다각형이있는 장면을 생각할 때 매우 느릴 것이라고 생각합니다. 또한 두 개의 광선 사이에 떨어지는 경우 광원으로부터 멀리 떨어진 다각형이있는 경우를 처리하는 방법을 알지 못합니다. 나는 각 광원에 최대 거리를 줄 것이고, 만약 내가 충분한 광선을 주었다면, 그 거리 내에 어떤 두 개의 광선이 너무 멀어서 다각형을 놓칠 수없는 지점이 없어야한다. 수행 할 계산.
내 질문은 : 광원을 빠르게 가리 키거나 더 잘 정리하기 위해 광원을 가리키는 트릭이 있습니까? 루프에 중첩 된 악몽을 터뜨릴 까봐 걱정됩니다. 내가 직접 작성하고 싶기 때문에 OpenGL이나 Direct3D 또는 다른 속임수를 사용할 수 없습니다.
지금까지 내 결과를보고 싶다면 여기 youtube 비디오가 있습니다. 이미 나쁜 카메라 회전을 수정했습니다. http://www.youtube.com/watch?v=_XYj113Le58&feature=plcp
정보를 제공해 주셔서 감사합니다. 내가 발견 한 점 광원과 광선 - 삼각형 교차 알고리즘을 사용하여 평면 쉐이더를 설정하려고했습니다. 내 큐브의 측면이 다른 색조로 렌더링되고 있지만 광선과 평행 한면이 광원을 향하는면보다 밝아서 내 큐브의 반대쪽면이 너무 밝게 표시됩니다. 나는 교차로 탐지 권리를하지 않았다고 의심한다. 나는 단지 320 x 240 픽셀 밖에 가질 수 없다는 점에서 이점을 가지고 있으며, 폴리곤 수를 낮게 유지할 계획이지만, 이것은 어려울 것입니다. 대부분의 행렬 대수를 잊어 버렸습니다. – user137
행렬 수학/선형 대수학을 다듬어야 할 것입니다. 3D 그래픽은 무엇에 관한 것입니까? P 답변을 업데이트했습니다. 답장이 코멘트에 맞지 않았습니다. – unohoo
빛이 벽을 통과 할 수 없도록 교차 테스트를하고 싶었습니다. 저는 물건이나 가구 등을 움직일 때 그림자가 생기는 것을 원하지 않습니다. 벽이나 바닥은 테스트 할 폴리곤 수가 적을 것이라고 생각했습니다. 나는 조명 모델이 검은 미술 책을 사용하는 것은 램버트 모델과 같다고 생각하지만 수식을 다시 확인해야합니다. 음영의 경우 평면 음영이 아니라면 gourad 음영을 사용하려고했습니다. 다른 책을보아야 할 수도 있습니다. 검은 미술 책은 현대 컴퓨터로 잘 번역되지 않는 DOS와 mode13H를 기반으로 한 많은 트릭을 사용합니다. – user137