Простые 3d-функции Delphi - PullRequest
7 голосов
/ 12 февраля 2012

Может ли кто-нибудь помочь мне с примерами некоторых голых, старых школьных 3d-методов в Delphi?Не использовать openGL или firemonkey или какую-либо внешнюю библиотеку (vanilla canvas coding).То, что я хочу сделать, - это иметь возможность вращать количество точек X вокруг общего оригинала.Из того, что я помню в старые времена, вы вычитаете слева направо (на 3-х точках) так, чтобы origo всегда было 0,0 - затем выполняете вычисления и, наконец, добавляете смещение левого / верхнего пикселя, чтобы получить фактические положения экрана.

Что мне нужно, так это набор небольших специальных подпрограмм, ala:

  • RotateX (aValue: T3dpoint; degr: float): T3dPoint;
  • RotateY (- / -)
  • RotateZ (- / -)

Используя эти функции, довольно легко создать старый "вращающийся 3d куб" (8 баллов).

Кроме того, есть ли функции для определения видимых "граней"?Если я хочу заполненный векторный куб, тогда я предполагаю, что мне нужно извлечь видимые области (на основе расстояния / перекрытия?), Которые, в свою очередь, отображаются как число заполненных полигонов X?И они, несомненно, должны быть отсортированы по глубине, чтобы не возникало беспорядка.

например:

  • PointsToFaces (const a3dObject: T3dPointArray): TPolyFaceArray;
  • SortFaces (Const aFaces: TPolyFaceArray): TPolyFaceArray;

Любая помощь приветствуется!

Ответы [ 2 ]

8 голосов
/ 13 февраля 2012

Вот хороший старый добрый ресурс для Delphi Math из справочника efg .
Вы можете найти список графических проектов .
2D / 3D Lab Векторная графика : перемещение, вращение, масштабирование, преобразование вида, однородные координаты, отсечение, проекции, векторы, матрицы и т.д ...

5 голосов
/ 12 февраля 2012

Несколько лет назад я написал простой «движок» для 3D-рендеринга, используя только наивную линейную алгебру. Может быть, не самый эффективный. Несколько тысяч баллов - это предел, если вы хотите двигаться достаточно плавно. Образец EXE . Вы можете получить код , если хотите, но это может быть не так красиво.

...