This is a sharpening filter for use in jME
slit det med hälsan
[java]
package mygame;
import com.jme3.asset.AssetManager;
import com.jme3.material.Material;
import com.jme3.post.Filter;
import com.jme3.renderer.RenderManager;
import com.jme3.renderer.ViewPort;
import com.jme3.texture.Image.Format;
import java.util.ArrayList;
/**
*
-
@author kwando
/
public class USMFilter extends Filter {
private Material material;
private Pass horizontalBlur = new Pass();
private Pass verticalalBlur = new Pass();
private Material hBlurMat;
private Material vBlurMat;
private float blurScale = 1.5f;
private int width;
private int height;
private float amount = 0.2f;
private float downSamplingFactor = 0.5f;
@Override
protected void initFilter(AssetManager manager, RenderManager renderManager, ViewPort vp, int w, int h) {
width = (int)(wdownSamplingFactor);
height = (int)(h*downSamplingFactor);
material = new Material(manager, "MatDefs/USM.j3md");
hBlurMat = new Material(manager, "Common/MatDefs/Blur/HGaussianBlur.j3md");
vBlurMat = new Material(manager, "Common/MatDefs/Blur/VGaussianBlur.j3md");
postRenderPasses = new ArrayList<Filter.Pass>();
horizontalBlur = new Pass() {
@Override
public boolean requiresSceneAsTexture() {
return true;
}
@Override
public void beforeRender() {
hBlurMat.setFloat("Size", width);
hBlurMat.setFloat("Scale", blurScale);
}
};
horizontalBlur.init(renderManager.getRenderer(), width, height, Format.RGBA8, Format.Depth, 1, hBlurMat);
postRenderPasses.add(horizontalBlur);
//configuring vertical blur pass
vBlurMat = new Material(manager, "Common/MatDefs/Blur/VGaussianBlur.j3md");
verticalalBlur = new Pass() {
@Override
public void beforeRender() {
vBlurMat.setTexture("Texture", horizontalBlur.getRenderedTexture());
vBlurMat.setFloat("Size", height);
vBlurMat.setFloat("Scale", blurScale);
}
};
verticalalBlur.init(renderManager.getRenderer(), width, height, Format.RGBA8, Format.Depth, 1, vBlurMat);
postRenderPasses.add(verticalalBlur);
material.setTexture("BlurTexture", verticalalBlur.getRenderedTexture());
}
@Override
protected Material getMaterial() {
material.setFloat("Amount", amount);
return material;
}
public float getAmount() {
return amount;
}
public void setAmount(float amount) {
this.amount = amount;
}
public float getBlurScale() {
return blurScale;
}
public void setBlurScale(float blurScale) {
this.blurScale = blurScale;
}
}
[/java]
MaterialParameters {
Texture2D Texture
Texture2D BlurTexture
Float Amount
}
Technique {
VertexShader GLSL100: Common/MatDefs/Post/Post.vert
FragmentShader GLSL100: Shaders/USM.frag
WorldParameters {
}
}
}
const vec3 lumConv = vec3(0.27, 0.67, 0.06);
varying vec2 texCoord;
void main() {
vec4 blured = texture2D(m_BlurTexture, texCoord);
vec4 color = texture2D(m_Texture, texCoord);
float colorLum = dot(color.rgb, lumConv);
float blurLum = dot(blured.rgb, lumConv);
float diff = colorLum-blurLum;
gl_FragColor = vec4(diff * m_Amount) + color;
}