저는 Android 용 Dice 롤러 앱을 만들고 있습니다. Kotlin, OpenGL-ES 및 jBullet 사용. 나는 주사위를 구현했습니다. 이제는 벽을 만들어야합니다. 그렇지 않으면 화면에서 주사위가 굴러 나오기 때문입니다.화면 좌표를 OpenGL 좌표로 변환
화면의 가로 세로 비율이 다를 수 있으므로 glUnProject
으로 벽의 위치를 결정하려고하지만이를 이해할 수 없습니다. 받은 좌표가 올바르지 않습니다.
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)
어디에서 0.2888888f를 얻었습니까? – 246tNt
벽을 원하면 왜 뷰포트를 2로 나눕니까? 그리고 벽으로 볼 때 카메라 뷰의 측면을 의미할까요? – Spidfire