Tôi đang tạo ứng dụng con lăn Dice cho Android. Sử dụng Kotlin, OpenGL-ES và jBullet. Tôi đã triển khai con xúc xắc. Bây giờ tôi cần phải tạo ra bức tường, bởi vì nếu không con xúc xắc sẽ lăn ra khỏi màn hình.Chuyển đổi tọa độ màn hình thành tọa độ OpenGL
Bởi vì màn hình có thể có tỷ lệ khung hình khác nhau, tôi đang cố gắng xác định vị trí cho các bức tường với glUnProject
, nhưng tôi không thể tìm ra. Tọa độ tôi nhận được không chính xác.
gl.glViewport(0,0,width,height) //Reset The Current Viewport
gl.glMatrixMode(GL10.GL_PROJECTION) //Select The Projection Matrix
gl.glLoadIdentity() //Reset The Projection Matrix
//Calculate The Aspect Ratio Of The Window
GLU.gluPerspective(gl, 35.0f, width.toFloat()/height.toFloat(), 0.1f, 100.0f)
GLU.gluLookAt(gl,
0.0f, 30.0f, 0.0f, //Pos
0.0f, 0.0f, 0.0f, //Look at
0.0f, 0.0f, 1.0f //Up
);
gl.glMatrixMode(GL10.GL_MODELVIEW) //Select The Modelview Matrix
gl.glLoadIdentity() //Reset The Modelview Matrix
// Get matrices
gl.glGetFloatv(GL11.GL_PROJECTION_MATRIX, glProjectionMatrix,0)
gl.glGetFloatv(GL11.GL_MODELVIEW_MATRIX, glModelMatrix,0)
gl.glGetIntegerv(GL11.GL_VIEWPORT, glViewPort,0)
// Allocate matrices
var modelMatrix = glModelMatrix
var projMatrix = glProjectionMatrix
var view = glViewPort
// Pre allocate wall positions
var wallDown = FloatArray(4)
// The needed point
var wallDownP = Vector3f(view[2].toFloat(), view[3].toFloat(), 0.2888888f)
GLU.gluUnProject(wallDownP.x, wallDownP.y, wallDownP.z, modelMatrix, 0, projMatrix, 0, view, 0, wallDown, 0)
Bạn nhận được 0.2888888f ở đâu? – 246tNt
Nếu bạn muốn các bức tường, tại sao bạn chia viewport thành 2? Và bởi tường bạn có thể có nghĩa là các mặt của máy ảnh của bạn xem? – Spidfire