JavaScript로 자체 3D 엔진을 롤링하고 WebGL이 아닌 캔버스 드로잉 만 사용합니다. 이것은 또 다른 마인 크래프트 클론입니다. 나는 상자를 좋아하고 나를 판단하지 않습니다.
지금까지 한 가지를 제외하고는 모든 것이 훌륭하게 작동합니다 .3D에서는 일부 정점이 거의 클리핑 평면 뒤에 가면 화면에서 투영이 이상하게 나타납니다 (평면을 추적하는 데 사용되는 다른 정점이 앞쪽에 있다고 가정).
이 점을 클리핑하려고 시도했지만이 정점을 사용하는 표면을 통해 볼 수 있습니다. WebGL / OpenGL에서 그래픽 카드는 이러한 점을 처리하고 평면이 올바르게 렌더링되지만 하드웨어에 액세스 할 수 없으므로 직접 코딩해야합니다.
무엇을 만들어야할지 잘 모르겠습니다. 현재 마지막으로 떠오르는 것은 플레이어의 가까운 클리핑 평면 뒤의 점 투영을 뒤집는 것입니다. 앞의 화면에 점을 투영해야하기 때문에 논리적 인 것 같습니다 정점
내 생각은 다음과 같습니다.
다음은 어떤 일이 일어나는지 보여주는 이미지입니다.
멀리서 보면 파란색 상자가 완벽하게 렌더링됩니다.
정점 중 일부가 플레이어의 가까운 클리핑 평면 뒤에 가면 반전 투영을 수행하지만 올바르게 보이지 않습니다.
focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;
얼굴을 그리는 데 사용 된 모든 정점이 플레이어 뒤에 있기 때문에 뒤에있는 회색 상자가 완전히 제거됩니다.
위 또는 아래를 볼 때 발생하는 현상입니다.
나는 이것 뒤에 수학을 무엇으로 만들어야할지 모르겠다. 누군가가 이미 같은 문제에 직면하여 나를 도울 수 있기를 바라고있다.
lineTo(x,y)
함수를 계속 호출 할 수 있었지만 어떻게 작동하는지 모르겠습니다 ... 기괴한 치수입니다.