формат файла землетрясения 2 md2 (теория)

Кажется, что Вы перенапрягаете regex с этой целью. То, что я сделал бы, использовать regex, чтобы соответствовать нескольким форматам даты и затем использовать отдельную функцию для проверки значений полей даты, так извлеченных.

6
задан Kromster says support Monica 17 January 2019 в 04:51
поделиться

3 ответа

You could use a precompiled table of normals, and use a lookup table to select one that is 'good enough' for a particular case. Each triangle is on a distinct plane, and it's that plane that has a normal, not the triangle itself.

For instance, lets imagine we have a point. Expand that point into a sphere for the purposes of this discussion, makes it a little easier to grasp conceptually. If you draw a perfect circle around that sphere on the y axis, then rotate that circle in the x axis 1 degree each time, you'll end up with 360 circles. If you take a normal at 1 degree intervals along each of those circles, you'll end up with 360 ** 2 points. From there, your normal is the vector from the center of the sphere to that point on the sphere, and it is a normal for a plane constructed tangential to point on the sphere. What you end up with if you calculate these two for every point on that sphere is a precalculated table of normals, which will almost certainly be good enough for most situations. Now you just need to design a lookup scheme for that data (plane -> normal).

9
ответ дан 8 December 2019 в 13:46
поделиться

Формат файла MD2 определяет, что каждая вершина имеет «нормальный индекс», и это поиск в хорошо известной таблице нормалей . Я бы предположил, что эти нормали распределены по сфере. Предположительно, инструмент, который построил модель, выбрал наиболее подходящие из этих нормалей для каждой вершины.

Что касается первого ответа: если вам нужна очень фасетная модель (например, куб), тогда каждый полигон действительно имеет свой собственный нормальный, и каждая из вершин, составляющих этот многоугольник, должна использовать один и тот же вектор нормали. Однако, если вам нужно плавное затенение (например, торса), обычно каждая вершина в многоугольнике имеет свой вектор нормали. Это позволяет изменять освещение по многоугольнику, что полезно как в сценариях освещения по вершинам, так и по пикселям.

2
ответ дан 8 December 2019 в 13:46
поделиться

Ответ уже был дан, но я хочу пролить на него больше света.

Таблица содержит векторы, которые довольно равномерно покрывают поверхность единичной сферы. Похоже, что набор из 162 векторов является углами разделенного икосаэдра . Это делается для сжатия трехмерных векторов единичной длины с потерями до индекса (8 бит), см. векторное квантование . Для хранения произвольного вектора нормали вы можете искать в таблице ближайшее совпадение и вместо этого сохранять индекс этого совпадения. В этой таблице из 162 хорошо распределенных векторов угол между исходным и приближенным векторами, как ожидается, будет ниже 11 °, что кажется достаточно хорошим для движка Quake2.

6
ответ дан 8 December 2019 в 13:46
поделиться