java - 转换后获取对象在 opengl 中的位置

标签 java opengl transform lwjgl

我想在 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(); 

是否可以获取变换后顶点的位置?

最佳答案

当然。将相同的变换(平移和旋转)应用于保存对象位置的位置 vector 。结果将是变换后对象的位置。如果您想将 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 很棘手,似乎没有真正的捷径,所以只要继续尝试,您就会成功。

关于java - 转换后获取对象在 opengl 中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8682036/

相关文章:

linux - Master/Slave AMD + NVidia中的GPU和linux

c++ - 使用 Haxe C++ 的 OpenGL?

c++ - 将 OpenGL 用于 2D

image - 变换:缩放与传统调整大小

css - 使用 css 变换在其父对象的宽度上为对象设置动画

java - 当提供元素值时,如何查找 XML 字符串中的行号?

java - Java方法参数中的 "int..."是什么?

java - Java 的 "next generation plugin"是什么?

java - Eclipse 用户库将现有 jar 报告为 'missing'

c# - 在 Transform 上简化 foreach