【问题标题】:OpenGL ES 2.0 specifiying position attribute vec3 or vec4OpenGL ES 2.0 指定位置属性 vec3 或 vec4
【发布时间】:2012-01-23 00:41:16
【问题描述】:

在 OpenGL ES 2.0 介绍中,可在此处找到:http://www.webreference.com/programming/opengl_es/2.html 定义了一个顶点着色器:

GLbyte vShaderStr[] =
   "attribute vec4 vPosition;   \n"
   "void main()                 \n"
   "{                           \n"
   "   gl_Position = vPosition; \n"
   "};                          \n";

vPosition 属性是一个四分量向量。

稍后在文本中,应用程序将编译顶点着色器以及片段着色器。 使用 glBindAttribLocation 建立将应用程序顶点数据传递给着色器的句柄:

// Bind vPosition to attribute 0
glBindAttribLocation(programObject, 0, "vPosition");

这 2 个着色器现在已链接,程序可以使用了。

用例是这样的:

GLfloat vVertices[] = {0.0f, 0.5f, 0.0f,
                        -0.5f, -0.5f, 0.0f,
                        0.5f, -0.5f, 0.0f};
...
// Load the vertex data
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 3);

这意味着:

  • glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices): 将顶点数据传给程序,使用位置0,每个顶点有3个分量,类型为float,不用归一化。

  • glEnableVertexAttribArray(0): 着色器将使用传递的数据。

  • glDrawArrays(GL_TRIANGLES, 0, 3);: 着色器将执行代码以绘制单个三角形,使用在指定数组中找到的前(也是唯一的)三个顶点。

我的问题是:

  • 顶点着色器需要一个四分量顶点位置 (x,y,z,w),程序只传递三分量 (x,y,z) 数据 为什么会这样?

  • 着色器需要 vec4,w 分量必须为 1 才能按预期工作。 哪个步骤负责正确添加 w 组件?

【问题讨论】:

    标签: android iphone opengl-es-2.0 shader


    【解决方案1】:

    看到这个答案:Can you use glVertexAttribPointer to assign a smaller vector to a larger one?

    正如该帖子中提到的,它出现在 gles 规范中:http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.24.pdf
    在本文档的第 2.8 节中它说:

    当数组元素 i 被 DrawArrays 或 DrawElements 命令,每个通用属性扩展为四个 成分。如果 size 为 1,则属性的 x 分量为 由数组指定; y、z 和 w 分量是隐式设置的 分别为零、零和一。如果大小为 2,则 x 和 y 属性的组件由数组指定; z 和 w 组件分别隐式设置为零和一。如果尺寸 为三,然后指定 x、y 和 z,并且 w 隐式设置为 一。如果 size 为 4,则指定所有组件。

    【讨论】:

    • 嗨 Jave - 感谢您的回答和链接。事情越来越清楚了。
    • @Gisela 如果答案解决了您的问题,那么accepting 是正确的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多