2012-05-05 1 views
0

Я начал с JOGL в последнее время, я знаю, как создавать и рисовать объекты на холсте, но я не смог найти учебное пособие или пояснения о том, как установить и повернуть камеру. Я только нашел исходный код, но так как я совершенно новый с этим, это не очень помогает.Java OpenGL Camera

Кто-нибудь знает о хорошем учебнике или месте для начала? Я googled, но ничего не мог найти (только для JOGL 1.5, и я использую 2.0).

+0

это может быть полезно http://www.land-of-kain.de/docs/jogl/ –

+0

спасибо, я видел этот сайт, но я думаю, что он использует JOGL 1.5, так как большая часть метода отличается в API I got .. –

+0

Возможный дубликат: проверьте jugl pmvMatrix http://stackoverflow.com/a/13485670/398672 – olamedia

ответ

1

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 все время, если вы активно не устанавливаете матрицу проецирования.

+0

Стек матрицы OpenGL был удален из современных версий OpenGL.** Вы не должны использовать встроенный матричный стек OpenGL во вновь написанном коде! ** Многие считают, что операции с матрицей OpenGL были ускорены. * Они никогда не были! * Также ваше предложение о том, что конечный автомат GL остается в режиме MODELVIEW, неверно и фактически приводит к большому путанице новичков. В любой более продвинутой программе вам нужно несколько раз менять проекцию (например, HUD, разделенный экран, несколько окон просмотра или если вы создаете тень в теневом буфере, все это требуется). – datenwolf

+0

Единственная причина придерживаться конвейера с фиксированной функцией OpenGL (т. Е. Встроенного матричного стека), если вы хотите поддерживать графические процессоры, предшествующие 2004 году. К этим дням сложно прийти. – datenwolf

0

, но я не мог найти учебник или объяснения о том, как установить и поверните камеру

Потому что нет. OpenGL - это не граф сцены. Это в основном сложные холсты и простые инструменты рисования точек, линий и треугольников. Размещение «объектов» на самом деле означает применение линейных преобразований для размещения трехмерного вектора на двумерном буфере кадров.

Таким образом, вместо того, чтобы размещать «камеру», вы просто перемещаете весь мир (преобразование) в противоположном направлении, вы перемещаете камеру, давая тот же результат.

+0

спасибо за ваш ответ, так же есть учебник о том, как это сделать? Я перемещен по объекту с помощью мыши –

+0

OpenGL не является графиком сцены, но указывает человека в сторону определения того, как взять камеру (Vector + Quaternion vs Matrix), и как перевести этот представление в вызов OpenGL для получения желаемого эффекта (GL_MODELVIEW + glLoadMatrix) будет более полезным, чем ваш довольно непроницаемый ответ. Кроме того, учитывая, что контур преобразования матриц является ВСТРОЕННЫМ в GL, называя его холстом примитивами рисования, это немного неискренне. – Jherico

+0

@ Jherico: Поскольку манипуляция с основными матрицами OpenGL-3 была удалена из OpenGL. На самом деле планы по удалению матричного стека уже существуют с OpenGL-2. Также ваш ответ подтверждает плохие практики. – datenwolf

 Смежные вопросы

  • Нет связанных вопросов^_^