Android OpenGL ES,形状不显示在设备上,但在模拟器上工作良好



我已经学习了android团队的教程,展示了如何使用OpenGL创建简单的三角形。这是教程的链接。在我开始应用投影之前,android设备和模拟器上的一切都很好。

一旦我将字符串vertexShaderCode更改为:

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

三角形没有显示在我的安卓设备上,这些设备是安卓6.0的华为Y2(API 23(和安卓4.4.4的索尼。如果知道为什么会发生这种情况,我怀疑添加摄影机视图会以某种方式改变视口外三角形的位置。我该怎么修?

我在不同的设备上遇到了类似的显示问题。您可以尝试在截头体M((方法中增加"far"的值:

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

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

通常,对于截头体,您可以使用不同的纵向和横向参数值,如:

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)
}

最新更新