Я пишу движок частиц для iOS, используя Monotouch и openTK. Мой подход состоит в том, чтобы спроецировать координаты каждой частицы, а затем написать правильно масштабированный текстурированный прямоугольник в этом месте экрана.
работает нормально, но у меня проблемы с вычислением правильного значения глубины, чтобы спрайт корректно перерисовывался и перерисовывался трехмерными объектами в сцене.
Это код, который я использую сегодня:
//d=distance to projection plane
float d=(float)(1.0/(Math.Tan(MathHelper.DegreesToRadians(fovy/2f))));
Vector3 screenPos=Vector3.Transform(ref objPos,ref viewMatrix, out screenPos);
float depth=1-d/-screenPos.Z;
Затем я рисую треугольную полосу по экранной координате, где я помещаю вычисленное выше значение глубины в качестве координаты z.
Результаты почти правильные, но не совсем. Я предполагаю, что мне нужно как-то принять во внимание ближний и дальний отсечения плоскости (ближний 1 и дальний 10000 в моем случае), но я не уверен, как. Я пробовал разные способы и алгоритмы без получения точных результатов.
Буду признателен за помощь.