使用纹理进行基本的openframeWorks着色器编程

Basic openframeWorks shader programming with textures

本文关键字:openframeWorks 编程 纹理      更新时间:2023-10-16

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

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

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

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

片段着色器:

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;
}

App.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项目世界(一些沙盒)中使用这些。

任何关于如何开始的技巧,也许能帮助我更多地理解我做错了什么,都会有所帮助!

谢谢!

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

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

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