마우스 클릭을 기반으로하는 3D 벡터를 계산할 때 사용하는 수학은 효과가 있지만 사실 작동한다는 사실은 나를 괴롭 히고 있습니다. 가로 축에 대한 시야를 기반으로 새로운 비율을 계산하는 대신 가로 축의 종횡비로 세로 축에 표현 된 뷰 - 가로 세로 축의 시야를 기반으로 새 비율을 계산하는 대신이 필드가 선형으로 스케일링되는 반면 수평축에 대한 fov 탄젠트를 다시 계산하면 이 아니므로 내 카메라에 약간 거친 렌즈가있어 궁금합니다.. 여기 D3D의 화면 좌표에서 3D 벡터 투영이 반 직관적 인 것 같습니다
합니다 (FOV가 수평 축에 표현되어 있습니다 및 D3D는 수직축을 원하는) 잘 작동 코드,의double mouseX = ((((double) hitPt.x)/(double) vport.cx) - 0.5) * 2.0;
double mouseY = ((1.0 - (((double) hitPt.y)/(double) vport.cy)) - 0.5) * 2.0;
double tfy = tan((fov/aspr) * 0.5);
double tfx = tfy * aspr;
SFMatrix4 CM1;
this->m_renderSurface->GetRawCameraMatrix(CM1);
CM1.Invert();
origin = CM1 * SFVec3f((nearp * tfx) * mouseX,(nearp * tfy) * mouseY,nearp);
dest = CM1 * SFVec3f((farp * tfx) * mouseX,(farp * tfy) * mouseY,farp);
내 감성 의 기분을 상하게하는 라인을 격리했습니다 (tfx = tfy * aspr) - 차라리 할 것입니다. tfx = tan (fov) * 0.5; 하지만 작동하지 않습니다. 센터에서 멀리 떨어지면서 오류가 증가합니다. 이것이 D3D가하는 일이며 나는 단지 그걸로 살아야 할 것입니다. 저는 호기심을 가지고 있습니다. 대략 어떤 경로가 실제로 옳은가요? (이산 메쉬를 통해 선형 대수를 밀어 붙이려는 시도가 옳은만큼) 이유는 무엇입니까?
아하를 - 머리가 아파요 - 가상 카메라가 (제대로) 원형/구면 렌즈를 가지고 있다고 가정하고, 나는 투사의 선형 특성을 뒤죽박죽 한 - 나는 빠른했다 렌즈 자체를 비대칭으로 만드는 자체 프로젝션 기능으로 테스트 해보니 결과는 막연하게 불안정했습니다. –