2015-01-07 1 views
1

저는 JavaFX 8 3D를 사용하여 시각적 모델을 조작하는 응용 프로그램을 작성하는 팀의 일원입니다. 우리는 원근 카메라와 평행 카메라를 모두 사용합니다. 원근 카메라가 예상대로 작동합니다. 현재 isEyeAtCameraZero false로 작업 중입니다. 이는 병렬 카메라와의 호환성을 최대화하기 위해 수행되었습니다.JavaFX 8 - 병렬 카메라에서 NearClip 및 FarClip을 설정하는 방법은 무엇입니까?

camera.setNearClip()camera.setFarClip()을 호출하면 원근 카메라가 올바르게 작동합니다.

병렬 카메라가 camera.setNearClip()camera.setFarClip()에 응답하지 않는 것으로 보입니다. 병렬 카메라는 근거리 및 원거리 클립핑을 수행하지만 병렬 카메라 자르기 범위를 변경할 수 없었습니다.

JavaFX 8 Camera javadocs 페이지의 의사 코드를 기반으로 알고리즘을 사용하여 camera.setNearClip()camera.setFarClip()에 전달 된 값을 계산합니다. 이 카메라는 원근 카메라에서는 올바르게 작동하지만 병렬 카메라에서는 올바르게 작동하지 않는 것으로 보입니다.

누구나 병렬 카메라의 클리핑 범위를 관리하는 방법에 대한 조언을 제공 할 수 있습니까?

+0

조금 늦었습니다!; InteractiveMesh에 감사드립니다. 그 결과 우리는 Persective 시야를 매우 작은 각도로 설정하고 대상 객체로 뷰를 채우기 위해 필요한 카메라까지의 거리를 계산하여 ParallelCamera를 시뮬레이션했습니다. 그것은 약간의 진흙이지만 최종 사용자는 만족스럽고 현장의 정사영을 볼 수 있습니다. –

답변

2

직각 투영을 계산할 때 ParallelCamera가 클리핑 거리를 무시하는 것처럼 보입니다. 대신 장면/SubScene의 너비 또는 높이가 패키지 민간 방법에 따라 원거리 및 근거리 클리핑 평면을 결정

void computeProjectionTransform(GeneralTransform3D proj) { 
    final double viewWidth = getViewWidth(); 
    final double viewHeight = getViewHeight(); 
    final double halfDepth = (viewWidth > viewHeight) ? viewWidth/2.0 : viewHeight/2.0; 

    proj.ortho(0.0, viewWidth, viewHeight, 0.0, -halfDepth, halfDepth); 
} 

이것은 3D 자바 FX의 렌더링에 대한 ParallelCamera 꽤 쓸모가 있습니다.

관련 문제