use of net.drewke.tdme.engine.model.Model in project tdme by andreasdr.
the class PrimitiveModel method createCapsuleModel.
/**
* Creates a model from capsule
* @param sphere
* @param id
* @param number of x segments
* @param number of y segments
* @return model
*/
public static Model createCapsuleModel(Capsule capsule, String id, int segmentsX, int segmentsY) {
// capsule properties
float radius = capsule.radius;
Vector3 a = capsule.a;
Vector3 b = capsule.b;
// rotation quaternion
Quaternion rotationQuaternion = new Quaternion();
rotationQuaternion.identity();
// angle between a and b
Vector3 yAxis = new Vector3(0f, -1f, 0f);
Vector3 abNormalized = a.clone().sub(b).normalize();
float[] abNormalizedVectorXYZ = abNormalized.getArray();
Vector3 rotationAxis;
if (Math.abs(abNormalizedVectorXYZ[0]) < MathTools.EPSILON && Math.abs(abNormalizedVectorXYZ[2]) < MathTools.EPSILON) {
rotationAxis = new Vector3(abNormalizedVectorXYZ[1], 0f, 0f);
} else {
rotationAxis = Vector3.computeCrossProduct(yAxis, abNormalized).normalize();
}
float angle = Vector3.computeAngle(yAxis, abNormalized, yAxis);
rotationQuaternion.rotate(angle, rotationAxis);
// ground model
Model model = new Model(id, id, UpVector.Y_UP, RotationOrder.XYZ, null);
// material
Material material = new Material("tdme.primitive.material");
material.getAmbientColor().set(0.5f, 0.5f, 0.5f, 1.0f);
material.getDiffuseColor().set(1.0f, 0.5f, 0.5f, 0.5f);
material.getSpecularColor().set(0f, 0f, 0f, 1f);
model.getMaterials().put(material.getId(), material);
// group
Group group = new Group(model, null, "group", "group");
// faces entity
FacesEntity groupFacesEntity = new FacesEntity(group, "faces entity");
groupFacesEntity.setMaterial(material);
// faces entity
ArrayList<FacesEntity> groupFacesEntities = new ArrayList<FacesEntity>();
groupFacesEntities.add(groupFacesEntity);
// vertices
ArrayList<Vector3> vertices = new ArrayList<Vector3>();
for (int i = 0; i < (segmentsY + 2) * segmentsX; i++) vertices.add(null);
// top half sphere
for (int ySegment = segmentsY / 2; ySegment <= segmentsY; ySegment++) for (int xSegment = 0; xSegment < segmentsX; xSegment++) {
Vector3 vertex = new Vector3();
rotationQuaternion.multiply(new Vector3((float) (Math.sin(Math.PI * ySegment / segmentsY) * Math.cos(Math.PI * 2 * xSegment / segmentsX)), (float) (Math.cos(Math.PI * ySegment / segmentsY)), (float) (Math.sin(Math.PI * ySegment / segmentsY) * Math.sin(Math.PI * 2 * xSegment / segmentsX))), vertex);
vertex.scale(radius);
vertex.add(a);
vertices.set(ySegment * segmentsX + xSegment, vertex);
}
// bottom half sphere
for (int i = 0; i < (segmentsY + 1) * segmentsX; i++) vertices.add(null);
for (int ySegment = 0; ySegment <= segmentsY / 2; ySegment++) for (int xSegment = 0; xSegment < segmentsX; xSegment++) {
Vector3 vertex = new Vector3();
rotationQuaternion.multiply(new Vector3((float) (Math.sin(Math.PI * ySegment / segmentsY) * Math.cos(Math.PI * 2 * xSegment / segmentsX)), (float) (Math.cos(Math.PI * ySegment / segmentsY)), (float) (Math.sin(Math.PI * ySegment / segmentsY) * Math.sin(Math.PI * 2 * xSegment / segmentsX))), vertex);
vertex.scale(radius);
vertex.add(b);
vertices.set(ySegment * segmentsX + xSegment, vertex);
}
// normals
ArrayList<Vector3> normals = new ArrayList<Vector3>();
// faces
ArrayList<Face> faces = new ArrayList<Face>();
int vi0, vi1, vi2;
int ni;
for (int y = 0; y <= segmentsY + 1; y++) {
for (int x = 0; x < segmentsX; x++) {
vi0 = ((y + 0) % (segmentsY + 1)) * segmentsX + ((x + 0) % (segmentsX));
vi1 = ((y + 1) % (segmentsY + 1)) * segmentsX + ((x + 1) % (segmentsX));
vi2 = ((y + 1) % (segmentsY + 1)) * segmentsX + ((x + 0) % (segmentsX));
ni = normals.size();
for (Vector3 normal : ModelHelper.computeNormals(new Vector3[] { vertices.get(vi0), vertices.get(vi1), vertices.get(vi2) })) {
normals.add(normal);
}
faces.add(new Face(group, vi0, vi1, vi2, ni + 0, ni + 1, ni + 2));
vi0 = ((y + 0) % (segmentsY + 1)) * segmentsX + ((x + 0) % (segmentsX));
vi1 = ((y + 0) % (segmentsY + 1)) * segmentsX + ((x + 1) % (segmentsX));
vi2 = ((y + 1) % (segmentsY + 1)) * segmentsX + ((x + 1) % (segmentsX));
ni = normals.size();
for (Vector3 normal : ModelHelper.computeNormals(new Vector3[] { vertices.get(vi0), vertices.get(vi1), vertices.get(vi2) })) {
normals.add(normal);
}
faces.add(new Face(group, vi0, vi1, vi2, ni + 0, ni + 1, ni + 2));
}
}
// set up faces entity
groupFacesEntity.setFaces(faces);
// setup group vertex data
group.setVertices(vertices);
group.setNormals(normals);
group.setFacesEntities(groupFacesEntities);
// determine features
group.determineFeatures();
// register group
model.getGroups().put("group", group);
model.getSubGroups().put("group", group);
// prepare for indexed rendering
ModelHelper.prepareForIndexedRendering(model);
//
return model;
}
use of net.drewke.tdme.engine.model.Model in project tdme by andreasdr.
the class PrimitiveModel method createSphereModel.
/**
* Creates a model from oriented bounding box
* @param sphere
* @param id
* @param number of x segments
* @param number of y segments
* @return model
*/
public static Model createSphereModel(Sphere sphere, String id, int segmentsX, int segmentsY) {
// sphere properties
float radius = sphere.radius;
Vector3 center = sphere.center;
// ground model
Model model = new Model(id, id, UpVector.Y_UP, RotationOrder.XYZ, null);
// material
Material material = new Material("tdme.primitive.material");
material.getAmbientColor().set(0.5f, 0.5f, 0.5f, 1.0f);
material.getDiffuseColor().set(1.0f, 0.5f, 0.5f, 0.5f);
material.getSpecularColor().set(0f, 0f, 0f, 1f);
model.getMaterials().put(material.getId(), material);
// group
Group group = new Group(model, null, "group", "group");
// faces entity
FacesEntity groupFacesEntity = new FacesEntity(group, "faces entity");
groupFacesEntity.setMaterial(material);
// faces entity
ArrayList<FacesEntity> groupFacesEntities = new ArrayList<FacesEntity>();
groupFacesEntities.add(groupFacesEntity);
// vertices
ArrayList<Vector3> vertices = new ArrayList<Vector3>();
for (int i = 0; i < (segmentsY + 1) * segmentsX; i++) vertices.add(null);
for (int ySegment = 0; ySegment <= segmentsY; ySegment++) for (int xSegment = 0; xSegment < segmentsX; xSegment++) {
Vector3 vertex = new Vector3((float) (Math.sin(Math.PI * ySegment / segmentsY) * Math.cos(Math.PI * 2 * xSegment / segmentsX)), (float) (Math.cos(Math.PI * ySegment / segmentsY)), (float) (Math.sin(Math.PI * ySegment / segmentsY) * Math.sin(Math.PI * 2 * xSegment / segmentsX))).scale(radius).add(center);
vertices.set(ySegment * segmentsX + xSegment, vertex);
}
// normals
ArrayList<Vector3> normals = new ArrayList<Vector3>();
// faces
ArrayList<Face> faces = new ArrayList<Face>();
int vi0, vi1, vi2;
int ni;
for (int y = 0; y <= segmentsY; y++) {
for (int x = 0; x < segmentsX; x++) {
vi0 = ((y + 0) % (segmentsY + 1)) * segmentsX + ((x + 0) % (segmentsX));
vi1 = ((y + 1) % (segmentsY + 1)) * segmentsX + ((x + 1) % (segmentsX));
vi2 = ((y + 1) % (segmentsY + 1)) * segmentsX + ((x + 0) % (segmentsX));
ni = normals.size();
for (Vector3 normal : ModelHelper.computeNormals(new Vector3[] { vertices.get(vi0), vertices.get(vi1), vertices.get(vi2) })) {
normals.add(normal);
}
faces.add(new Face(group, vi0, vi1, vi2, ni + 0, ni + 1, ni + 2));
vi0 = ((y + 0) % (segmentsY + 1)) * segmentsX + ((x + 0) % (segmentsX));
vi1 = ((y + 0) % (segmentsY + 1)) * segmentsX + ((x + 1) % (segmentsX));
vi2 = ((y + 1) % (segmentsY + 1)) * segmentsX + ((x + 1) % (segmentsX));
ni = normals.size();
for (Vector3 normal : ModelHelper.computeNormals(new Vector3[] { vertices.get(vi0), vertices.get(vi1), vertices.get(vi2) })) {
normals.add(normal);
}
faces.add(new Face(group, vi0, vi1, vi2, ni + 0, ni + 1, ni + 2));
}
}
// set up faces entity
groupFacesEntity.setFaces(faces);
// setup group vertex data
group.setVertices(vertices);
group.setNormals(normals);
group.setFacesEntities(groupFacesEntities);
// determine features
group.determineFeatures();
// register group
model.getGroups().put("group", group);
model.getSubGroups().put("group", group);
// prepare for indexed rendering
ModelHelper.prepareForIndexedRendering(model);
//
return model;
}
use of net.drewke.tdme.engine.model.Model in project tdme by andreasdr.
the class ModelMetaDataFileImport method doImportFromJSON.
/**
* Imports a model meta data file from JSON object
* @param id or LevelEditorEntity.ID_NONE
* @param path name or null
* @param JSON entity root
*/
public static LevelEditorEntity doImportFromJSON(int id, String pathName, JSONObject jEntityRoot) throws Exception {
LevelEditorEntity levelEditorEntity;
// check for version
float version = Float.parseFloat(jEntityRoot.getString("version"));
// pivot
Vector3 pivot = new Vector3((float) jEntityRoot.getDouble("px"), (float) jEntityRoot.getDouble("py"), (float) jEntityRoot.getDouble("pz"));
// String thumbnail = jRoot.getString("thumbnail");
EntityType modelType = LevelEditorEntity.EntityType.valueOf(jEntityRoot.getString("type"));
String modelFile = jEntityRoot.has("file") == true ? new File(jEntityRoot.getString("file")).getCanonicalPath() : null;
String modelThumbnail = jEntityRoot.has("thumbnail") == true ? jEntityRoot.getString("thumbnail") : null;
String name = jEntityRoot.getString("name");
String description = jEntityRoot.getString("descr");
// load model
Model model = null;
// having a model file?
String gameRoot = Tools.getGameRootPath(pathName);
String modelRelativeFileName = null;
if (modelFile != null) {
// yep, load it
modelRelativeFileName = Tools.getRelativeResourcesFileName(gameRoot, modelFile);
String modelPath = (gameRoot.length() > 0 ? gameRoot + "/" : "") + Tools.getPath(modelRelativeFileName);
if (modelFile.toLowerCase().endsWith(".dae")) {
model = DAEReader.read(modelPath, Tools.getFileName(modelRelativeFileName));
} else if (modelFile.toLowerCase().endsWith(".tm")) {
model = TMReader.read(modelPath, Tools.getFileName(modelRelativeFileName));
} else {
throw new Exception("Unsupported mode file: " + modelFile);
}
} else // TODO: only load if required e.g. for LevelEditor
if (modelType == EntityType.EMPTY) {
model = DAEReader.read("resources/tools/leveleditor/models", "arrow.dae");
}
// load level editor model
levelEditorEntity = new LevelEditorEntity(id, modelType, name, description, null, modelFile != null ? new File(gameRoot, modelRelativeFileName).getCanonicalPath() : null, modelThumbnail, model, pivot);
// parse properties
JSONArray jProperties = jEntityRoot.getJSONArray("properties");
for (int i = 0; i < jProperties.length(); i++) {
JSONObject jProperty = jProperties.getJSONObject(i);
levelEditorEntity.addProperty(jProperty.getString("name"), jProperty.getString("value"));
}
// old: optional bounding volume
if (jEntityRoot.has("bv") == true) {
levelEditorEntity.addBoundingVolume(0, parseBoundingVolume(0, levelEditorEntity, jEntityRoot.getJSONObject("bv")));
} else // new: optional bounding volumeS
if (jEntityRoot.has("bvs") == true) {
JSONArray jBoundingVolumes = jEntityRoot.getJSONArray("bvs");
for (int i = 0; i < jBoundingVolumes.length(); i++) {
JSONObject jBv = jBoundingVolumes.getJSONObject(i);
levelEditorEntity.addBoundingVolume(i, parseBoundingVolume(i, levelEditorEntity, jBv));
}
}
// parse particle system
if (modelType == EntityType.PARTICLESYSTEM) {
LevelEditorEntityParticleSystem particleSystem = levelEditorEntity.getParticleSystem();
JSONObject jParticleSystem = jEntityRoot.getJSONObject("ps");
// type
particleSystem.setType(Type.valueOf(jParticleSystem.getString("t")));
switch(particleSystem.getType()) {
case NONE:
{
break;
}
case OBJECT_PARTICLE_SYSTEM:
{
JSONObject jObjectParticleSystem = jParticleSystem.getJSONObject("ops");
ObjectParticleSystem objectParticleSystem = particleSystem.getObjectParticleSystem();
objectParticleSystem.setMaxCount(jObjectParticleSystem.getInt("mc"));
objectParticleSystem.getScale().setX((float) jObjectParticleSystem.getDouble("sx"));
objectParticleSystem.getScale().setY((float) jObjectParticleSystem.getDouble("sy"));
objectParticleSystem.getScale().setZ((float) jObjectParticleSystem.getDouble("sz"));
objectParticleSystem.setAutoEmit(jObjectParticleSystem.getBoolean("ae"));
try {
String particleModelFile = jObjectParticleSystem.getString("mf");
String particleModelRelativeFileName = Tools.getRelativeResourcesFileName(gameRoot, particleModelFile);
String particleModelPath = (gameRoot.length() > 0 ? gameRoot + "/" : "") + Tools.getPath(particleModelRelativeFileName);
objectParticleSystem.setModelFile(particleModelPath + "/" + Tools.getFileName(particleModelRelativeFileName));
} catch (Exception exception) {
exception.printStackTrace();
System.out.println("ModelMetaDataFileImport::doImport(): Failed to set model file: " + exception.getMessage());
}
break;
}
case POINT_PARTICLE_SYSTEM:
{
JSONObject jPointParticleSystem = jParticleSystem.getJSONObject("pps");
particleSystem.getPointParticleSystem().setMaxPoints(jPointParticleSystem.getInt("mp"));
particleSystem.getPointParticleSystem().setAutoEmit(jPointParticleSystem.getBoolean("ae"));
break;
}
default:
{
System.out.println("ModelMetaDataFileExport::export(): unknown particle system type '" + particleSystem.getType() + "'");
break;
}
}
// emitter
particleSystem.setEmitter(Emitter.valueOf(jParticleSystem.getString("e")));
switch(particleSystem.getEmitter()) {
case NONE:
{
break;
}
case POINT_PARTICLE_EMITTER:
{
JSONObject jPointParticleEmitter = jParticleSystem.getJSONObject("ppe");
PointParticleEmitter emitter = particleSystem.getPointParticleEmitter();
emitter.setCount(jPointParticleEmitter.getInt("c"));
emitter.setLifeTime(jPointParticleEmitter.getLong("lt"));
emitter.setLifeTimeRnd(jPointParticleEmitter.getLong("ltrnd"));
emitter.setMass((float) jPointParticleEmitter.getDouble("m"));
emitter.setMassRnd((float) jPointParticleEmitter.getDouble("mrnd"));
emitter.getPosition().setX((float) jPointParticleEmitter.getDouble("px"));
emitter.getPosition().setY((float) jPointParticleEmitter.getDouble("py"));
emitter.getPosition().setZ((float) jPointParticleEmitter.getDouble("pz"));
emitter.getVelocity().setX((float) jPointParticleEmitter.getDouble("vx"));
emitter.getVelocity().setY((float) jPointParticleEmitter.getDouble("vy"));
emitter.getVelocity().setZ((float) jPointParticleEmitter.getDouble("vz"));
emitter.getVelocityRnd().setX((float) jPointParticleEmitter.getDouble("vrndx"));
emitter.getVelocityRnd().setY((float) jPointParticleEmitter.getDouble("vrndy"));
emitter.getVelocityRnd().setZ((float) jPointParticleEmitter.getDouble("vrndz"));
emitter.getColorStart().setRed((float) jPointParticleEmitter.getDouble("csr"));
emitter.getColorStart().setGreen((float) jPointParticleEmitter.getDouble("csg"));
emitter.getColorStart().setBlue((float) jPointParticleEmitter.getDouble("csb"));
emitter.getColorStart().setAlpha((float) jPointParticleEmitter.getDouble("csa"));
emitter.getColorEnd().setRed((float) jPointParticleEmitter.getDouble("cer"));
emitter.getColorEnd().setGreen((float) jPointParticleEmitter.getDouble("ceg"));
emitter.getColorEnd().setBlue((float) jPointParticleEmitter.getDouble("ceb"));
emitter.getColorEnd().setAlpha((float) jPointParticleEmitter.getDouble("cea"));
break;
}
case BOUNDINGBOX_PARTICLE_EMITTER:
{
JSONObject jBoundingBoxParticleEmitter = jParticleSystem.getJSONObject("bbpe");
BoundingBoxParticleEmitter emitter = particleSystem.getBoundingBoxParticleEmitters();
emitter.setCount(jBoundingBoxParticleEmitter.getInt("c"));
emitter.setLifeTime(jBoundingBoxParticleEmitter.getLong("lt"));
emitter.setLifeTimeRnd(jBoundingBoxParticleEmitter.getLong("ltrnd"));
emitter.setMass((float) jBoundingBoxParticleEmitter.getDouble("m"));
emitter.setMassRnd((float) jBoundingBoxParticleEmitter.getDouble("mrnd"));
emitter.getVelocity().setX((float) jBoundingBoxParticleEmitter.getDouble("vx"));
emitter.getVelocity().setY((float) jBoundingBoxParticleEmitter.getDouble("vy"));
emitter.getVelocity().setZ((float) jBoundingBoxParticleEmitter.getDouble("vz"));
emitter.getVelocityRnd().setX((float) jBoundingBoxParticleEmitter.getDouble("vrndx"));
emitter.getVelocityRnd().setY((float) jBoundingBoxParticleEmitter.getDouble("vrndy"));
emitter.getVelocityRnd().setZ((float) jBoundingBoxParticleEmitter.getDouble("vrndz"));
emitter.getColorStart().setRed((float) jBoundingBoxParticleEmitter.getDouble("csr"));
emitter.getColorStart().setGreen((float) jBoundingBoxParticleEmitter.getDouble("csg"));
emitter.getColorStart().setBlue((float) jBoundingBoxParticleEmitter.getDouble("csb"));
emitter.getColorStart().setAlpha((float) jBoundingBoxParticleEmitter.getDouble("csa"));
emitter.getColorEnd().setRed((float) jBoundingBoxParticleEmitter.getDouble("cer"));
emitter.getColorEnd().setGreen((float) jBoundingBoxParticleEmitter.getDouble("ceg"));
emitter.getColorEnd().setBlue((float) jBoundingBoxParticleEmitter.getDouble("ceb"));
emitter.getColorEnd().setAlpha((float) jBoundingBoxParticleEmitter.getDouble("cea"));
emitter.getObbCenter().setX((float) jBoundingBoxParticleEmitter.getDouble("ocx"));
emitter.getObbCenter().setY((float) jBoundingBoxParticleEmitter.getDouble("ocy"));
emitter.getObbCenter().setZ((float) jBoundingBoxParticleEmitter.getDouble("ocz"));
emitter.getObbHalfextension().setX((float) jBoundingBoxParticleEmitter.getDouble("ohex"));
emitter.getObbHalfextension().setY((float) jBoundingBoxParticleEmitter.getDouble("ohey"));
emitter.getObbHalfextension().setZ((float) jBoundingBoxParticleEmitter.getDouble("ohez"));
emitter.getObbAxis0().setX((float) jBoundingBoxParticleEmitter.getDouble("oa0x"));
emitter.getObbAxis0().setY((float) jBoundingBoxParticleEmitter.getDouble("oa0y"));
emitter.getObbAxis0().setZ((float) jBoundingBoxParticleEmitter.getDouble("oa0z"));
emitter.getObbAxis1().setX((float) jBoundingBoxParticleEmitter.getDouble("oa1x"));
emitter.getObbAxis1().setY((float) jBoundingBoxParticleEmitter.getDouble("oa1y"));
emitter.getObbAxis1().setZ((float) jBoundingBoxParticleEmitter.getDouble("oa1z"));
emitter.getObbAxis2().setX((float) jBoundingBoxParticleEmitter.getDouble("oa2x"));
emitter.getObbAxis2().setY((float) jBoundingBoxParticleEmitter.getDouble("oa2y"));
emitter.getObbAxis2().setZ((float) jBoundingBoxParticleEmitter.getDouble("oa2z"));
break;
}
case CIRCLE_PARTICLE_EMITTER:
{
JSONObject jCircleParticleEmitter = jParticleSystem.getJSONObject("cpe");
CircleParticleEmitter emitter = particleSystem.getCircleParticleEmitter();
emitter.setCount(jCircleParticleEmitter.getInt("c"));
emitter.setLifeTime(jCircleParticleEmitter.getLong("lt"));
emitter.setLifeTimeRnd(jCircleParticleEmitter.getLong("ltrnd"));
emitter.setMass((float) jCircleParticleEmitter.getDouble("m"));
emitter.setMassRnd((float) jCircleParticleEmitter.getDouble("mrnd"));
emitter.getVelocity().setX((float) jCircleParticleEmitter.getDouble("vx"));
emitter.getVelocity().setY((float) jCircleParticleEmitter.getDouble("vy"));
emitter.getVelocity().setZ((float) jCircleParticleEmitter.getDouble("vz"));
emitter.getVelocityRnd().setX((float) jCircleParticleEmitter.getDouble("vrndx"));
emitter.getVelocityRnd().setY((float) jCircleParticleEmitter.getDouble("vrndy"));
emitter.getVelocityRnd().setZ((float) jCircleParticleEmitter.getDouble("vrndz"));
emitter.getColorStart().setRed((float) jCircleParticleEmitter.getDouble("csr"));
emitter.getColorStart().setGreen((float) jCircleParticleEmitter.getDouble("csg"));
emitter.getColorStart().setBlue((float) jCircleParticleEmitter.getDouble("csb"));
emitter.getColorStart().setAlpha((float) jCircleParticleEmitter.getDouble("csa"));
emitter.getColorEnd().setRed((float) jCircleParticleEmitter.getDouble("cer"));
emitter.getColorEnd().setGreen((float) jCircleParticleEmitter.getDouble("ceg"));
emitter.getColorEnd().setBlue((float) jCircleParticleEmitter.getDouble("ceb"));
emitter.getColorEnd().setAlpha((float) jCircleParticleEmitter.getDouble("cea"));
emitter.getCenter().setX((float) jCircleParticleEmitter.getDouble("cx"));
emitter.getCenter().setY((float) jCircleParticleEmitter.getDouble("cy"));
emitter.getCenter().setZ((float) jCircleParticleEmitter.getDouble("cz"));
emitter.setRadius((float) jCircleParticleEmitter.getDouble("r"));
emitter.getAxis0().setX((float) jCircleParticleEmitter.getDouble("a0x"));
emitter.getAxis0().setY((float) jCircleParticleEmitter.getDouble("a0y"));
emitter.getAxis0().setZ((float) jCircleParticleEmitter.getDouble("a0z"));
emitter.getAxis1().setX((float) jCircleParticleEmitter.getDouble("a1x"));
emitter.getAxis1().setY((float) jCircleParticleEmitter.getDouble("a1y"));
emitter.getAxis1().setZ((float) jCircleParticleEmitter.getDouble("a1z"));
break;
}
case CIRCLE_PARTICLE_EMITTER_PLANE_VELOCITY:
{
JSONObject jCircleParticleEmitterPlaneVelocity = jParticleSystem.getJSONObject("cpeev");
CircleParticleEmitterPlaneVelocity emitter = particleSystem.getCircleParticleEmitterPlaneVelocity();
emitter.setCount(jCircleParticleEmitterPlaneVelocity.getInt("c"));
emitter.setLifeTime(jCircleParticleEmitterPlaneVelocity.getLong("lt"));
emitter.setLifeTimeRnd(jCircleParticleEmitterPlaneVelocity.getLong("ltrnd"));
emitter.setMass((float) jCircleParticleEmitterPlaneVelocity.getDouble("m"));
emitter.setMassRnd((float) jCircleParticleEmitterPlaneVelocity.getDouble("mrnd"));
emitter.setVelocity((float) jCircleParticleEmitterPlaneVelocity.getDouble("v"));
emitter.setVelocityRnd((float) jCircleParticleEmitterPlaneVelocity.getDouble("vrnd"));
emitter.getColorStart().setRed((float) jCircleParticleEmitterPlaneVelocity.getDouble("csr"));
emitter.getColorStart().setGreen((float) jCircleParticleEmitterPlaneVelocity.getDouble("csg"));
emitter.getColorStart().setBlue((float) jCircleParticleEmitterPlaneVelocity.getDouble("csb"));
emitter.getColorStart().setAlpha((float) jCircleParticleEmitterPlaneVelocity.getDouble("csa"));
emitter.getColorEnd().setRed((float) jCircleParticleEmitterPlaneVelocity.getDouble("cer"));
emitter.getColorEnd().setGreen((float) jCircleParticleEmitterPlaneVelocity.getDouble("ceg"));
emitter.getColorEnd().setBlue((float) jCircleParticleEmitterPlaneVelocity.getDouble("ceb"));
emitter.getColorEnd().setAlpha((float) jCircleParticleEmitterPlaneVelocity.getDouble("cea"));
emitter.getCenter().setX((float) jCircleParticleEmitterPlaneVelocity.getDouble("cx"));
emitter.getCenter().setY((float) jCircleParticleEmitterPlaneVelocity.getDouble("cy"));
emitter.getCenter().setZ((float) jCircleParticleEmitterPlaneVelocity.getDouble("cz"));
emitter.setRadius((float) jCircleParticleEmitterPlaneVelocity.getDouble("r"));
emitter.getAxis0().setX((float) jCircleParticleEmitterPlaneVelocity.getDouble("a0x"));
emitter.getAxis0().setY((float) jCircleParticleEmitterPlaneVelocity.getDouble("a0y"));
emitter.getAxis0().setZ((float) jCircleParticleEmitterPlaneVelocity.getDouble("a0z"));
emitter.getAxis1().setX((float) jCircleParticleEmitterPlaneVelocity.getDouble("a1x"));
emitter.getAxis1().setY((float) jCircleParticleEmitterPlaneVelocity.getDouble("a1y"));
emitter.getAxis1().setZ((float) jCircleParticleEmitterPlaneVelocity.getDouble("a1z"));
break;
}
case SPHERE_PARTICLE_EMITTER:
{
JSONObject jSphereParticleEmitter = jParticleSystem.getJSONObject("spe");
SphereParticleEmitter emitter = particleSystem.getSphereParticleEmitter();
emitter.setCount(jSphereParticleEmitter.getInt("c"));
emitter.setLifeTime(jSphereParticleEmitter.getLong("lt"));
emitter.setLifeTimeRnd(jSphereParticleEmitter.getLong("ltrnd"));
emitter.setMass((float) jSphereParticleEmitter.getDouble("m"));
emitter.setMassRnd((float) jSphereParticleEmitter.getDouble("mrnd"));
emitter.getVelocity().setX((float) jSphereParticleEmitter.getDouble("vx"));
emitter.getVelocity().setY((float) jSphereParticleEmitter.getDouble("vy"));
emitter.getVelocity().setZ((float) jSphereParticleEmitter.getDouble("vz"));
emitter.getVelocityRnd().setX((float) jSphereParticleEmitter.getDouble("vrndx"));
emitter.getVelocityRnd().setY((float) jSphereParticleEmitter.getDouble("vrndy"));
emitter.getVelocityRnd().setZ((float) jSphereParticleEmitter.getDouble("vrndz"));
emitter.getColorStart().setRed((float) jSphereParticleEmitter.getDouble("csr"));
emitter.getColorStart().setGreen((float) jSphereParticleEmitter.getDouble("csg"));
emitter.getColorStart().setBlue((float) jSphereParticleEmitter.getDouble("csb"));
emitter.getColorStart().setAlpha((float) jSphereParticleEmitter.getDouble("csa"));
emitter.getColorEnd().setRed((float) jSphereParticleEmitter.getDouble("cer"));
emitter.getColorEnd().setGreen((float) jSphereParticleEmitter.getDouble("ceg"));
emitter.getColorEnd().setBlue((float) jSphereParticleEmitter.getDouble("ceb"));
emitter.getColorEnd().setAlpha((float) jSphereParticleEmitter.getDouble("cea"));
emitter.getCenter().setX((float) jSphereParticleEmitter.getDouble("cx"));
emitter.getCenter().setY((float) jSphereParticleEmitter.getDouble("cy"));
emitter.getCenter().setZ((float) jSphereParticleEmitter.getDouble("cz"));
emitter.setRadius((float) jSphereParticleEmitter.getDouble("r"));
break;
}
default:
System.out.println("ModelMetaDataFileExport::export(): unknown particle system emitter '" + particleSystem.getEmitter() + "'");
}
}
// done
return levelEditorEntity;
}
use of net.drewke.tdme.engine.model.Model in project tdme by andreasdr.
the class LevelEditorEntityBoundingVolume method setupConvexMesh.
/**
* Setup bounding volume sphere
* @param file
*/
public void setupConvexMesh(String file) {
modelMeshFile = file;
try {
Model convexMeshModel = DAEReader.read(new File(levelEditorEntity.getFileName()).getAbsoluteFile().getCanonicalFile().getParentFile().getPath(), file);
// take original as bounding volume
boundingVolume = new ConvexMesh(new Object3DModel(convexMeshModel));
// prepare convex mesh model to be displayed
convexMeshModel.setId(convexMeshModel.getId() + "_model_bv." + id + "." + (staticIdx++));
convexMeshModel.getImportTransformationsMatrix().scale(1.01f);
PrimitiveModel.setupConvexMeshModel(convexMeshModel);
model = convexMeshModel;
} catch (Exception e) {
e.printStackTrace();
}
updateLevelEditorEntity();
}
use of net.drewke.tdme.engine.model.Model in project tdme by andreasdr.
the class LevelEditorEntityLibrary method addModel.
/**
* Adds a model
* @param id
* @param name
* @param description
* @param path name
* @param file name
* @param pivot
* @return level editor entity
* @throws Exception
*/
public LevelEditorEntity addModel(int id, String name, String description, String pathName, String fileName, Vector3 pivot) throws Exception {
File modelFile = new File(pathName + File.separator + fileName);
LevelEditorEntity levelEditorEntity = null;
// parse models
if (modelFile.getName().toLowerCase().endsWith(".dae")) {
Model model = DAEReader.read(modelFile.getParentFile().getCanonicalPath(), modelFile.getName());
levelEditorEntity = new LevelEditorEntity(id == ID_ALLOCATE ? allocateEntityId() : id, LevelEditorEntity.EntityType.MODEL, name, description, null, pathName + File.separator + fileName, model.getId().replace("\\", "_").replace("/", "_").replace(":", "_") + ".png", model, new Vector3(0f, 0f, 0f));
} else if (modelFile.getName().toLowerCase().endsWith(".tm")) {
Model model = TMReader.read(modelFile.getParentFile().getCanonicalPath(), modelFile.getName());
levelEditorEntity = new LevelEditorEntity(id == ID_ALLOCATE ? allocateEntityId() : id, LevelEditorEntity.EntityType.MODEL, name, description, null, pathName + File.separator + fileName, model.getId().replace("\\", "_").replace("/", "_").replace(":", "_") + ".png", model, new Vector3(0f, 0f, 0f));
} else if (modelFile.getName().toLowerCase().endsWith(".tmm")) {
levelEditorEntity = ModelMetaDataFileImport.doImport(id == ID_ALLOCATE ? allocateEntityId() : id, pathName, fileName);
} else {
throw new Exception(pathName + "/" + fileName + ": Unknown model file format");
}
// add model
addEntity(levelEditorEntity);
//
return levelEditorEntity;
}
Aggregations