Получить положение объекта в opengl после преобразований - PullRequest
4 голосов
/ 30 декабря 2011

Я хотел бы получить координаты объекта в OpenGL. Я рисую четырехугольник. И после этого я делаю некоторые преобразования, такие как GL11.glTranslatef () и GL11.glRotatef ().

GL11.glBegin(GL11.GL_QUADS); // draw independent triangles
GL11.glColor3f(0.0f, 1.0f, 0.0f);
GL11.glVertex3f(-0.2f, 0.0f, -2.0f);    // lower left vertex
GL11.glVertex3f( 0.2f, 0.0f, -2.0f);    // upper vertex
GL11.glVertex3f( 0.2f, 0.4f, -2.0f);    // lower right verte
GL11.glVertex3f( -0.2f, 0.4f, -2.0f);
GL11.glEnd(); 

Можно ли получить положение вершин после преобразования?

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Конечно.Примените те же преобразования (переводы и повороты) к вектору положения, который содержит положение вашего объекта.Результатом будет положение вашего объекта после преобразования.Вам может потребоваться выполнить некоторое масштабирование в какой-то момент, если вы хотите преобразовать 3d-координаты в 2d-экранные.Но это очень выполнимо.Это включает масштабирование на основе глубины z объекта.

РЕДАКТИРОВАТЬ:

 private final FloatBuffer buffer = EngineUtil.createBuffer( 16 );

      /**
    * @return Current modelview matrix (column-major)
    */
   public Matrix getModelviewMatrix() {
      return getMatrix( GL11.GL_MODELVIEW_MATRIX );
   }

   /**
    * @return Current projection matrix (column-major)
    */
   public Matrix getProjectionMatrix() {
      return getMatrix( GL11.GL_PROJECTION_MATRIX );
   }

   /**
    * Retrieves the specified matrix.
    * @param name Matrix name
    */
   private Matrix getMatrix( int name ) {
      // Retrieve specified matrix buffer
      buffer.rewind();
      GL11.glGetFloat( name, buffer );

      // Convert to array
      final float[] array = new float[ 16 ];
      buffer.get( array );

      // Convert to matrix
      return new Matrix( array );
   }

Но вы можете просто использовать что-то более полное, чем LWJGL.Google vecmath, обработка, единство.3D сложно, и кажется, что нет никаких реальных сокращений, так что продолжайте пробовать, вы получите это.

0 голосов
/ 30 декабря 2011

это невозможно ... opengl отправляет ваши данные вершин в GPU и только в GPU вы можете получить их после преобразования.

, чтобы получить преобразованные вершины, вы должны умножить их на матрицу

for each vertex:
   vertex_transformed = matrix * vertex

некоторые более продвинутые способы - использовать преобразование обратной связи и сохранять эти преобразованные вершины в буфере (но все же этот буфер будет храниться в графическом процессоре).

...