zoukankan      html  css  js  c++  java
  • glVertexAttribPointer

    glVertexAttribPointer的详细用法,参考 http://docs.gl/gl4/glVertexAttribPointer

    这篇文章做一下简单的记录:

    先按照我自己的理解,做一下说明:

    attribute:  position, UV坐标,Color等属性。
    vertex:     一组 attribute

    函数声明:

    void glVertexAttribPointer(GLuint index,          // typedef unsigned int GLuint;
                    GLint size,      // typedef int GLint;
                    GLenum type,       // typedef unsigned int GLenum;
                    GLboolean normalized, // typedef unsigned char GLboolean;
                    GLsizei stride,      // typedef int GLsizei;
                    const GLvoid * pointer); // typedef void GLvoid;

    index: 对应顶点着色器的 layout(localtion = 0)

    size:  attribute 的大小, 例如,GL_BGRA是4。 position(x, y) 是2。

    type: 初始值是 GL_FLOAT

    normalized: GL_TRUE时保存的数据 int会映射到[-1,1],unsigned int会映射到[0, 1]。(byte好像会映射到[0, 255]) 。 GL_FLOAT时会直接使用float的数据。

    stride: 一组vertex的大小(连续的attribute组之间的间隔)

    pointer: 这个参数的类型是void*, 要获取数据的偏移(attribute的偏移)。例如 vertex的内容为: position, color,UV. 这个时候如果想获取color, 则需要跳过 position的大小。

    相关的程序代码:

    // position,          color,       uv坐标
    float
    data[] = { -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f }; unsigned int buffer; glGenBuffers(1, &buffer); glBindBuffer(GL_ARRAY_BUFFER, buffer); glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(float), positions, GL_STATIC_DRAW);
    //position glEnableVertexAttribArray(
    0); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 7, 0);

    //color
    glEnableVertexAttribArray(1);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 7, (GLvoid*) 2 * sizeof(float));

    //uv
    glEnableVertexAttribArray(1);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 7, (GLvoid*) 5 * sizeof(float));
  • 相关阅读:
    URAL 2067 Friends and Berries (推理,数学)
    URAL 2070 Interesting Numbers (找规律)
    URAL 2073 Log Files (模拟)
    URAL 2069 Hard Rock (最短路)
    URAL 2068 Game of Nuts (博弈)
    URAL 2066 Simple Expression (水题,暴力)
    URAL 2065 Different Sums (找规律)
    UVa 1640 The Counting Problem (数学,区间计数)
    UVa 1630 Folding (区间DP)
    UVa 1629 Cake slicing (记忆化搜索)
  • 原文地址:https://www.cnblogs.com/weishuan/p/12927198.html
Copyright © 2011-2022 走看看