添加IBO

时间:2018-11-15 16:20:58

标签: c opengl glfw opengl-4

当我只有VBO和VAO时,一切正常,但添加IBO时却出现黑屏。这是代码:

初始化:

GLuint vbo = 0;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);

GLuint  ibo;
glGenBuffers(1, &ibo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

GLuint vao = 0;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo);

glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float), NULL);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBindVertexArray(0);

内部循环:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(shader_programme);
glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, 14, GL_UNSIGNED_INT, NULL);
glBindVertexArray(0);

顶点和索引:

float   points[] = {
    -1.0, -1.0,  1.0,
    1.0, -1.0,  1.0,
    -1.0,  1.0,  1.0,
    1.0,  1.0,  1.0,
    -1.0, -1.0, -1.0,
    1.0, -1.0, -1.0,
    -1.0,  1.0, -1.0,
    1.0,  1.0, -1.0,
};

float   indices[] = {
    0, 1, 2, 3, 7, 1, 5, 4, 7, 6, 2, 4, 0, 1
};

1 个答案:

答案 0 :(得分:1)

glVertexAttribPointer的第五个参数是连续的通用顶点属性之间的字节偏移。如果为0,则将顶点属性理解为紧密包装。

您的顶点由bucket, key = cursor.output_location.strip('s3://').split('/', 1) session = boto3.session.Session(aws_access_key_id=YOUR_AWS_KEY, aws_secret_access_key=YOUR_AWS_SECRET, region_name=YOUR_REGION_NAME) result = session.resource('s3').Object(bucket, key) 类型的三个分量组成,因此步幅float

3*sizeof(float)

由于顶点紧密排列,因此您也可以将0传递给参数:

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(float), NULL);

索引的类型为glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL); 。索引数组的类型必须是与GL_UNSIGNED_INT相对应的整数数据类型。您的情况必须为GL_UNSIGNED_INT

unsigned int

此外,基本类型GL_TRIANGLES由一个索引列表组成,其中每个索引3组成一个三角形。 ma三角形的索引0、1、2,下一个三角形的索引4、5、6等。因此索引数必须除以3。

如果要绘制立方体,则索引列表可能如下所示:

unsigned int indices[] = { .... }; 

unsigned int indices[] = {
    0,1,2,    0,2,3,
    1,5,6,    1,6,2,
    5,4,7,    5,7,6,
    4,0,3,    4,3,7,
    3,2,6,    3,6,7,
    1,0,4,    1,4,5 
};