Ну моя идея следующая (вынес отдельным сообщением) я не кодер, но всё же:
На конце ствола есть аттачмент, который проецируется на объект, стену или какую-то цель, т.е. рисуется вектор из кончика ствола и на конце (т.е. в точке пересечения вектора с какойто поверхностью) рисуется спрайт, который на экране всегда принимает одинаковый размер (т.е. имеет всегда одинаковый размер в пикселях на экране, вне зависимости от удалённости). Принцип в точности такой же, как лазер у RPG, только там размер точки меняется. А вот дальше пошло нововведение - точка (энтитя) рендерится только в том случае, если на экране она попадает в регион определённой текстуры присвоенной модели, например со специальным параметром или шейдером... но вот вопрос... как вычислить этот регион? Оо Т.е. нужно что-то, что генерировало бы нечто вроде альфа канала, т.е. область, в которой точка показывается и область в которой точка не показывается (но она есть в любом случае).
Ведь он может быть и овальной и круглой формы, в зависимости от того, как повернут ствол... или вообще хаотичной формы, всякие конфигурации колиматоров есть.
Но тут есть и существенный недостаток! Если перевести прицел с ближнего объекта на дальний, то визуально точка перепрыгнет или же магически начнёт двигаться в другую сторону, например если перед нами есть тонкая стенка, а за ней вдалеке что-то и как бы из-за угла вектор "светит" на дальние объекты и если перевести точку с этой плоской стенки влево, то достигнув края, то конец вектора перескочит на дальние объекты и а визуально резко перескочит вправо, ну или ещё чего произойдёт страшное произойдёт... =\ Как эту проблему решить? Рисовать невидимую плоскость и вычислять всё относительно неё? Оо
Т.е. предварительное точное вычисление, куда попадёт пуля в 3Д пространстве отбрасываем сразу, ибо это будет магия, а колиматор всё-таки не магия, а всего лишь галограмма. Т.е. тут либо специальную плоскость создавать, невидимую для игрока, находящуюся на определённом, фиксированном расстоянии, расстояние может быть любым и на её поверхности уже всё вычислять, т.е. нужно что-то, что неменяет своё положение относительно игрока.
Клим, а ведь Збуффер можно игнорировать... Картинка метки всё равно всегда одного и того же размера и просто выводится только в том случае, если попадает в регион, перекрытие другими объектами не нужно, точку можно рисовать на плоскости экрана, а не на самой текстуре, вычислив все пиксели, которые относятся к стеклу прицела. А чтобы на границе точка не налазила на модель, размеры региона, в котором точка рендерится, можно уменьшить на диаметр точки, чтобы точка пропадала до того, как коснётся того места, где стеклянный прицел переходит в метал.
И... по поводу оптимизации, можно вычислить заранее положение точки для критических уголов поворота оружия (т.е. продолжение двежений мыши в том же направлении привёдёт к повороту экрана), а из этих критических значений уже вычислять средние. Т.е. надо предварительно задать положение точки на экране в пяти экстремальных положениях (по середине, сверху, снизу, справа с лева), а потом просто вычислять промежуточные значения, вместо рилтайм вычислений с помощью проекций, но тогда положение центра оружия должно оставаться не изменным, т.е. оружие нельзя передвигать, только вращать.
Или же... Можно отбросить эксперементальность и сделать всё точно, но предварительно. Т.е. чтобы комп сам расчитал всё для критических углов, запомнил результаты, а потом просто высчитывал бы промежуточные значения при изменении положения мыши. Это легче чем считать проекцию.
Вся проблема в том, чтобы правильно задать регион рендера этой точки.
По поводу этого:
Если использовать только круглое стекло колиматора, можно рисовать это внутри окружности (ствол направлен идеально перпендикулярно экрану) и добавляя коэффициенты к x и y пропорциональные повороту ствола можно получать элипсы...
Но тут стекло колиматора должно быть ни где, как точно в центре экрана, а вращение вокруг центра этой стекляшки... чтобы в плоскости это выглядело, как сжимание и растяжение по осям.
Т.е. вывод такой - можно вообще ничего не вычислять рилтайм, а всё сделать фейк, т.е. эксперементально установить куда попадёт пуля при определённом максималном угле, который будет видно в области прицела, сделать его критическим (т.е. двигаем мышь дальше - уже поворачивается экран, а не оружие), задать его математически (т.е. отрисовать положение на экране заранее, без расчётов, эксперементально), а потом в зависимости от движения мыши менять коэффициенты и положение точки на экране. Ещё раз подчёркиваю - по тому, что я предлогаю точка рисуется на экране (как HUD), а не на плоскости прицела...
А
не отрисовывание точки на экране вычислять как: если координата x точки больше координаты x из формулы эллипсоида, то точку не рисовать =) Ну что-то вроде такого...
Ещё раз повторюсь я не кодер! Поправьте меня, что не так, не критикуйте. Я только учусь на программиста и не собираюсь в дальнейшем идти по этой специальности...
Цитата:реально, но тогда придется много кодить...
Вопрос скорее сводится к есть ли тут такой человек, который в состоянии это реализовать и что нужно сделать, чтобы он это реализовал.
И да, речь идёт об Operation Broken Arrow...
Я кружки умелых ручек не организую, всё для конкретного применения. И раз уж я разговор завёл тут, то результат, если кто-то настолько добр и возьмётся, можно сделать и достоянием общественности.