d3dxintersect 예제

다음 단계는 이 광선을 이 세상의 실체와 충돌하는 것입니다. 일반적으로 실제 광선 대 메시 교차 테스트를 수행하기 전에 엔터티를 간단히 거부하기 위해 경계 상자 및/또는 경계 구 테스트를 먼저 수행합니다. 음축으로 전달하면 Smooth 함수는 돌출 함수가 됩니다. 정점을 평균 높이 위치에서 멀리 이동합니다. D3DXINTERSECTINFO 구조의 배열을 포함하는 ID3DXBuffer 개체에 대한 포인터입니다. 정점의 거리가 선택한 위치에서 떨어진 거리를 따라 지형을 변형했습니다. 먼저 지형의 중심과 정의된 브러시의 반지름으로부터의 거리에 따라 모프의 배율을 결정했습니다. 우리의 광선 – OBB 교차 함수는 다음과 같이 보일 것입니다 : 당신이 어떤 빛 계산을수행하는 경우 정점을 업데이트 한 후 법선을 다시 계산하는 것이 좋다. 이제 X축에서 OBB를 구분하는 2개의 평면과의 교차점을 계산해 보겠습니다: 지형 을 스무딩하는 것은 매우 간단하며 기본적으로 선택한 정점의 모든 높이를 평균화합니다. 먼저 선택한 모든 정점의 평균 높이를 가져옵니다. 다음으로 평균 높이와 현재 정점 높이 간의 차이를 가져옵니다.

마지막으로 차이를 배율 조정하고 원래 높이로 다시 추가합니다. 배율은 사용자가 지정합니다. 이것은 X 축을 위한 것이었습니다. 다른 모든 축에서 정확히 동일합니다! 메시의 인덱스 버퍼 내에서 인덱스를 변경하지 않을 수 있습니다. 나는 여전히 정점을 재설정하는 동시에 인덱스를 재설정해야한다는 것을 발견했다. 먼저 몇 가지 변수를 분류합니다. tMin은 현재 발견되는 가장 큰 “가까운” 교차로입니다. tMax는 현재 발견되는 가장 작은 “원거리” 교차점입니다. 델타는 평면과의 교차를 계산하는 데 사용됩니다. 참고: 위의 너비와 높이 값이 올바른지 가중요합니다. 창 크기와 같지 않을 수 있는 백 버퍼의 크기를 사용해야 합니다(메뉴 막대, 테두리 등). 내가 일반적으로하는 것은 장치 ->GetViewport (& m_mainViewport)라고 부르는 장치를 만들고 저장하는 것입니다.

뷰포트 구조는 올바른 백 버퍼 너비와 높이를 유지합니다. 월드 모델에서는 위의 광선 교차 테스트를 수행하는 세계의 모든 엔터티를 반복합니다. 충돌이 발생하면 거리를 기억하고 계속 반복하십시오. 다른 충돌이 더 가까워지면 사용할 것입니다 (뒤에 다른 엔티티를 클릭 할 수 있지만 가장 가까운 충돌을 선택하려고합니다). 광선이 시작되는 점을 지정하는 D3DXVECTOR3 구조에 대한 포인터입니다. D3DXMATRIX m;D3DXVECTOR3 레이오리진,레이디르;D3DX매트릭스인버스(&m, NULL, & matView );// 화면 공간 선택 광선을 3D spacerayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;rayDir.y = v.x*m_12 + v.y*m._22 + v.z*m_32;rayDir.z = v.x*m_13 + v.y*m_23 + v.z*m._33;레이Origin.x = m._41;레이Origin.y = m._42;rayOrigin.z = m._43; 엔터티를 렌더링할 때 각 엔티티에 대해 설정된 월드 매트릭스를 통해 모델 공간에서 월드 공간으로 변환됩니다(행렬 참조). 그런 다음 뷰 매트릭스를 사용하여 카메라 공간으로 변환한 다음 프로젝션 매트릭스를 사용하여 2D 화면에 원근으로 렌더링됩니다. 마우스로 2D 화면을 클릭하면 반대로 해야 하며, 2D 포인트를 3D 세계에서 위치와 광선으로 변환해야 합니다.

우리는 마우스 위치를 가지고 광선으로 변환해야합니다.

02 August, 2019
Posted in Uncategorized

Author: wolff