Android OpenGL ES,形状在设备上不显示,但在模拟器上工作正常?

问题描述 投票:0回答:1

我按照android团队的教程,演示了如何使用OpenGL创建简单的三角形。下面是一个 联系 的教程。在安卓设备和模拟器上的一切工作都很好,直到我得到的部分与应用 投影.

一旦我改变了字符串 vertexShaderCode 到。

private val vertexShaderCode =
        "uniform mat4 uMVPMatrix;" +
        "attribute vec4 vPosition;" +
        "void main() {" +
        "  gl_Position = uMVPMatrix * vPosition;" +
        "}"

三角形不显示在我的安卓设备上,这是华为Y2与Android 6.0(API 23)和SONY与Android 4.4.4。我怀疑是由于添加了摄像头视图,改变了三角形在视口外某处的位置,所以才会出现这种情况。我怎么才能解决这个问题呢?

android opengl-es
1个回答
2
投票

我在不同的设备上也有类似的显示问题。你可以尝试增加frustumM()方法中'far'的值。

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

增加这个参数的值就解决了我的问题。

一般来说,对于frustum来说,你可以使用不同的参数值来处理纵向和横向的方向,比如。

protected val aspect = widthScreen.toFloat() / heightScreen.toFloat()
...
private fun setPerspectiveProjection() {
    var left = -1.0f; var right = 1.0f
    var bottom = -1.0f; var top = 1.0f
    val near = 1.0f; val far = 145.0f
    if (widthScreen < heightScreen) { // portrait orientation 
        bottom /= aspect
        top /= aspect
    } else { // landscape orientation
        left *= aspect
        right *= aspect
    }
    Matrix.frustumM(projectionMatrix, 0, left, right, bottom, top, near, far)
}
© www.soinside.com 2019 - 2024. All rights reserved.