Создать 3D квадратное усечённое тело, применив трансформацию к кубу?

Я хотел бы знать, возможно ли построить трехмерную квадратную усечку, применяя некоторую трансформацию к glutSolidCube(GLDouble size), Я предполагаю, что речь идет о некоторой матрице сдвига, которая, насколько я могу судить, не является встроенным преобразованием.

Обратите внимание, что мне совершенно безразлично усмотрение просмотра (которое, как вы можете себе представить, делает любые поиски в Google искаженными). Я просто хотел бы иметь 3D квадратный усеченный фрагмент как часть моей сцены. Будем благодарны за любые идеи о том, как изготовить кубик!

Квадратный усеченный

2

Решение

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

Смотрите здесь для подробных формул: http://www.songho.ca/opengl/gl_projectionmatrix.html

Чтобы деформировать куб, лучше создать VBO с нужными вершинами или просто визуализировать несколько деформированных квадратов, если вы хотите какую-то быструю и нездоровую реализацию с использованием конвейера с фиксированными функциями.

Постскриптум

Есть фрагмент кода для расчета углов усеченного конуса: http://www.gamedev.net/topic/606716-frustum-corners-from-view-projection/

2

Другие решения

Да, возможно преобразовать ваш куб в усеченную фигуру, учитывая очень матрицу проекции. Сначала определите фокусное расстояние d, которое является точкой, где сходятся края усеченного конуса. Затем умножьте все углы вашего объема на эту матрицу:

P = [ 1   0   0   0
0   1   0   0
0   1  1/d  0
0   0   1   0 ]
0

По вопросам рекламы [email protected]