parent
97a53e0c99
commit
2e328fc6e0
@ -0,0 +1,116 @@ |
|||||||
|
package jme3test.texture; |
||||||
|
|
||||||
|
import com.jme3.app.SimpleApplication; |
||||||
|
import com.jme3.app.state.ScreenshotAppState; |
||||||
|
import com.jme3.asset.AssetManager; |
||||||
|
import com.jme3.input.KeyInput; |
||||||
|
import com.jme3.input.controls.ActionListener; |
||||||
|
import com.jme3.input.controls.KeyTrigger; |
||||||
|
import com.jme3.material.Material; |
||||||
|
import com.jme3.math.ColorRGBA; |
||||||
|
import com.jme3.math.FastMath; |
||||||
|
import com.jme3.math.Quaternion; |
||||||
|
import com.jme3.math.Vector2f; |
||||||
|
import com.jme3.math.Vector3f; |
||||||
|
import com.jme3.renderer.Limits; |
||||||
|
import com.jme3.scene.Geometry; |
||||||
|
import com.jme3.scene.shape.Quad; |
||||||
|
import com.jme3.texture.Image; |
||||||
|
import com.jme3.texture.Image.Format; |
||||||
|
import com.jme3.texture.Texture; |
||||||
|
import com.jme3.texture.Texture2D; |
||||||
|
import com.jme3.texture.image.ColorSpace; |
||||||
|
import com.jme3.texture.image.ImageRaster; |
||||||
|
import com.jme3.util.BufferUtils; |
||||||
|
|
||||||
|
public class TestAnisotropicFilter extends SimpleApplication implements ActionListener { |
||||||
|
|
||||||
|
private int globalAniso = 1; |
||||||
|
private int maxAniso = 1; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void simpleInitApp() { |
||||||
|
maxAniso = renderer.getLimits().get(Limits.TextureAnisotropy); |
||||||
|
|
||||||
|
flyCam.setDragToRotate(true); |
||||||
|
flyCam.setMoveSpeed(100); |
||||||
|
cam.setLocation(new Vector3f(197.02617f, 4.6769195f, -194.89545f)); |
||||||
|
cam.setRotation(new Quaternion(0.07921988f, 0.8992258f, -0.18292196f, 0.38943136f)); |
||||||
|
Quad q = new Quad(1000, 1000); |
||||||
|
q.scaleTextureCoordinates(new Vector2f(1000, 1000)); |
||||||
|
Geometry geom = new Geometry("quad", q); |
||||||
|
geom.rotate(-FastMath.HALF_PI, 0, 0); |
||||||
|
geom.setMaterial(createCheckerBoardMaterial(assetManager)); |
||||||
|
rootNode.attachChild(geom); |
||||||
|
|
||||||
|
inputManager.addMapping("higher", new KeyTrigger(KeyInput.KEY_1)); |
||||||
|
inputManager.addMapping("lower", new KeyTrigger(KeyInput.KEY_2)); |
||||||
|
inputManager.addListener(this, "higher"); |
||||||
|
inputManager.addListener(this, "lower"); |
||||||
|
} |
||||||
|
|
||||||
|
private static Material createCheckerBoardMaterial(AssetManager assetManager) { |
||||||
|
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); |
||||||
|
Texture tex = createCheckerBoardTexture(); // assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.dds");
|
||||||
|
tex.setMagFilter(Texture.MagFilter.Bilinear); |
||||||
|
tex.setMinFilter(Texture.MinFilter.Trilinear); |
||||||
|
tex.setWrap(Texture.WrapMode.Repeat); |
||||||
|
mat.setTexture("ColorMap", tex); |
||||||
|
return mat; |
||||||
|
} |
||||||
|
|
||||||
|
private static Texture2D createCheckerBoardTexture() { |
||||||
|
Image image = new Image(Format.RGBA8, 1024, 1024, BufferUtils.createByteBuffer(1024 * 1024 * 4), ColorSpace.sRGB); |
||||||
|
|
||||||
|
ImageRaster raster = ImageRaster.create(image); |
||||||
|
for (int y = 0; y < 1024; y++) { |
||||||
|
for (int x = 0; x < 1024; x++) { |
||||||
|
if (y < 512) { |
||||||
|
if (x < 512) { |
||||||
|
raster.setPixel(x, y, ColorRGBA.Black); |
||||||
|
} else { |
||||||
|
raster.setPixel(x, y, ColorRGBA.White); |
||||||
|
} |
||||||
|
} else { |
||||||
|
if (x < 512) { |
||||||
|
raster.setPixel(x, y, ColorRGBA.White); |
||||||
|
} else { |
||||||
|
raster.setPixel(x, y, ColorRGBA.Black); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return new Texture2D(image); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAction(String name, boolean isPressed, float tpf) { |
||||||
|
if (isPressed) { |
||||||
|
return; |
||||||
|
} |
||||||
|
switch (name) { |
||||||
|
case "higher": |
||||||
|
globalAniso++; |
||||||
|
if (globalAniso > 32) { |
||||||
|
globalAniso = 32; |
||||||
|
} |
||||||
|
renderer.setDefaultAnisotropicFilter(globalAniso); |
||||||
|
System.out.format("Global Aniso: %d / %d\r\n", globalAniso, maxAniso); |
||||||
|
break; |
||||||
|
case "lower": |
||||||
|
globalAniso--; |
||||||
|
if (globalAniso < 1) { |
||||||
|
globalAniso = 1; |
||||||
|
} |
||||||
|
renderer.setDefaultAnisotropicFilter(globalAniso); |
||||||
|
System.out.format("Global Aniso: %d / %d\r\n", globalAniso, maxAniso); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
TestAnisotropicFilter app = new TestAnisotropicFilter(); |
||||||
|
app.start(); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue