0
의 노드에 추려 콜백을 추가하는 올바른 방법은 내가 트래버스 메소드를 오버라이드하여 추려 콜백을 처리하는 코드가 콜백 :OpenSceneGraph
void Node::setCullCallback(Callback* nc);
어떤 것이 더 좋고 어떤 상황입니까? 그리고 첫번째 방법은 정확합니까?
의 노드에 추려 콜백을 추가하는 올바른 방법은 내가 트래버스 메소드를 오버라이드하여 추려 콜백을 처리하는 코드가 콜백 :OpenSceneGraph
void Node::setCullCallback(Callback* nc);
어떤 것이 더 좋고 어떤 상황입니까? 그리고 첫번째 방법은 정확합니까?
가장 일반적인 방법은 노드에서 사용자 정의 osg :: Node 파생 클래스를 작성할 필요가 없으므로 노드에서 Cull 콜백을 설정하는 것입니다. 따라서 기존 노드 유형, 특히 파일에서로드 된 모델에 콜백을 추가 할 수 있습니다.
런타임시 콜백을 쉽게 추가/제거/교체 할 수 있으므로 매우 유연합니다.
두 경우 모두 관심 노드에서 컬링이 활성화 된 경우 노드가 컬링 테스트를 통과 한 경우에만 traverse() 메소드 또는 콜백이 호출됩니다.
노드에 여러 Cull 콜백이 추가 된 경우 트래버스 방법이 여러 번 (추가 된 콜백에 대해) 실행되므로 이론적으로 '역 추적 메서드를 재정의하는이 코드는 올바르지 않습니다. nv.getVisitorType() == osg :: NodeVisitor :: CULL_VISITOR '조건을 트래버스 메소드에서 사용하지만 dynamic_cast와 같이 Cull Visitor의 각 유형에 대해 코드가 다르게 작동하게하려면 어떻게해야합니까? –
Koban
@Koban은 당신이 의도적으로 무엇을 의미하는지 모르겠다. 왜냐하면 컬 방문자와 컬 콜백의 개념을 혼합하는 것처럼 보인다. 일반적으로 노드는 활성 카메라 수만큼의 순차 주사 (cull traversal)에 의해 각 프레임을 방문하게됩니다. 각 컬링 순회에 사용되는 기본 클래스는 osgUtil :: CullVisitor입니다. 각 방문에 대해 콜백이 한 번 호출됩니다 (응답에서 언급 한 도용 테스트를 고려함) – rickyviking