added meshes for scene creation
This commit is contained in:
parent
665e11b6c2
commit
fd3338aaa1
134
ShootingStars/src/org/wyrez/shootingstars/mesh/CinemaHex.java
Normal file
134
ShootingStars/src/org/wyrez/shootingstars/mesh/CinemaHex.java
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Darth Affe <http://wyrez.org> and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.wyrez.shootingstars.mesh;
|
||||||
|
|
||||||
|
import com.jme3.math.FastMath;
|
||||||
|
import com.jme3.math.Vector3f;
|
||||||
|
import com.jme3.scene.Mesh;
|
||||||
|
import com.jme3.scene.VertexBuffer;
|
||||||
|
import com.jme3.util.BufferUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Darth Affe
|
||||||
|
*/
|
||||||
|
public class CinemaHex extends Mesh {
|
||||||
|
/* The vertices are located as following (continuing for the other side)
|
||||||
|
*
|
||||||
|
* 12 18 15 21
|
||||||
|
* |\ /|
|
||||||
|
* | \ / |
|
||||||
|
* | \ / |
|
||||||
|
* 0 \6 \____________/ / 3 9
|
||||||
|
* \13|19 14|20/
|
||||||
|
* \ | | /
|
||||||
|
* \|____________|/
|
||||||
|
* 1 7 2 8
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static final short[] GEOMETRY_INDICES_DATA = {
|
||||||
|
12, 0, 7,/**/ 7, 19, 12,/**/ 13, 1, 8,/**/ 8, 20, 13,/**/ 14, 2, 9,/**/ 9, 21, 14,
|
||||||
|
15, 3, 10,/**/ 10, 22, 15,/**/ 16, 4, 11,/**/ 11, 23, 16,/**/ 17, 5, 6,/**/ 6, 18, 17
|
||||||
|
};
|
||||||
|
private static final float[] GEOMETRY_NORMALS_DATA = {};
|
||||||
|
private static final float[] GEOMETRY_TEXTURE_DATA = {
|
||||||
|
0, 1,/**/ 0, 1,/**/ 0, 1,/**/ 0, 1,/**/ 0, 1,/**/ 0, 1,
|
||||||
|
1, 1,/**/ 1, 1,/**/ 1, 1,/**/ 1, 1,/**/ 1, 1,/**/ 1, 1,
|
||||||
|
0, 0,/**/ 0, 0,/**/ 0, 0,/**/ 0, 0,/**/ 0, 0,/**/ 0, 0,
|
||||||
|
1, 0,/**/ 1, 0,/**/ 1, 0,/**/ 1, 0,/**/ 1, 0,/**/ 1, 0
|
||||||
|
};
|
||||||
|
private Vector3f center;
|
||||||
|
private float width;
|
||||||
|
private float radius;
|
||||||
|
private float height;
|
||||||
|
|
||||||
|
public CinemaHex(float width, float height) {
|
||||||
|
this(Vector3f.ZERO, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CinemaHex(Vector3f center, float width, float height) {
|
||||||
|
super();
|
||||||
|
updateGeometry(center, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Empty constructor for serialization only. Do not use!
|
||||||
|
*/
|
||||||
|
public CinemaHex() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CinemaHex clone() {
|
||||||
|
return new CinemaHex(center.clone(), width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final void updateGeometry(Vector3f center, float width, float height) {
|
||||||
|
this.center = center;
|
||||||
|
this.width = width;
|
||||||
|
this.radius = width * 2f / FastMath.sqrt(3f);
|
||||||
|
this.height = height;
|
||||||
|
updateGeometryIndices();
|
||||||
|
updateGeometryNormals();
|
||||||
|
updateGeometryTextures();
|
||||||
|
updateGeometryVertices();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateGeometryIndices() {
|
||||||
|
if (getBuffer(VertexBuffer.Type.Index) == null) {
|
||||||
|
setBuffer(VertexBuffer.Type.Index, 3, BufferUtils.createShortBuffer(GEOMETRY_INDICES_DATA));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateGeometryNormals() {
|
||||||
|
if (getBuffer(VertexBuffer.Type.Normal) == null) {
|
||||||
|
setBuffer(VertexBuffer.Type.Normal, 3, BufferUtils.createFloatBuffer(GEOMETRY_NORMALS_DATA));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateGeometryTextures() {
|
||||||
|
if (getBuffer(VertexBuffer.Type.TexCoord) == null) {
|
||||||
|
setBuffer(VertexBuffer.Type.TexCoord, 2, BufferUtils.createFloatBuffer(GEOMETRY_TEXTURE_DATA));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateGeometryVertices() {
|
||||||
|
Vector3f[] vertices = computeVertices();
|
||||||
|
setBuffer(VertexBuffer.Type.Position, 3, BufferUtils.createFloatBuffer(vertices));
|
||||||
|
updateBound();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Vector3f[] computeVertices() {
|
||||||
|
Vector3f[] vertices = new Vector3f[24];
|
||||||
|
//bottom
|
||||||
|
Vector3f verticesCenter = center;
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
vertices[i] = new Vector3f(verticesCenter.x + radius * FastMath.cos(i * FastMath.PI / 3f),
|
||||||
|
verticesCenter.y, (verticesCenter.z + radius * FastMath.sin(i * FastMath.PI / 3f)));
|
||||||
|
vertices[i + 6] = vertices[i].clone();
|
||||||
|
}
|
||||||
|
//top
|
||||||
|
verticesCenter = center.add(0f, height, 0f);
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
vertices[i + 12] = new Vector3f(verticesCenter.x + radius * FastMath.cos(i * FastMath.PI / 3f),
|
||||||
|
verticesCenter.y, (verticesCenter.z + radius * FastMath.sin(i * FastMath.PI / 3f)));
|
||||||
|
vertices[i + 18] = vertices[i + 12].clone();
|
||||||
|
}
|
||||||
|
return vertices;
|
||||||
|
}
|
||||||
|
}
|
||||||
140
ShootingStars/src/org/wyrez/shootingstars/mesh/HexPrism.java
Normal file
140
ShootingStars/src/org/wyrez/shootingstars/mesh/HexPrism.java
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Darth Affe <http://wyrez.org> and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.wyrez.shootingstars.mesh;
|
||||||
|
|
||||||
|
import com.jme3.math.FastMath;
|
||||||
|
import com.jme3.math.Vector3f;
|
||||||
|
import com.jme3.scene.Mesh;
|
||||||
|
import com.jme3.scene.VertexBuffer.Type;
|
||||||
|
import com.jme3.util.BufferUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Darth Affe
|
||||||
|
*/
|
||||||
|
public class HexPrism extends Mesh {
|
||||||
|
/* The vertices are located as following
|
||||||
|
*
|
||||||
|
* 10____________9
|
||||||
|
* /| |\
|
||||||
|
* / | | \
|
||||||
|
* / 3|__________|2 \
|
||||||
|
* 11/ / \ \ 8
|
||||||
|
* |\ / 7 \ /|
|
||||||
|
* | \ / |
|
||||||
|
* |/ \ 0 / \|
|
||||||
|
* 4 \ \____________/13 / 1
|
||||||
|
* \ |12 | /
|
||||||
|
* \ | | /
|
||||||
|
* \|____________|/
|
||||||
|
* 5 6
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//TODO remove bottom for better performance
|
||||||
|
private static final short[] GEOMETRY_INDICES_DATA = {
|
||||||
|
0, 1, 2,/**/ 2, 3, 0,/**/ 0, 3, 4,/**/ 4, 5, 0,/**/ 0, 5, 6,/**/ 6, 1, 0, // bottom
|
||||||
|
//0, 1, 6,/**/ 6, 5, 0,/**/ 0, 5, 4,/**/ 4, 3, 0,/**/ 0, 3, 2,/**/ 2, 1, 0, // reverse bottom
|
||||||
|
7, 8, 13,/**/ 13, 12, 7,/**/ 7, 12, 11,/**/ 11, 10, 7,/**/ 7, 10, 9,/**/ 9, 8, 7, // top
|
||||||
|
//7, 8, 9,/**/ 9, 10, 7,/**/ 7, 10, 11,/**/ 11, 12, 7,/**/ 7, 12, 13,/**/ 13, 8, 7, // reverse top
|
||||||
|
1, 8, 9,/**/ 9, 2, 1,/**/ 2, 9, 10,/**/ 10, 3, 2,/**/ 3, 10, 11,/**/ 11, 4, 3, //side
|
||||||
|
4, 11, 12,/**/ 12, 5, 4,/**/ 5, 12, 13,/**/ 13, 6, 5,/**/ 6, 13, 8,/**/ 8, 1, 6 //side
|
||||||
|
};
|
||||||
|
private static final float[] GEOMETRY_NORMALS_DATA = {
|
||||||
|
0, 1, 0,/**/ 0, 1, 0,/**/ 0, 1, 0,/**/ 0, 1, 0,/**/ 0, 1, 0,/**/ 0, 1, 0,/**/ 0, 1, 0, //bottom
|
||||||
|
0, 1, 0,/**/ 0, 1, 0,/**/ 0, 1, 0,/**/ 0, 1, 0,/**/ 0, 1, 0,/**/ 0, 1, 0,/**/ 0, 1, 0 //top
|
||||||
|
};
|
||||||
|
//TODO to texture sides more vertices are needed
|
||||||
|
private static final float[] GEOMETRY_TEXTURE_DATA = {
|
||||||
|
0.5f, 0.5f, 0, 0.5f, 0.25f, 0, 0.75f, 0, 1, 0.5f, 0.75f, 1, 0.25f, 1,//bottom
|
||||||
|
0.5f, 0.5f, 0, 0.5f, 0.25f, 0, 0.75f, 0, 1, 0.5f, 0.75f, 1, 0.25f, 1 //top
|
||||||
|
};
|
||||||
|
private Vector3f center;
|
||||||
|
private float radius;
|
||||||
|
private float height;
|
||||||
|
|
||||||
|
public HexPrism(float radius, float height) {
|
||||||
|
this(Vector3f.ZERO, radius, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
public HexPrism(Vector3f center, float radius, float height) {
|
||||||
|
super();
|
||||||
|
updateGeometry(center, radius, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Empty constructor for serialization only. Do not use!
|
||||||
|
*/
|
||||||
|
public HexPrism() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HexPrism clone() {
|
||||||
|
return new HexPrism(center.clone(), radius, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final void updateGeometry(Vector3f center, float radius, float height) {
|
||||||
|
this.center = center;
|
||||||
|
this.radius = radius;
|
||||||
|
this.height = height;
|
||||||
|
updateGeometryIndices();
|
||||||
|
updateGeometryNormals();
|
||||||
|
updateGeometryTextures();
|
||||||
|
updateGeometryVertices();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateGeometryIndices() {
|
||||||
|
if (getBuffer(Type.Index) == null) {
|
||||||
|
setBuffer(Type.Index, 3, BufferUtils.createShortBuffer(GEOMETRY_INDICES_DATA));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateGeometryNormals() {
|
||||||
|
if (getBuffer(Type.Normal) == null) {
|
||||||
|
setBuffer(Type.Normal, 3, BufferUtils.createFloatBuffer(GEOMETRY_NORMALS_DATA));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateGeometryTextures() {
|
||||||
|
if (getBuffer(Type.TexCoord) == null) {
|
||||||
|
setBuffer(Type.TexCoord, 2, BufferUtils.createFloatBuffer(GEOMETRY_TEXTURE_DATA));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateGeometryVertices() {
|
||||||
|
Vector3f[] vertices = computeVertices();
|
||||||
|
setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(vertices));
|
||||||
|
updateBound();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Vector3f[] computeVertices() {
|
||||||
|
Vector3f[] vertices = new Vector3f[14];
|
||||||
|
//bottom
|
||||||
|
vertices[0] = center;
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
vertices[i + 1] = new Vector3f(vertices[0].x + radius * FastMath.cos(i * FastMath.PI / 3),
|
||||||
|
vertices[0].y, (vertices[0].z + radius * FastMath.sin(i * FastMath.PI / 3)));
|
||||||
|
}
|
||||||
|
//top
|
||||||
|
vertices[7] = center.add(0f, height, 0f);
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
vertices[i + 8] = new Vector3f(vertices[7].x + radius * FastMath.cos(i * FastMath.PI / 3),
|
||||||
|
vertices[7].y, (vertices[7].z + radius * FastMath.sin(i * FastMath.PI / 3)));
|
||||||
|
}
|
||||||
|
return vertices;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user