A Cylinder is one of the built-in mesh shapes.

We can find number of vertices and their coordinates.

// *** 2. Start (Vertices)
VertexBuffer position = cylinder.
getBuffer(Type.Position);
Vector3f[] array = BufferUtils.
getVector3Array((FloatBuffer)position.
getData());
System.out.println("cylinder has " +
array.length +
" vertices. Coordinates are: ");
int i = 0;
for (Vector3f v : array) {
System.out.printf("%d\t%s\n",i++,v);
}
// *** 2. End
This materials tests if the mesh structure is correctly loaded.

// *** 3. Start (Material)
Material mat = new Material(assetManager,
"Common/MatDefs/Misc/ShowNormals.j3md");
geoCylinder.setMaterial(mat);
// *** 3. End
// *** 4. Start (Rotation per frame)
rootNode.rotate(.5f*tpf, .1f*tpf, .2f*tpf);
// *** 4. End
// JMonkey38.java
package mygame;
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager;
import com.jme3.scene.Geometry;
import com.jme3.scene.VertexBuffer;
import com.jme3.scene.VertexBuffer.Type;
import com.jme3.scene.shape.Cylinder;
import com.jme3.system.AppSettings;
import com.jme3.util.BufferUtils;
import java.nio.FloatBuffer;
public class JMonkey38 extends SimpleApplication {
public static void main(String[] args) {
AppSettings settings = new AppSettings(true);
settings.setFrameRate(57);
settings.setTitle("Cylinder !");
JMonkey38 app = new JMonkey38();
app.setSettings(settings);
app.start();
}
@Override
public void simpleInitApp() {
viewPort.setBackgroundColor(
new ColorRGBA(1f,.9f,.8f,1));
setDisplayFps(false);
setDisplayStatView(false);
flyCam.setEnabled(false);
// *** 1. Start (cylinder mesh)
Cylinder cylinder = new Cylinder(8,8,1.5f,2.5f,true);
Geometry geoCylinder = new Geometry("cylinder", cylinder);
// *** 2. Start (Vertices)
VertexBuffer position = cylinder.
getBuffer(Type.Position);
Vector3f[] array = BufferUtils.
getVector3Array((FloatBuffer)position.
getData());
System.out.println("cylinder has " +
array.length +
" vertices. Coordinates are: ");
int i = 0;
for (Vector3f v : array) {
System.out.printf("%d\t%s\n",i++,v);
}
// *** 2. End
// *** 3. Start (Material)
Material mat = new Material(assetManager,
"Common/MatDefs/Misc/ShowNormals.j3md");
geoCylinder.setMaterial(mat);
// *** 3. End
rootNode.attachChild(geoCylinder);
}
@Override
public void simpleUpdate(float tpf) {
// *** 4. Start (Rotation per frame)
rootNode.rotate(.5f*tpf, .1f*tpf, .2f*tpf);
// *** 4. End
}
@Override
public void simpleRender(RenderManager rm) {
}
}
Output:

No comments:
Post a Comment