小编Woo*_*ter的帖子

GLM mat4x4到布局限定符

我目前正在学习OpenGL作为一个爱好项目,我已经达到了我想用实例化做一些粒子效果的地步.

为了给我的每个粒子提供自己的变换,我正在构建一个带有变换矩阵的向量并使用缓冲区的值:

    glBindBuffer(GL_ARRAY_BUFFER, particleEffect->getTransformationBufferID());
    std::vector<glm::mat4x4> particleTransformations;
    const std::vector<Particle>& particles = particleEffect->getParticles();
    for(std::vector<Particle>::const_iterator particleIt = particles.cbegin();
        particleIt != particles.cend();
        ++ particleIt)
    {
        particleTransformations.push_back(particleIt->getTransformation());
    }
    glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(particleTransformations[0]) * particles.size(),  particleTransformations.data());
    glEnableVertexAttribArray(4);
    glVertexAttribPointer(4, 16, GL_FLOAT, GL_FALSE, 0, 0);
Run Code Online (Sandbox Code Playgroud)

我正在以这种方式初始化我的转换缓冲区:

        glGenBuffers(1, &transformationBufferID_);
        glBindBuffer(GL_ARRAY_BUFFER, transformationBufferID_);
        glBufferData(GL_ARRAY_BUFFER, sizeof(glm::mat4x4) * particles_.size(), nullptr, GL_STREAM_DRAW);
Run Code Online (Sandbox Code Playgroud)

我使用这个简单的绘图代码:

    glVertexAttribDivisor(0, 0);
    glVertexAttribDivisor(1, 0);
    glVertexAttribDivisor(2, 0);
    glVertexAttribDivisor(3, 0);
    glVertexAttribDivisor(4, 1); //(4, 1), because each particle has its own transformation matrix at (layout location = 4)?!
    glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, particleEffect->getVertices().size(), particleEffect->getParticles().size());//getVertices() are the same …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glsl glm-math

2
推荐指数
1
解决办法
563
查看次数

标签 统计

c++ ×1

glm-math ×1

glsl ×1

opengl ×1