OpenGL 라이브러리를 사용하여 3D Android 게임을 만들려고합니다. 내가 말할 수있는 것부터 안드로이드 플랫폼 (또는 OpenGL)은 카메라 객체를 제공하지 않기 때문에 스스로 만들었습니다. 나는 그 화면에 그려진 사각형을 만들 수 있었다. 나는 또한 카메라를 문제없이 3 방향으로 모두 움직이게 만들었다. 제가 가지고있는 문제는 x 또는 y 축에서 카메라를 돌리면 사각형이 매우 이상하게 표시됩니다. 그것은 그 관점을 왜곡 한 것처럼 보입니다. 여기 원점Android의 OpenGL에서 카메라의 순방향 벡터가 이상한 결과를 내고 있습니다.
카메라가 기대 일부 사진입니다 : 위치 [0,0,0.55f, 앞으로 [0, 0, -1]까지 [0,1,0]
카메라가 오른쪽으로 이동 : 위치 [3,0,0.55f, 앞으로 [0, 0, -1]까지 [0,1,0]
카메라가 약간 오른쪽으로 설정 : 위치 [0,0,0.55f], 전달 [0.05f, 0, -1], 위쪽 [0,1,0]
어디서 문제가 발생하는지 잘 모르겠습니다. 다음은 정사각형의 꼭지점입니다.
static float vertices[] = {
// Front face (CC order)
-1.0f, 1.0f, 1.0f, // top left
-1.0f, -1.0f, 1.0f, // bottom left
1.0f, -1.0f, 1.0f, // bottom right
1.0f, 1.0f, 1.0f, // top right
};
내가 읽은 바로는 행렬 곱셈의 순서가 정확합니다. 나는 버텍스 쉐이더로 행렬을 전달하고 거기에 곱셈을 수행
private final String vertexShaderCode =
"uniform mat4 uVMatrix;" +
"uniform mat4 uMMatrix;" +
"uniform mat4 uPMatrix;" +
"attribute vec4 aVertexPosition;" + // passed in
"attribute vec4 aVertexColor;" +
"varying vec4 vColor;" +
"void main() {" +
" gl_Position = uPMatrix * uVMatrix * uMMatrix * aVertexPosition;" +
" vColor = aVertexColor;" + // pass the vertex's color to the pixel shader
"}";
모델 매트릭스 그냥 원점을 이동하고 1을 확장한다 :
Matrix.setIdentityM(ModelMatrix, 0);
Matrix.translateM(ModelMatrix, 0, 0, 0, 0);
Matrix.scaleM(ModelMatrix, 0, 1, 1, 1);
을 나는 업데이트 내 카메라 객체를 사용하여 보기 매트릭스 :
float ratio = width/(float) height;
Matrix.frustumM(ProjectionMatrix, 0, -ratio, ratio, -1, 1, 0.01f, 10000f);
01 : 여기
Matrix.setLookAtM(ViewMatrix, 0,
position.x, position.y, position.z,
position.x + forward.x, position.y + forward.y, position.z + forward.z,
up.x, up.y, up.z);
내 ProjectionMatrix입니다
무엇이 누락 되었습니까?
정점 배열은 vec3이고 쉐이더는 vec4입니다. Android 튜토리얼을 따르고 3D에서 모양을 회전하면 문제가 없으므로 그 자체가 문제가되는 사각형이라고 생각하지 않습니다 – robev
As 튜토리얼은 3D 게임을 할 때 frustumM을 사용한다고 말했고, 이것들은 그것을 제공하는 매개 변수입니다. perspectiveM을 테스트 할 것입니다.하지만 아무것도 변경하지 않을 것이라고 생각합니다. – robev
perspectiveM이 작동했습니다. t 절두체? https://developer.android.com/training/graphics/opengl/projection.html 사용을 말합니다 ... – robev