我已经开始学习用于Android的Opengl ES 2.0。我正在使用从以下站点获取的代码段: http://www.learnopengles.com/android-lesson-two-ambient-and-diffuse-lighting/ 这是一个有4个数字的亮点:
private final float[] mLightPosInModelSpace = new float[] {0.0f, 0.0f, 0.0f, 1.0f};
此亮点位于模型空间中。以下函数用于绘制具有禁用的顶点属性数组的点。
private void drawLight()
{
final int pointMVPMatrixHandle = GLES20.glGetUniformLocation(mPointProgramHandle, "u_MVPMatrix");
final int pointPositionHandle = GLES20.glGetAttribLocation(mPointProgramHandle, "a_Position");
// Pass in the position.
GLES20.glVertexAttrib3f(pointPositionHandle, mLightPosInModelSpace[0], mLightPosInModelSpace[1], mLightPosInModelSpace[2]);
// Since we are not using a buffer object, disable vertex arrays for this attribute.
GLES20.glDisableVertexAttribArray(pointPositionHandle);
// Pass in the transformation matrix.
Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, mLightModelMatrix, 0);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0);
GLES20.glUniformMatrix4fv(pointMVPMatrixHandle, 1, false, mMVPMatrix, 0);
// Draw the point.
GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 1);
}
我从这里阅读文档:https://www.khronos.org/opengles/sdk/docs/man/xhtml/glEnableVertexAttribArray.xml
并看到启用顶点属性数组glDrawArrays()
后从该启用的数组中获取点。但我的问题是glDrawArrays()
获得积分的地方?在这个例子中,从mLightPosInModelSpace
开始,它可以正常工作。提前致谢。
答案 0 :(得分:1)
参见OpenGL ES 2.0规范的第2.7节," 当前顶点状态":
当前通用属性值定义a时顶点的通用属性 定义该数据的顶点数组未启用,如第2.8节所述。
当前 可以通过发出其中一个命令
随时更改值
void VertexAttrib{1234}{f}( uint index, T values );
void VertexAttrib{1234}{f}v( uint index, T values );
将给定值加载到slot索引的当前通用属性中,其中 组件名为x,y,z和w。
然后在第21页,该规范解释了他们如何拉动:
如果 未启用与顶点着色器所需的通用属性对应的数组, 然后相应的元素取自当前的通用属性 州(见第2.7节)。