Расчет гауссовых весов для затенения - PullRequest
0 голосов
/ 07 января 2019

Я знаю, что на этот вопрос отвечали много раз, но ответ - это двумерная матрица, которую я не знаю, как использовать.

Мне нужен одномерный массив весов, который я могу отобрать в своем фрагментном шейдере. Я разделил свое размытие по Гауссу на шейдеры горизонтального и вертикального размытия, и теперь я не хочу, чтобы на каждом шаге я представлял собой одномерный массив весов ядра Гаусса для выборки, а состоял из двухмерной матрицы предыдущего ответа, которая дает неверный результат при выборке на каждом размывающем шейдере [Весь Сцена становится белой.

Это мой код вершинного шейдера

# 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-функция, которая может рассчитать эти веса ядра для любого размера ядра.

Спасибо,

...