Я пытаюсь реализовать выбор в моем приложении, но я просто не могу заставить его работать. Я испробовал 3 разных способа создания моего комплектующего луча, но в каждом из них проблема сохраняется. Это тот, с которым я наконец-то пошел:
XMVECTOR screenpoint = XMVectorSet(x, y, 1.0f, 0.0f);
XMVECTOR dirvec = XMVector3Unproject(screenpoint, 0.0f, 0.0f, mClientWidth, mClientHeight, 0.0f, 1.0f, mCam.Proj(), mCam.View(), XMMatrixIdentity());
XMVECTOR RayDir = dirvec - mCam.GetPositionXM();
RayDir = XMVector3Normalize(RayDir);
и используйте это для проверки столкновения треугольников в кубе:
XNA::IntersectRayTriangle(mCam.GetPositionXM(), RayDir, v0, v1, v2, &t);
Во всех случаях он будет выбирать треугольники, которые в некоторых случаях покрыты другими треугольниками. Когда камера находится прямо перед одной из граней куба и нацелена на правую половину этой грани, она получает вид справа, но когда она нацелена на левую сторону, она выбирает лицо слева от него.
Моя трансформация мира — это просто matrixIdentity, и я не делаю ничего особенного. Я не уверен, какую часть своего кода я должен публиковать, поэтому, пожалуйста, спросите, не достаточно ли это ясно для решения проблемы. Я загружаю свои вершины из простого файла .obj и проверяю содержимое в буфере, где нет ни одного перевода или преобразования.
Любая помощь будет принята с благодарностью.
Задача ещё не решена.
Других решений пока нет …