C2 Hello_Triangle.c

C2 Hello_Triangle.c

加载顶点和片段shader

   // Load the vertex/fragment shaders
   vertexShader = LoadShader ( GL_VERTEX_SHADER, vShaderStr );
   fragmentShader = LoadShader ( GL_FRAGMENT_SHADER, fShaderStr );
  • shader的内容是
   char vShaderStr[] =
      "#version 300 es                          \n"
      "layout(location = 0) in vec4 vPosition;  \n"
      "void main()                              \n"
      "{                                        \n"
      "   gl_Position = vPosition;              \n"
      "}                                        \n";

 

  • 输出一个vec4的片段, 片段颜色三1.0 0.0 0.0 1.0
  • 输入一个vec4的位置 作为顶点着色
    • 官方解释:
  • 名字为vPosition 的 四分量向量
  • layout(location = 0) 变量的位置是顶点属性0
  • gl_Position 是特殊的输出变量,每个顶点着色器必须在gl_Position变量中输出一个位置
  char fShaderStr[] =
      "#version 300 es                              \n"
      "precision mediump float;                     \n"
      "out vec4 fragColor;                          \n"
      "void main()                                  \n"
      "{                                            \n"
      "   fragColor = vec4 ( 1.0, 0.0, 0.0, 1.0 );  \n"
      "}                                            \n";
  • 输出fragColor 是一个4分量的向量
  • 写入这个变量的值将会输出颜色缓冲区
  • 所有片段着色器的输出都是红色

加载几何形状

  • 三角形的顶点由vVertices 中3个坐标 制定
   // Load the vertex data  vVertices顶点数据 加载到GL 中
   glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, vVertices );
  • 顶点数据果然是3维的

   GLfloat vVertices[] = {  0.0f,  0.5f, 0.0f,
                            -0.5f, -0.5f, 0.0f,
                            0.5f, -0.5f, 0.0f
                         };
 glEnableVertexAttribArray ( 0 );

   glDrawArrays ( GL_TRIANGLES, 0, 3 );               
  • glEnableVertexAttribArray ( 0 ); 连接到顶点着色器声明的vPosition属性,与输入属性位置0绑定,glEnableVertexAttribArray ( 0 ) 就将数据加载到位置属性0 
    

绘制图元

   glDrawArrays ( GL_TRIANGLES, 0, 3 );            

你可能感兴趣的:(GL/CV/GLES/YUV)