【问题标题】:OpenGL vertices array initialisationOpenGL顶点数组初始化
【发布时间】:2018-10-15 16:16:10
【问题描述】:

我有一个关于 OpenGL 3.0 的问题,为什么当我的顶点数组初始化为时我无法绘制任何东西

float * vertices;
int size = 100; // size of the vertices array
float * vertices = (float *) malloc (size*sizeof(float));

我已分配内存,并将数组中的所有值初始化为 0.0,但看起来我的顶点缓冲区仅读取顶点数组的第一个元素。而当我像这样初始化数组时:

float vertices[size];

所有顶点都按预期读取和渲染。

这是我指定顶点缓冲区并将数据传递到缓冲区的方式:

unsigned int VBO;
glGenBuffers(1, &VBO);

glBindBuffer(GL_ARRAY_BUFFER, VBO);

glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STREAM_DRAW);

GLint posAttrib = glGetAttribLocation(ourShader.ID, "aPos");

// iterpreting data from buffer 
glVertexAttribPointer(posAttrib, 3, GL_FLOAT, GL_FALSE, 3* sizeof(float), (void*)0);
glEnableVertexAttribArray(0);

【问题讨论】:

  • 让我猜猜,因为你使用sizeof(vertices)?注意float * vertices;sizeof(vertices)返回的是指针的大小,而不是指针所指的数组的大小。
  • 你必须发布更多代码
  • @Jeka 我在原始问题中添加了更多代码。希望这有助于澄清我实际上在做什么。
  • @Noob "但是看起来我的顶点缓冲区只读取顶点数组的第一个元素" - 你如何指定 "顶点缓冲区"我>?
  • 我已将如何指定顶点缓冲区添加到我的问题中。

标签: c opengl opengl-3 vertex-buffer


【解决方案1】:

sizeof 没有按照您的预期去做。 sizeof(x)返回变量x的数据类型大小。

int size = 100; float vertices[size]; 的情况下,vertices 的数据类型为float[100]sizeof(vertices) 返回的结果与sizeof(float)*100 相同。

float * vertices;的情况下,vertices的数据类型是float*sizeof(vertices)返回指针数据类型的大小,它指向动态分配的数组,但它确实不 返回动态内存的大小,甚至是分配数组的元素数。指针的大小取决于硬件,与sizeof(void*)相同(通常为4或8)。

sizeof(float) * size 将适用于问题的两种情况:

glBufferData(GL_ARRAY_BUFFER, sizeof(float)*size, vertices, GL_STREAM_DRAW);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多