UPDATE
Как datenwolf указывает мое объяснение связано с конвейера OpenGL 2, который был замещен. Это означает, что вы должны делать свои собственные манипуляции из космоса в пространстве экрана, если хотите отказаться от устаревших методов. К сожалению, эта небольшая сноска до сих пор не связана с каждым последним фрагментом кода OpenGL или комментариями в юниверсе.
Конечно, я не знаю, почему обязательно использовать существующий трубопровод GL2, прежде чем собирать библиотеку, чтобы сделать то же самое или создать ее самостоятельно.
ORIGINAL
Я играл с JOGL себя, хотя у меня есть некоторый ограниченный опыт работы с OpenGL. OpenGL использует две матрицы для преобразования всех трехмерных точек, которые вы проходите через нее из пространства 3D-модели, в 2D-пространство экрана, матрицу проекций и матрицу ModelView.
Проекционная матрица предназначена для компенсации трансляции между 3D-миром и 2D-экраном, , проецируя более высокое пространственное пространство на нижний размерный. Вы можете получить более подробную информацию по Googling gluPerspective
, которая является функцией в наборе инструментальных средств для настройки этой матрицы.
ModelView матрица, с другой стороны, отвечает за перевод трехмерных координат элементов из пространства сцены в пространство просмотра (или камеры). Как именно это делается, зависит от того, как вы представляете камеру.Три общих способами представления камеры являются
- Вектора для положения, вектор для цели камеры, и вектор для «вверх» направления
- Вектора для позиции плюс кватерниона для ориентация (плюс, возможно, одно значение с плавающей точкой для шкалы, или оставить шкалу устанавливается в 1)
- одна матрица 4x4, содержащая положение, ориентацию и масштаб
Какой бы ни один использовании потребует от вас написать код перевести представление во что-то, что вы можете дать к методам OpenGL, чтобы настроить матрицу ModelView, а также писать код, чем переводить действия пользователя в модификации данных камеры.
В JOGL-Demos и JOCL-Demos есть несколько демоверсий, которые включают в себя такие манипуляции. Например, this class предназначен для того, чтобы действовать как своего рода примитивная камера, которая может увеличивать и уменьшать и поворачивать вокруг начала сцены, но не может повернуть иначе. Поэтому он представлен как только 3 поплавка: и вращение X и Y и расстояние Z. Он применяет ее преобразование к чему-то видовому как это :
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0, 0, z);
gl.glRotatef(rotx, 1f, 0f, 0f);
gl.glRotatef(roty, 0f, 1.0f, 0f);
Я в настоящее время экспериментирую с Quaternion + Vector + Поплавок на основе камеры с использованием библиотеки Java Vecmath, и я применяю мою камеру преобразование, как это:
Quat4d orientation;
Vector3d position;
double scale;
...
public void applyMatrix(GL2 gl) {
Matrix4d matrix = new Matrix4d(orientation, position, scale);
double[] glmatrix = new double[] {
matrix.m00, matrix.m10, matrix.m20, matrix.m30,
matrix.m01, matrix.m11, matrix.m21, matrix.m31,
matrix.m02, matrix.m12, matrix.m22, matrix.m32,
matrix.m03, matrix.m13, matrix.m23, matrix.m33,
};
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadMatrixd(glmatrix, 0);
}
1: причина это называется ModelView, а не только матричным потому, что вы можете нажать и поп-матрицу в стеке видовой (это справедливо для всех OpenGL матриц преобразования, я считаю). Как правило, у вас либо есть полный стек матриц, представляющих различные преобразования элементов относительно друг друга в графе сцены, а нижний, представляющий преобразование камеры, или у вас есть одно преобразование камеры и сохраняйте все на графике сцены в координатах мирового пространства (какой тип поражения имеет место для сцены graph, но что бы там ни было).
2: На практике вы не увидите вызовы gl.glMatrixMode(GL2.GL_MODELVIEW);
в коде, потому что конечный автомат GL просто остается в режиме MODELVIEW все время, если вы активно не устанавливаете матрицу проецирования.
это может быть полезно http://www.land-of-kain.de/docs/jogl/ –
спасибо, я видел этот сайт, но я думаю, что он использует JOGL 1.5, так как большая часть метода отличается в API I got .. –
Возможный дубликат: проверьте jugl pmvMatrix http://stackoverflow.com/a/13485670/398672 – olamedia