コード例 #1
0
void LightNode::lightPass(std::stack<QMatrix4x4> &MVStack, SceneGraph *root) {
    QOpenGLShaderProgram *shader = Shaders::storeDepthProgram;
    Shaders::bind(shader);

    glBindFramebuffer(GL_FRAMEBUFFER, shadowFBO());

    GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT1};
    glDrawBuffers(1, DrawBuffers);

    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glViewport(0,0, shadowWidth(), shadowHeight());

    MVStack.push(MVStack.top());
    MVStack.top() *= lightView();

    root->drawGeometry(MVStack
                       , lightView()
                       , perspectiveMatrix()
                       , shader);

    MVStack.pop();

    //Recreate the mipmaps
    glBindTexture(GL_TEXTURE_2D, shadowMoments());
    glGenerateMipmap(GL_TEXTURE_2D);

    //Release and relax, brah
    glBindFramebuffer(GL_FRAMEBUFFER, 0);

    Shaders::release(shader);
}
コード例 #2
0
ファイル: VolumeModel.cpp プロジェクト: walk1ndude/visualizer
    void VolumeModel::bindUniformValues(QOpenGLShaderProgram * program, const Viewport::Viewport * viewport) const {
        program->setUniformValue(uniformValues["view"], view(viewport));
        program->setUniformValue(uniformValues["model"], model(viewport));
        program->setUniformValue(uniformValues["projection"], projection(viewport));
        
        program->setUniformValue(uniformValues["lightView"], lightView(viewport));

        program->setUniformValue(uniformValues["scale"], scaleMatrix());
        program->setUniformValue(uniformValues["eye"], QVector4D(viewport->eye()));

        program->setUniformValue(uniformValues["modelBillboard"], viewport->modelBillboard());

        program->setUniformValue(uniformValues["slope"], _slope);
        program->setUniformValue(uniformValues["intercept"], _intercept);

        program->setUniformValue(uniformValues["windowCenter"], _windowCenter);
        program->setUniformValue(uniformValues["windowWidth"], _windowWidth);

        program->setUniformValue(uniformValues["huRange"], _huRange);
        program->setUniformValue(uniformValues["valueRange"], _valueRange);
    }