我按照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。我怀疑是由于添加了摄像头视图,改变了三角形在视口外某处的位置,所以才会出现这种情况。我怎么才能解决这个问题呢?
我在不同的设备上也有类似的显示问题。你可以尝试增加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)
}