如何只关注图表的正 Y 轴部分?

How to only focus on the positive Y-axis portion of graph?

我是 OpenGL 的新手,最近根据 Android 开发者网站上的指南成功绘制了我的第一个形状。现在我试图只关注我的 OpenGL 2D 渲染图的上半部分。所以你们都知道,屏幕中间的右边是 (0,0)。但是现在我希望原点位于屏幕底部的中间,同时保持 y 轴 0.5f 值位于屏幕中间,1f 位于屏幕顶部。本质上,负 y 轴部分不在视图中。

这些是我方块的坐标:

float squareCoords[] = {
    //   x  ,   y   ,  z 
       -0.5f,  0.5f , 0.0f //top left

       -0.5f,   0f  , 0.0f //bottom left

        0.5f,   0f  , 0.0f //bottom right

        0.5f,  0.5f , 0.0f //top right

};

This is how I want the square to look on the screen

我试过使用相机聚焦视图,但它使渲染器中的视图变大(最大 y 值和 x 值增加,对象变小)class:

Matrix.setLookAtM(viewMatrix,0,0,0.5f,3,0f,0.5f,0f,0f,1.0f,0.0f)

和GLES20.glViewport有关系吗?我从在线研究中能想到的最好的方法是函数 ortho2d() 但似乎 Android Studio 不支持它。任何帮助 appreciated.Thanks!

经过反复试验找到了解决方案

在渲染器中 class onSurfaceChanged(GL10 unused, int width ,int height){ //编辑Matrix.frustumM方法,参数bottom的值应该设置为0

Matrix.frustumM(projectionMatrix,0,left,right,bottom,top,near,far)

}

应该帮助那些想要将原点位置也更改为任何其他位置的人,只需更改左、右、上、下值即可。

或参考这个计算器:Set origin to top-left corner of screen in OpenGL ES 2 其他可能的解决方案。

您可以使用Matrix.orthoM

Matrix.orthoM(
    projectionMatrix, 0,
    left, right,
    bottom, top,
    near, far
);

viewMatrix相乘,设置Matrix.setLookAtM得到View-Projection矩阵:

Matrix.multiplyMM(
    vpMatrix, 0,
    projectionMatrix, 0, viewMatrix, 0
);

然后在着色器中使用 vpMatrix

void main() {
    gl_Position = u_VpMatrix * a_Position;
}

...

int uVpMatrix = glGetUniformLocation(program, "u_VpMatrix");

...

glUniformMatrix4fv(uVpMatrix, 1, false, vpMatrix, 0);