【问题标题】:Basic openframeWorks shader programming with textures使用纹理的基本 openframeWorks 着色器编程
【发布时间】:2016-05-13 11:07:38
【问题描述】:

我目前正在尝试使用着色器来修改我的 2d 图像以获得简单的东西,主要是教程中的东西,我想在我的项目中实现它们。

问题是,我不能使用 GLSL 版本 150,因为我们现有的一些着色器正在使用另一个版本并且它不兼容,我只是想知道是否可以只将 ahder 应用于 ofImage 或其他东西。

到目前为止我已经尝试过了,但着色器似乎并没有理解它所拥有的纹理是图像,它只是根据 ofSetColor 绘制颜色。

这是一些代码,我使用的片段和顶点着色器有点基本(我得到的虚拟代码,不知道它是否有效)

片段着色器:

uniform sampler2DRect texture0;

void main()
{
    //Getting coordinates of the current pixel in texture
    vec2 pos = gl_TexCoord[0].xy;

    //Getting the pixel color from the texture texture0 in pos
    vec4 color = texture2DRect(texture0, pos);

    //Output the color of shader
    gl_FragColor = color;
}

顶点着色器:

void main()
{
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    gl_TexCoord[0] = gl_MultiTexCoord0;
    gl_FrontColor = gl_Color;
}

ofApp.cpp:

void ofApp::setup()
{
    ofDisableArbTex();
    ofEnableDepthTest();

    m_shader.load("shaders/shaderTest");
    m_image.loadImage("sunflower.png");
}

void ofApp::draw()
{
    m_shader.begin();
    m_image.draw(0, 0);
    m_shader.end();
}

所以基本上我想知道的是如何将我的图像“传递给着色器”,这样我就可以改变简单的东西,比如它的颜色,也许还可以做一些基本的失真效果。

另外,我将在 3D 项目世界(一些沙盒)中使用这些。

任何关于如何开始的提示,也许可以帮助我更多地了解我做错了什么都会有所帮助!

谢谢!

【问题讨论】:

    标签: c++ textures glsl shader openframeworks


    【解决方案1】:

    你需要告诉着色器有关纹理的信息,比如

    shader.setUniformTexture("texture0", m_image.getTextureReference(), 1 );
    

    在文件夹 OF/examples/gl/ 中实际上有很多着色器示例

    【讨论】:

    • shader.setUniformTexture("texture0", m_image.getTextureReference(), 1 );
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多