OpenGL ES 2.0 Android应用程序-概念问题

OpenGL ES 2.0 Android应用程序-概念问题,android,opengl-es,Android,Opengl Es,我正在学习OpenGL ES 2.0 for Android和OpenGL ES 2 for Android的书,来自Kevin Bouraler。在其他一些文献中,我能够学习OpenGL,但在我的学习过程中,我有一些疑问 第一个问题 当我学习OpenGL 1.0时,有一个函数GLU.glLookAT来设置相机的视图。OpenGL 2.0上有类似的函数吗? 我知道w分量、ortographic和perspective projection,但我发现GLU.glLookAt对我的学习非常有帮助,我

我正在学习OpenGL ES 2.0 for Android和OpenGL ES 2 for Android的书,来自Kevin Bouraler。在其他一些文献中,我能够学习OpenGL,但在我的学习过程中,我有一些疑问

第一个问题

当我学习OpenGL 1.0时,有一个函数GLU.glLookAT来设置相机的视图。OpenGL 2.0上有类似的函数吗? 我知道w分量、ortographic和perspective projection,但我发现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_位置和a_颜色,它们应该在哪里以及如何获得信息,但是v_颜色呢

我从这段代码中了解到,片段着色器正在从顶点着色器接收信息,因为在那里创建了不同的v_颜色,但我认为着色器之间没有串扰。在后台,到底发生了什么

此外,a_颜色只是作为中间属性存在的。没有类似以下功能:

GLES20.glVertexVaryinLocation(...)
在ES2中,您必须定义自己的矩阵并将其发送到着色器。有许多方法,例如LookAt,您通常可以在一些矩阵工具中找到它们。所以,一般来说,你要寻找的是操纵矩阵的工具,通常包括平移、旋转、正交、平截头体、注视。。。 v_颜色与gl_位置非常相似这两个位置将被插值并发送到片段着色器,这不是一个串扰,因为首先顶点着色器将完成其工作,然后片段着色器将开始使从顶点着色器接收的数据过于简化,请尝试。“变化”用于将插值数据发送到片段着色器。这意味着,例如,如果要绘制一条由两个顶点定义的线,其中第一个顶点为黑色,第二个顶点为白色,则中间的所有像素都将为灰色,从而创建从黑色到白色的平滑线性渐变。对于更有用的情况,您将对纹理坐标和法线执行相同的操作,绘制一个纹理坐标从.0、.0到1.0的四边形,1.0将在片段着色器中向您发送插值坐标,以便您可以直接访问纹理,绘制正确的纹理。例如,在四元组的中间,坐标为5。5。所以GLVERTEXVALYINLOCATION是没有意义的,因为这个数据依赖于很多东西,比如你的缓冲区分辨率,一条4像素的线会产生4个唯一的颜色值,而5像素的线会产生另外5个完整的颜色值。