Предыдущая глава |
↓ Содержание ↓
↑ Свернуть ↑
|
Вы могли заметить, что при попытке повернуть кубик на заданный угол, возникают серьёзные проблемы, в частности при повороте линии в строго перпендикулярной системе имитатора, она искажается, искажается её длина, часть пикселей вываливается, а другая часть наоборот накладывается друг на друга, и такие проблемы возникают при повороте любой фигуры. То есть правильно повернуть фигуру в имитаторе как бы нельзя. И какой вообще смысл в 3Д имитаторе, где невозможно повернуть что-либо на угол отличный от 90 градусов. И если бы вы в прошлом сами с нуля писали три де двигатель, то вы тоже столкнулись бы с этой проблемой и знали бы как её решить. Но вы пользуетесь чужими готовыми решениями, не понимая, как всё работает. И вот тут уже нужны некоторые инженерные навыки, и таких проблем при разработке имитатора масса, но они решаемы, просто вот тут уже надо понимать, как всё работает и что делать.
Решение данной проблемы возникало у меня в моём 3Д двигателе, который вы все видели, в частности при нанесении полигона на 2Д холст, линия полигона заданной длины может быть кривая, а не под углом 90 градусов, и тоже вываливаются пикселы, а другие накладываются друг на друга. Всё дело в том, что для поворота трёхмерной сетки на произвольный угол относительно неподвижной 90градусной системы координат, длинна ячейки сетки, согласно простейшим законам тригонометрии должна составлять не более 0,7071 клетки, а лучше ещё чуть-чуть поменьше, чтобы не было артефактов. В случае с три де имитатором, чтобы решить ещё ряд проблем, которые возникнут в дальнейшем, я бы советовал взять 0,33. То есть каждый пиксел имитатора должен быть соединён с соседним пикселом не одним каналом связи, не одним проводком, а 9 проводами в формате 3х3. В этом случае вы сможете создать трёхмерную сетку заливки с разрешением 3000х3000х3000 точек, в то время как само количество микрочипов в имитаторе будет 1000х1000х1000 отображаемых залитых по итогу пикселей, такие сложности нужны для правильного и безглючного поворота любой фигуры на заданный угол. То есть, грубо говоря, каждая фигура и вся система три координат имеет сетку заливки 3000х3000х3000 а количество пикселей на имитаторе 1000х1000х1000, в этом случае проблем с поворотами не будет. Все пикселы что накладываются друг на друга, формируют один пиксел, и программа сама решит какой пиксел будет в зависимости от написанного кода. А заливка внутри фигуры будет строиться перпендикулярным проецированием любого пиксела внутрь фигуры до упора в другой пиксел. Такая система позволит повернуть кубик на любой угол внутри имитатора, и правильно залить его изнутри пикселами, силами самого имитатора. То есть вы сможете увидеть в кадре текстурированный кубик под любым углом.
Для того чтобы, расстояние до объекта увеличивалось, а всё не проецировалось одинаково, то есть, чтобы экспозиция была трёхмерна, и тот объект, который дальше казался меньше. Нужно сделать следующее, в простейшем случае это делается очень просто. Сама сцена должна быть не кубиком 1000х1000х1000 а иметь более сложную форму кадра, то есть, грубо говоря, камера находится в вершине усечённой пирамиды, разрешение камеры 600х600 пикселей, а противоположная стенка например 1200х1200 пикселей. То есть мы имеем систему, где удалённый объект в 2х2 раза меньше, чем тот, что близко, это и есть визуальная имитация расстояния. Однако при такой системе полноценное проецирование уже невозможно. Мы не можем спроецировать картинку 1200х1200 на 600х600, в самом простом идиотском и примитивном варианте, удалённые пикселы просто вываливаются, и это заложено в архитектуру самого устройства, то есть буквально мы видим дальнюю стенку в разрешении 600х600, а каждый второй пиксел не видим, то есть точнее один из 4х видим и остальное нет. Причём по мере приближения объекта к камере разрешение уменьшается, и количество вываливающихся пикселей уменьшается тоже. Это некачественное решение сжатия картинки используемое в пэйнт. В самом простом варианте можно сделать так. Но для того чтобы всё смотрелось лучше, есть чуть более сложный и качественный способ, каждый пиксел имеет цвет РГБА(255,255,255,255), это белый, или РГБА(255,0,0,255) красный, всё примитивно, когда надо объединить четыре пиксела в один, делим каждую цифру у каждого пиксела на четыре, складываем, округляем и получаем пиксел суммарного цвета, для более чёткого сложения пропорцию можно привязать к геометрии а не брать всегда одну четвёртую. Таким образом, мы с вами создали простой имитатор, в нём, расстояние изменяется от камеры, любой объект, который дальше от нас, будет выглядеть меньше. При этом мы видим проекцию. Мы можем построить любую три де модель кодом так, как я описал, и, используя координатную сетку, 3000х3000х3000 мы можем без проблем повернуть любую три де модель в каждом кадре на любой угол, с погрешностью заливки не более 1 пикселя, что для игрока визуально незаметно. (качество картинки зависит тупо от разрешения, которое на самом деле может быть куда больше чем 1000микрочипов в грани, и в принципе даже куда больше чем 8к и даже все 128к что современным видеокартам вообще невозможно никак) При этом, мы, заливая фигуру, указали материал фигуры, его температуру исчезновения, при которой материал исчезает или превращается в газ или жидкость, мы указали прочность, твёрдость и текучесть, мехсвойства материала прямо в кадре игры. Иными словами имитатор может рассчитывать течение жидкости. Также на основании объёмной модели, на имитаторе не сложно оценить любую модель как препятствие, то есть объект будет осязаемым. Всё шикарно, всё работает, и намного лучше, чем видеокарта. Дальше надо просто сделать и доработать устройство. Более точное инженерное решение уже требует от меня участия в проекте, и да, если бы я делал всё сам и своими руками, вы, вероятно, удивились бы какими методами и алгоритмами я решаю проблемы создания имитатора. Нет ничего невозможного. Это выполнимо. Да это куча сложных инженерных задач, и задач программирования, их надо решать, но они решаемы. И топовый имитатор лучше, чем видеокарта при построении три композиций. Если что непонятно, давайте обсудим. Не знаю насколько я или вы не в теме, но сделать это возможно. Если между нами нет понимания, выходите на связь.
Предыдущая глава |
↓ Содержание ↓
↑ Свернуть ↑
|