31#include <visp3/ar/vpPanda3DCommonFilters.h>
32#include <visp3/ar/vpPanda3DRGBRenderer.h>
34#if defined(VISP_HAVE_PANDA3D)
36#include "windowFramework.h"
37#include "graphicsOutput.h"
41const std::string vpPanda3DLuminanceFilter::FRAGMENT_SHADER =
44"uniform sampler2D p3d_Texture0;\n"
45"out vec4 p3d_FragData;\n"
47" vec4 v = texture(p3d_Texture0, texcoords);\n"
48" p3d_FragData.b = 0.299 * v.r + 0.587 * v.g + 0.114 * v.b;\n"
56 FrameBufferProperties fbp;
57 fbp.set_depth_bits(0);
58 fbp.set_rgba_bits(0, 0, 8, 0);
59 fbp.set_float_color(
false);
67const std::string vpPanda3DGaussianBlur::FRAGMENT_SHADER =
70"uniform sampler2D p3d_Texture0;\n"
71"uniform vec2 dp; // 1 divided by number of pixels\n"
72"const float kernel[25] = float[25](\n"
79"const float normalize = 1 / 159.0;\n"
80"vec2 offset[25] = vec2[25](\n"
81" vec2(-2*dp.x,-2*dp.y), vec2(-dp.x,-2*dp.y), vec2(0,-2*dp.y), vec2(dp.x,-2*dp.y), vec2(2*dp.x,-2*dp.y),\n"
82" vec2(-2*dp.x,-dp.y), vec2(-dp.x, -dp.y), vec2(0.0, -dp.y), vec2(dp.x, -dp.y), vec2(2*dp.x,-dp.y),\n"
83" vec2(-2*dp.x,0.0), vec2(-dp.x, 0.0), vec2(0.0, 0.0), vec2(dp.x, 0.0), vec2(2*dp.x,0.0),\n"
84" vec2(-2*dp.x, dp.y), vec2(-dp.x, dp.y), vec2(0.0, dp.y), vec2(dp.x, dp.y), vec2(2*dp.x, dp.y),\n"
85" vec2(-2*dp.x, 2*dp.y), vec2(-dp.x, 2*dp.y), vec2(0.0, 2*dp.y), vec2(dp.x, 2*dp.y), vec2(2*dp.x, 2*dp.y)\n"
87"out vec4 p3d_FragData;\n"
90" for(int i = 0; i < 25; ++i) {\n"
91" v += kernel[i] * texture(p3d_Texture0, texcoords + offset[i]).b;\n"
93" p3d_FragData.b = v * normalize;\n"
102 FrameBufferProperties fbp;
103 fbp.set_depth_bits(0);
104 fbp.set_rgba_bits(0, 0, 8, 0);
105 fbp.set_float_color(
false);
114const std::string vpPanda3DCanny::FRAGMENT_SHADER =
116"in vec2 texcoords;\n"
117"uniform sampler2D p3d_Texture0;\n"
118"uniform vec2 dp; // 1 divided by number of pixels\n"
119"uniform float edgeThreshold;\n"
120"const float kernel[9] = float[9](\n"
125"const float kernel_h[9] = float[9](\n"
130"const float kernel_v[9] = float[9](\n"
131" -1.0, -2.0, -1.0,\n"
135"vec2 offset[9] = vec2[9](\n"
136" vec2(-dp.x, -dp.y), vec2(0.0, -dp.y), vec2(dp.x, -dp.y),\n"
137" vec2(-dp.x, 0.0), vec2(0.0, 0.0), vec2(dp.x, 0.0),\n"
138" vec2(-dp.x, dp.y), vec2(0.0, dp.y), vec2(dp.x, dp.y)\n"
140"out vec4 p3d_FragData;\n"
143" for(int i = 0; i < 9; ++i) {\n"
144" float pix = texture(p3d_Texture0, texcoords + offset[i]).b;\n"
145" sum += pix * kernel[i];\n"
147" if(abs(sum * 255.f) > edgeThreshold) {\n"
148" float sum_h = 0.f;\n"
149" float sum_v = 0.f;\n"
150" for(int i = 0; i < 9; ++i) {\n"
151" float pix = texture(p3d_Texture0, texcoords + offset[i]).b;\n"
152" sum_h += pix * kernel_h[i];\n"
153" sum_v += pix * kernel_v[i];\n"
155" vec2 orientationAndValid = sum_h * sum_h + sum_v * sum_v > 0 ? vec2(-atan(sum_v/sum_h), 1.f) : vec2(0.f, 0.f);\n"
156" p3d_FragData = vec4(sum_h, sum_v, orientationAndValid.x, orientationAndValid.y);\n"
158" p3d_FragData = vec4(0.f, 0.f, 0.f, 0.f);\n"
169 m_renderRoot.set_shader_input(
"edgeThreshold", LVector2f(m_edgeThreshold));
174 m_edgeThreshold = edgeThreshold;
175 m_renderRoot.set_shader_input(
"edgeThreshold", LVector2f(m_edgeThreshold));
180 FrameBufferProperties fbp;
181 fbp.set_depth_bits(0);
182 fbp.set_rgba_bits(32, 32, 32, 32);
183 fbp.set_float_color(
true);
194#elif !defined(VISP_BUILD_SHARED_LIBS)
196void dummy_vpPanda3DCanny() { }
Definition of the vpImage class member functions.
NodePath m_renderRoot
Rendering parameters.
void setupScene() VP_OVERRIDE
Initialize the scene for this specific renderer.
void getRender(vpImage< vpRGBf > &I) const
void setEdgeThreshold(float edgeThreshold)
FrameBufferProperties getBufferProperties() const VP_OVERRIDE
vpPanda3DCanny(const std::string &name, std::shared_ptr< vpPanda3DBaseRenderer > inputRenderer, bool isOutput, float edgeThreshold)
FrameBufferProperties getBufferProperties() const VP_OVERRIDE
void getRender(vpImage< unsigned char > &I) const
vpPanda3DGaussianBlur(const std::string &name, std::shared_ptr< vpPanda3DBaseRenderer > inputRenderer, bool isOutput)
FrameBufferProperties getBufferProperties() const VP_OVERRIDE
void getRender(vpImage< unsigned char > &I) const
vpPanda3DLuminanceFilter(const std::string &name, std::shared_ptr< vpPanda3DRGBRenderer > inputRenderer, bool isOutput)
void getRenderBasic(vpImage< unsigned char > &I) const
virtual void setupScene() VP_OVERRIDE
Initialize the scene for this specific renderer.
vpPanda3DPostProcessFilter(const std::string &name, std::shared_ptr< vpPanda3DBaseRenderer > inputRenderer, bool isOutput, std::string fragmentShader)