相关疑难解决方法(0)

为什么这个OpenGL着色器使用超过1.0的纹理坐标?

我正在尝试熟悉opengl中的着色器.这是我找到的一些示例代码(使用openframeworks).代码只是在两次通过中模糊图像,首先是水平,然后是垂直.这是水平着色器的代码.我唯一的困惑是纹理坐标.他们超过1.

void main( void )
{
    vec2 st = gl_TexCoord[0].st;
    //horizontal blur
    //from http://www.gamerendering.com/2008/10/11/gaussian-blur-filter-shader/

    vec4 color;

    color += 1.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -4.0, 0));
    color += 2.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -3.0, 0));
    color += 3.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -2.0, 0));
    color += 4.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -1.0, 0));

    color += 5.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt , 0));

    color += 4.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * 1.0, …
Run Code Online (Sandbox Code Playgroud)

opengl shader glsl

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

为什么我无法将此纹理均匀附加到我的GLSL片段着色器?

在我的Mac应用程序中,我根据附加相机的YUV 4:2:2数据定义矩形纹理.使用标准顶点和纹理坐标,我可以将它绘制到屏幕上的矩形区域,没有任何问题.

但是,我想使用GLSL片段着色器在GPU上处理这些图像帧,并且无法将矩形视频纹理作为一个统一体传递给片段着色器.当我尝试这样做时,纹理只读为黑色.

着色器程序编译,链接和传递验证.我从着色器程序中收到了制服的正确地址.其他制服(如浮点值)正确传入,片段着色器响应这些值的变化.片段着色器接收正确的纹理坐标.我还使用glGetError()自由地散布了我的代码,并且在任何地方都没有看到任何错误.

顶点着色器如下:

void main()
{
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

    gl_FrontColor = gl_Color;
    gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
}
Run Code Online (Sandbox Code Playgroud)

片段着色器如下:

uniform sampler2D videoFrame;

void main()
{
    gl_FragColor = texture2D(videoFrame, gl_TexCoord[0].st);
}
Run Code Online (Sandbox Code Playgroud)

这应该只是在我的矩形几何体上显示纹理.

相关的图纸代码如下:

static const GLfloat squareVertices[] = {
    -1.0f, -1.0f,
    1.0f, -1.0f,
    -1.0f,  1.0f,
    1.0f,  1.0f,
};

const GLfloat textureVertices[] = {
    0.0, videoImageSize.height,
    videoImageSize.width, videoImageSize.height,
    0.0, 0.0,
    videoImageSize.width, 0.0
};

CGLSetCurrentContext(glContext);

if(!readyToDraw)
{
    [self initGL];
    readyToDraw = YES;
}


glViewport(0, 0, (GLfloat)self.bounds.size.width, (GLfloat)self.bounds.size.height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity(); …
Run Code Online (Sandbox Code Playgroud)

opengl macos glsl

3
推荐指数
1
解决办法
1860
查看次数

标签 统计

glsl ×2

opengl ×2

macos ×1

shader ×1