使用纹理进行基本的openframeWorks着色器编程
Basic openframeWorks shader programming with textures
我目前正试图使用着色器来修改我的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/中实际上有很多着色器示例
相关文章:
- 如何在 macOS 上将 openFrameworks 构建为分片库
- 如何呈现 openFrameworks 应用程序以在浏览器上托管
- 在 openFrameworks 上设置图像的透明度
- Disparity Map Map Post Processing在OpenFrameworks中处理
- 在openFrameworks中,是否可以在使用ofxPiMapper时更改我的fbo源的不透明度
- 从OpenFrameworks OpenCV中的数组中获取凸出点
- dlib在VS2015中使用OpenFrameWorks模板
- 用图像或视频在OpenCV(OpenFrameWorks)中填充Blobs
- 我可以在OpenFrameWorks中调用应用程序以外的其他内容
- OpenFrameworks-如何进出视频
- OpenFrameWorks,带有OpenCV,VS2013设置
- 使用纹理进行基本的openframeWorks着色器编程
- 声明一个字符串数组并查找其中的元素数量(openFrameworks)
- Openframeworks-通过OpenGL调用从图像中心旋转图像
- OpenFrameworks中的透明背景窗口
- 在Raspberry Pi上运行OSX openFrameworks项目的最简单方法是什么?
- 在OpenFrameworks项目上使用Kinect SDK时出现了很多错误
- openFrameworks:如何允许两个事件键同时发生
- 监视C++OpenFrameworks应用程序是否冻结或内存泄漏,然后强制退出并重新启动
- 如何在OpenFrameworks中绘制CvConnectedComp