浮点指针的怪异行为

时间:2019-01-15 15:07:29

标签: c++ opengl

我有这种方法

void RectangleRenderer::renderRectangle()
{
    glGenBuffers(1, &VBO);
    unsigned int verticesSize = 48;
    float* vertices = this->createVertices(centerPosition, 0.5);

    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, verticesSize, vertices, GL_STATIC_DRAW);
}

createVertices方法当前看起来像这样

float * RectangleRenderer::createVertices(const glm::vec3 centerPosition, const float rectangleSize) const
{
    float verticesArray[12] = {
     0.5f,  0.5f, 0.0f,  
     0.5f, -0.5f, 0.0f, 
    -0.5f, -0.5f, 0.0f,  
    -0.5f,  0.5f, 0.0f 
    };
    return &verticesArray[0];
}

此代码不呈现任何内容,我也不知道为什么。测试时,我意识到,如果将renderRectangle方法更改为以下

void RectangleRenderer::renderRectangle()
{
    glGenBuffers(1, &VBO);
    unsigned int verticesSize = 48;
    float verticesArray[12] = {
     0.5f,  0.5f, 0.0f, 
     0.5f, -0.5f, 0.0f,  
    -0.5f, -0.5f, 0.0f,  
    -0.5f,  0.5f, 0.0f  
    };
    float* vertices = &verticesArray[0];

    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, verticesSize, vertices, GL_STATIC_DRAW);
}

然后,代码可以完美地工作并具有所需的结果,在这种情况下,该结果是呈现矩形。

我想念什么吗?为什么第二个版本的renderRectangle起作用,而不是第一个版本?

0 个答案:

没有答案