小编Ora*_*don的帖子

glsl - 片段着色器(模糊) - >黑屏

我一直试图让这个工作过去几天,我真的开始变得绝望了.我真的很感激你的建议.

我一直在努力做的事情:

  • 将场景渲染给FBO
  • 使用glsl着色器模糊附加的纹理
  • 将生成的纹理渲染到屏幕对齐的四边形

问题:

如果我启用片段着色器(水平模糊),我会得到一个模糊的图像渲染到我的四边形第一帧左右,之后它全部变黑.

我怀疑我将纹理传递给着色器的方式有问题:

    horizontalBlurVertex.enable();

    horizontalBlurFragment.enable();

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, fboTexture);
    glUniform1i(glGetUniformLocation(horizontalBlurFragment.program, "RTScene"), 0);
Run Code Online (Sandbox Code Playgroud)

编辑: 另外一条信息:如果我删除glUniform1i(glGetUniformLocation(horizo​​ntalBlurFragment.program,"RTScene"),0); 我得到完全相同的结果.我猜这表明我的着色器从未获得任何纹理数据.

来源:

顶点着色器:

varying vec2 vTexCoord;

void main(void)
{
   gl_FrontColor = gl_Color;
   gl_Position = ftransform();

   vec2 Pos;
   Pos = sign(gl_Vertex.xy);

   gl_Position = vec4(Pos, 0.0, 1.0);

   vTexCoord = Pos * 0.5 + 0.5;
}
Run Code Online (Sandbox Code Playgroud)

片段着色器:

uniform sampler2D RTScene;
varying vec2 vTexCoord;

const float blurSize = 1.0/800.0;
const float weightSum = 70.0 + 2.0 * (1.0 + 8.0 + 28.0 + 56.0);

void main(void) …
Run Code Online (Sandbox Code Playgroud)

c++ opengl openframeworks fragment-shader

5
推荐指数
1
解决办法
3347
查看次数

openGL/GLSL:bloom/blur,渲染到FBO

我已经达到了另一个似乎无法自己解决的僵局.我真的希望有人可以帮助我.

我一直试图用GLSL创造一个漂亮的小绽放效果,效果很好.当我尝试将一些东西搬进我的场景时,我注意到在渲染之前我忘了清除我的FBO.

没有清除它工作从不改变场景,因为我总是使用相同的纹理.用glClear(); 命令它仍然有效,但对于第一帧,我得到的只是一个黑屏.所以我想我的问题是我不能让我的FBO每一帧都不断更新.

我觉得我要么缺少一些非常明显的东西,要么做一些可怕的错误.

我会感谢您提出的任何建议.

这是第一帧的结果: 在此输入图像描述

来源:( 使用openFrameworks)

建立:

void testApp::setup(){

ofSetVerticalSync(true);
ofDisableSetupScreen();

width = ofGetWidth();
height = ofGetHeight();

//complie/link/generate ShaderObjects ....
horizontalBlurFrag.load("/opt/openframeworks/apps/examples/FBO_basic_shader_new_continued_v4_2/bin/data/fragment_shader_horizontal.glsl", GL_FRAGMENT_SHADER);
verticalBlurFrag.load("/opt/openframeworks/apps/examples/FBO_basic_shader_new_continued_v4_2/bin/data/fragment_shader_vertical.glsl", GL_FRAGMENT_SHADER);
BlurVertex.load("/opt/openframeworks/apps/examples/FBO_basic_shader_new_continued_v4_2/bin/data/horizontal_blur.glsl", GL_VERTEX_SHADER);
blendTextures.load("/opt/openframeworks/apps/examples/FBO_basic_shader_new_continued_v4_2/bin/data/blend_shader.glsl", GL_FRAGMENT_SHADER);

fboOriginal.initialize(width, height);
fboH800.initialize(width, height);
fboV800.initialize(width, height);
fboH400.initialize(width, height);
fboV400.initialize(width, height);}
Run Code Online (Sandbox Code Playgroud)

画:

void testApp::draw(){
glMatrixMode( GL_PROJECTION );
glLoadIdentity();

//set orthographic projection
glOrtho( -1, 1, -1, 1, 1.0, 40.0 );

glMatrixMode( GL_MODELVIEW );
glLoadIdentity();

glViewport( 0, 0, width, height);

glDisable(GL_TEXTURE_2D);

fboOriginal.bind();

    glClearColor(0.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushAttrib(GL_VIEWPORT_BIT);
        glViewport(0, 0, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl shader fbo blur

5
推荐指数
1
解决办法
5974
查看次数

标签 统计

c++ ×2

opengl ×2

blur ×1

fbo ×1

fragment-shader ×1

openframeworks ×1

shader ×1