【发布时间】:2014-03-05 16:13:13
【问题描述】:
我正在学习 OpenGL ES 2.0 for Android 的“OpenGL ES 2 for Android”一书,作者 Kevin 兄弟。通过其他一些文献,我能够学习 OpenGL,但在我的路上我有一些疑问。
第一个问题
在我学习 OpenGL 1.0 的时候,有一个函数“GLU.glLookAT”来设置相机的视图。 OpenGL 2.0 上有类似的功能吗? 我知道“w”组件、正交投影和透视投影,但我发现 "GLU.glLookAt" 对我的学习非常有帮助,以至于我想知道 2.0 上是否有类似的东西。
第二个问题
在处理不同的颜色时,我得到了下面的代码(总结):
vertexShaderCode = "attribute vec4 a_Position; " +
"attribute vec4 a_Color; " +
"varying vec4 v_Color; " +
"void main(){ " +
" v_Color = a_Color; " +
" gl_Position = a_Position;" +
"}"
fragmentShaderCode = "precision mediump float; " +
"varying vec4 v_Color; " +
"void main(){ " +
" gl_FragColor = v_Color;" +
"}"
... (some code) ...
int a_Position = GLES20.glGetAttribLocation(myShaderProgram, "a_Position");
int a_Color = GLES20.glGetAttribLocation(myShaderProgram, "a_Color");
GLES20.glEnableVertexAttribArray(a_Position);
GLES20.glEnableVertexAttribArray(a_Color);
GLES20.glVertexAttribPointer(a_Position, etc)
GLES20.glVertexAttribPointer(a_Color, etc)
GLES20.glDrawArrays(GL_TRIANGLES, 0, 3);
我想说的是,我告诉属性“a_Position”和“a_color”他们应该在哪里以及如何获取他们的信息,但是“v_Color”呢?
我从这段代码中了解到,片段着色器正在从顶点着色器接收信息,因为在那里创建了不同的“v_Color”,但我认为着色器之间没有串扰。后台到底是怎么回事?
此外,“a_Color”只是作为“中间”属性存在。没有类似的功能:
GLES20.glVertexVaryinLocation(...)
【问题讨论】: