The Quad is a 2D Mesh.

The Mesh and Geometry are created.

// *** 1. Start (Quad Mesh + Geometry)
Quad quad = new Quad(4,6); // 4 by 6
geoQuad = new Geometry("quad", quad);
geoQuad.setLocalTranslation(0, -3, 0);
// *** 1. End
Some mesh information is printed.

// *** 2. Start (Vertices and Texture coordinates)
VertexBuffer position = quad.
getBuffer(VertexBuffer.Type.Position);
Vector3f[] arrayVer = BufferUtils.
getVector3Array((FloatBuffer)position.
getData());
VertexBuffer texCoord = quad.
getBuffer(VertexBuffer.Type.TexCoord);
Vector2f[] arrayTex = BufferUtils.
getVector2Array((FloatBuffer)texCoord.
getData());
System.out.println("quad has " +
arrayVer.length +
" vertices. Coordinates for " +
" Vertices (x,y,z) and Texture (u,v) are: ");
for (int i = 0; i<arrayVer.length; i++) {
System.out.printf("%d\t%s\t%s\n",i,
arrayVer[i],arrayTex[i]);
}
// *** 2. End
The material shows the back shadow and we also use the transparency to blend with the background color.

// *** 3. Start (Material)
Material mat = new Material(assetManager,
"Common/MatDefs/Light/Lighting.j3md");
mat.getAdditionalRenderState().
setFaceCullMode(FaceCullMode.Off);
Texture quadTex = assetManager.loadTexture(
"Interface/monkey/Jmonkeyengine-logo.png");
mat.setTexture("DiffuseMap", quadTex);
mat.getAdditionalRenderState().
setBlendMode(BlendMode.Alpha);
geoQuad.setMaterial(mat);
// *** 3. End
// JMonkey39.java
package mygame;
import com.jme3.app.SimpleApplication;
import com.jme3.light.DirectionalLight;
import com.jme3.light.SpotLight;
import com.jme3.material.Material;
import com.jme3.material.RenderState.BlendMode;
import com.jme3.material.RenderState.FaceCullMode;
import com.jme3.math.ColorRGBA;
import com.jme3.math.FastMath;
import com.jme3.math.Vector2f;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager;
import com.jme3.scene.Geometry;
import com.jme3.scene.VertexBuffer;
import com.jme3.scene.shape.Quad;
import com.jme3.system.AppSettings;
import com.jme3.texture.Texture;
import com.jme3.util.BufferUtils;
import java.nio.FloatBuffer;
public class JMonkey39 extends SimpleApplication {
public static void main(String[] args) {
AppSettings settings = new AppSettings(true);
settings.setFrameRate(60);
settings.setTitle("Monkey on a Quad !");
JMonkey39 app = new JMonkey39();
app.setSettings(settings);
app.start();
}
private Geometry geoQuad;
@Override
public void simpleInitApp() {
viewPort.setBackgroundColor(
new ColorRGBA(1f,.9f,.8f,1));
setDisplayFps(false);
setDisplayStatView(false);
flyCam.setEnabled(false);
// *** 1. Start (Quad Mesh + Geometry)
Quad quad = new Quad(4,6); // 4 by 6
geoQuad = new Geometry("quad", quad);
geoQuad.setLocalTranslation(0, -3, 0);
// *** 1. End
// *** 2. Start (Vertices and Texture coordinates)
VertexBuffer position = quad.
getBuffer(VertexBuffer.Type.Position);
Vector3f[] arrayVer = BufferUtils.
getVector3Array((FloatBuffer)position.
getData());
VertexBuffer texCoord = quad.
getBuffer(VertexBuffer.Type.TexCoord);
Vector2f[] arrayTex = BufferUtils.
getVector2Array((FloatBuffer)texCoord.
getData());
System.out.println("quad has " +
arrayVer.length +
" vertices. Coordinates for " +
" Vertices (x,y,z) and Texture (u,v) are: ");
for (int i = 0; i<arrayVer.length; i++) {
System.out.printf("%d\t%s\t%s\n",i,
arrayVer[i],arrayTex[i]);
}
// *** 2. End
// *** 3. Start (Material)
Material mat = new Material(assetManager,
"Common/MatDefs/Light/Lighting.j3md");
mat.getAdditionalRenderState().
setFaceCullMode(FaceCullMode.Off);
Texture quadTex = assetManager.loadTexture(
"Interface/monkey/Jmonkeyengine-logo.png");
mat.setTexture("DiffuseMap", quadTex);
mat.getAdditionalRenderState().
setBlendMode(BlendMode.Alpha);
geoQuad.setMaterial(mat);
// *** 3. End
/** A white, directional light source */
DirectionalLight sun = new DirectionalLight();
sun.setDirection((new Vector3f(-0.5f, -0.5f, -0.5f)).normalizeLocal());
sun.setColor(ColorRGBA.White);
rootNode.addLight(sun);
/** A cone-shaped spotlight with location, direction, range */
SpotLight spot = new SpotLight();
spot.setSpotRange(100);
spot.setSpotOuterAngle(20 * FastMath.DEG_TO_RAD);
spot.setSpotInnerAngle(15 * FastMath.DEG_TO_RAD);
spot.setDirection(cam.getDirection());
spot.setPosition(cam.getLocation());
rootNode.addLight(spot);
rootNode.attachChild(geoQuad);
}
@Override
public void simpleUpdate(float tpf) {
geoQuad.rotate(0,FastMath.HALF_PI*tpf,0);
}
@Override
public void simpleRender(RenderManager rm) {
}
}
Output:
No comments:
Post a Comment