Я знаю, что на этот вопрос отвечали много раз, но ответ - это двумерная матрица, которую я не знаю, как использовать.
Мне нужен одномерный массив весов, который я могу отобрать в своем фрагментном шейдере. Я разделил свое размытие по Гауссу на шейдеры горизонтального и вертикального размытия, и теперь я не хочу, чтобы на каждом шаге я представлял собой одномерный массив весов ядра Гаусса для выборки, а состоял из двухмерной матрицы предыдущего ответа, которая дает неверный результат при выборке на каждом размывающем шейдере [Весь Сцена становится белой.
Это мой код вершинного шейдера
# version 430 core
in vec3 vertex;
uniform int fboWidth; /*FrameBuffer Width(Texture Width)*/
uniform int fboHeight; /*FrameBuffer Height(Texture Height)*/
uniform int mode; /*Blur Mode(0=Horizontal,1=Vertical)*/
in vec2 texCoord; /*Texture Coordinates of full screen quad*/
out vec2 vertexTexCoords[11];/*Outgoing neighbour texels to be sampled*/
void main()
{
gl_Position=vec4(vertex,1.0);
vec2 realTexCoord=vec2(texCoord.x,1.0f-texCoord.y);
if(mode==0)
{
vec2 offset=vec2(1.0f/fboWidth,0);
for(int i=-5;i<=5;i++){vertexTexCoords[i+5]=realTexCoord+(offset*i);}
}
else if(mode==1)
{
vec2 offset=vec2(0,1.0f/fboHeight);
for(int i=-5;i<=5;i++){vertexTexCoords[i+5]=realTexCoord+(offset*i);}
}
}
Это мой фрагмент кода шейдера
# version 430 core
in vec2 vertexTexCoords[11];
uniform sampler2D texture; /*Brightest part's of my scene*/
uniform float gaussianWeights[11];/*The weight's I wish to calculate(but don't know how)
out vec4 pixelColor;
void main()
{
vec4 finalColor=vec4(0.0);
for(int i=0;i<11;i++){finalColor+=texture(texture,vertexTexCoords[i])*gaussianWeights[i];}
pixelColor=finalColor;
}
То, что я делаю, это рендеринг моей сцены в текстуру и использование полноэкранного четырехугольника для выборки этой текстуры и размытия ее самой яркой части
В фрагментном шейдере
uniform float gaussianWeights[11];
- ожидаемые веса ядра, которые я хочу вычислить для ядра
Ширина = 5 и Высота = 5, но не знаю как.
Пока что я использую вес, рассчитанный с помощью онлайн-калькулятора гауссовского ядра, но не понимаю его код, написанный на Java-скрипте.
Была бы признательна Java-функция, которая может рассчитать эти веса ядра для любого размера ядра.
Спасибо,