Я хотел бы знать, возможно ли построить трехмерную квадратную усечку, применяя некоторую трансформацию к glutSolidCube(GLDouble size)
, Я предполагаю, что речь идет о некоторой матрице сдвига, которая, насколько я могу судить, не является встроенным преобразованием.
Обратите внимание, что мне совершенно безразлично усмотрение просмотра (которое, как вы можете себе представить, делает любые поиски в Google искаженными). Я просто хотел бы иметь 3D квадратный усеченный фрагмент как часть моей сцены. Будем благодарны за любые идеи о том, как изготовить кубик!
Это не матрица сдвига, это матрица проекции для перспективной проекции. Вы умножаете координаты вершин единичного куба на матрицу обратной проекции, чтобы получить координаты вершин усеченного конуса. Чтобы получить координаты усеченного конуса в мировом пространстве, вам также необходимо умножить вершины на обратную матрицу камеры (матрица вида).
Смотрите здесь для подробных формул: http://www.songho.ca/opengl/gl_projectionmatrix.html
Чтобы деформировать куб, лучше создать VBO с нужными вершинами или просто визуализировать несколько деформированных квадратов, если вы хотите какую-то быструю и нездоровую реализацию с использованием конвейера с фиксированными функциями.
Постскриптум
Есть фрагмент кода для расчета углов усеченного конуса: http://www.gamedev.net/topic/606716-frustum-corners-from-view-projection/
Да, возможно преобразовать ваш куб в усеченную фигуру, учитывая очень матрицу проекции. Сначала определите фокусное расстояние d, которое является точкой, где сходятся края усеченного конуса. Затем умножьте все углы вашего объема на эту матрицу:
P = [ 1 0 0 0
0 1 0 0
0 1 1/d 0
0 0 1 0 ]