英文:
Opengl es on android problem with object opsition on projection matrix
问题
我正在尝试使用OpenGL ES 3来显示对象。一切都正常,直到我尝试设置相机视图。当我将我的vP矩阵与相机矩阵和投影矩阵相乘时,对象就会消失。
float[] projectionMatrix = new float[16];
float[] vPMatrix = new float[16];
float[] camera = new float[16];
Matrix.frustumM(
projectionMatrix,
0,
-1,
1,
-1,
1,
3,
7
);
Matrix.setLookAtM(
camera,
0,
// 我的位置
0f,
0f,
1f,
// 我要看的位置
0f,
0f,
-1f,
// 头朝向的方向
0f,
1f,
0f
);
Matrix.multiplyMM(
vPMatrix,
0,
projectionMatrix,
0,
camera,
0
);
英文:
I trying to display object with opengl es 3. Everything works till i trying to set camera view. When I multiply my vPMatrix with camera matrix and projection matrix object just disapears.
float[] projectionMatrix = new float[16];
float[] vPMatrix = new float[16];
float[] camera = new float[16];
Matrix.frustumM(
projectionMatrix,
0,
-1,
1,
-1,
1,
3,
7
);
Matrix.setLookAtM(
camera
, 0
//where i am
, 0f
, 0f
, 1f
//what i looking for
, 0f
, 0f
, -1f
//where is top
, 0f
, 1f
, 0f
);
Matrix.multiplyMM(
vPMatrix,
0,
projectionMatrix,
0,
camera,
0
);
答案1
得分: 0
我通过以下方式将相机设置来修复了那个错误:
Matrix.setLookAtM(
camera
, 0
//我的位置
, 0f
, 0f
, 5f
//我在寻找什么
, 0f
, 0f
, 0f
//顶部在哪里
, 0f
, 1f
, 0f
);
但我不明白为什么旧版本会有问题(我寻找的是 z 轴)。如果有人能解释给我听,麻烦请发布你的回答。
英文:
I fixed that bug by setting camera as below:
Matrix.setLookAtM(
camera
, 0
//where i am
, 0f
, 0f
, 5f
//what i looking for
, 0f
, 0f
, 0f
//where is top
, 0f
, 1f
, 0f
);
but i dont understand why old version was bad (what i looking for z). If enyone can explain me this then please post youre answer.
答案2
得分: 0
大多数情况下,几何图形会被视景体的近平面剪裁掉。注意,如果几何图形不在近平面和远平面之间,则会被剪裁掉。
在设置透视投影时,您指定了到近平面的距离为3,到远平面的距离为7:
Matrix.frustumM(projectionMatrix, 0, -1, 1, -1, 1, 3, 7);
但是观察点到世界中心的距离只有1:
Matrix.setLookAtM(camera, 0, 0f, 0f, 1f, ...);
您有两个选项。要么改变观察点:
Matrix.setLookAtM(camera, 0, 0f, 0f, 5f, ...);
要么改变近平面和远平面。例如:
Matrix.frustumM(projectionMatrix, 0, -1, 1, -1, 1, 0.1, 100);
英文:
Moste likely the geometry is clipped by the near plane of the Viewing frustum. Note, if the geometry is not between the near and far plane, the geoemtry is clipped.
You specified a distance to the near plane of 3 and a distance to the far plane of 7 when setting the perspective projection:
>java
>Matrix.frustumM(projectionMatrix, 0, -1, 1, -1, 1, 3, 7);
>
But the distance of the point of view to the the center fot the worlds is just 1:
>java
>Matrix.setLookAtM(camera, 0, 0f, 0f, 1f, ...);
>
You have 2 options. Either change the point of view:
Matrix.setLookAtM(camera, 0, 0f, 0f, 5f, ...);
Or change the near and far plane. For instance:
Matrix.frustumM(projectionMatrix, 0, -1, 1, -1, 1, 0.1, 100);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论