我想在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();
转换后是否可以获得顶点的位置?
最佳答案 当然.将相同的变换(平移和旋转)应用于位置矢量,该矢量保存对象的位置.结果将是变换后对象的位置.如果要将3d co-ords转换为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更完整的东西.谷歌vecmath,处理,团结. 3D是棘手的,似乎没有真正的捷径,所以只要继续尝试,你就会得到它.