我想在 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/