package rajawali.primitives; import rajawali.BaseObject3D; public class Cube extends BaseObject3D { private float mSize; private boolean mIsSkybox; public Cube(float size) { super(); mSize = size; mHasCubemapTexture = false; init(); } public Cube(float size, boolean isSkybox) { super(); mIsSkybox = isSkybox; mSize = size; mHasCubemapTexture = true; init(); } public Cube(float size, boolean isSkybox, boolean hasCubemapTexture) { super(); mIsSkybox = isSkybox; mSize = size; mHasCubemapTexture = hasCubemapTexture; init(); } private void init() { float halfSize = mSize * .5f; float[] vertices = { halfSize, halfSize, halfSize, -halfSize, halfSize, halfSize, -halfSize,-halfSize, halfSize, halfSize,-halfSize, halfSize, //0-1-halfSize-3 front halfSize, halfSize, halfSize, halfSize,-halfSize, halfSize, halfSize,-halfSize,-halfSize, halfSize, halfSize,-halfSize,//0-3-4-5 right halfSize,-halfSize,-halfSize, -halfSize,-halfSize,-halfSize, -halfSize, halfSize,-halfSize, halfSize, halfSize,-halfSize,//4-7-6-5 back -halfSize, halfSize, halfSize, -halfSize, halfSize,-halfSize, -halfSize,-halfSize,-halfSize, -halfSize,-halfSize, halfSize,//1-6-7-halfSize left halfSize, halfSize, halfSize, halfSize, halfSize,-halfSize, -halfSize, halfSize,-halfSize, -halfSize, halfSize, halfSize, //top halfSize,-halfSize, halfSize, -halfSize,-halfSize, halfSize, -halfSize,-halfSize,-halfSize, halfSize,-halfSize,-halfSize,//bottom }; float t = 1; float[] textureCoords = { 0, 1, 1, 1, 1, 0, 0, 0, // front 0, 1, 1, 1, 1, 0, 0, 0, // up 0, 1, 1, 1, 1, 0, 0, 0, // back 0, 1, 1, 1, 1, 0, 0, 0, // down 0, 1, 1, 1, 1, 0, 0, 0, // right 0, 1, 1, 1, 1, 0, 0, 0, // left }; float[] skyboxTextureCoords = { -t,t,t, t,t,t, t,-t,t, -t,-t,t, // front t,t,-t, t,-t,-t, t,-t,t, t,t,t, // up -t,-t,-t, t,-t,-t, t,t,-t, -t,t,-t, // back -t,t,-t, -t,t,t, -t,-t,t,-t,-t,-t, // down -t,t,t, -t,t,-t, t,t,-t, t,t,t, // right -t,-t,t, t,-t,t, t,-t,-t, -t,-t,-t, // left }; float[] skybox2TextureCoords = { .25f, .3333f, .5f, .3333f, .5f, .6666f, .25f, .6666f, // front .25f, .3333f, .25f, .6666f, 0, .6666f, 0, .3333f, // left 1, .6666f, .75f, .6666f, .75f, .3333f, 1, .3333f, // back .5f, .3333f, .75f, .3333f, .75f, .6666f, .5f, .6666f, // right .25f, .3333f, .25f, 0, .5f, 0, .5f, .3333f, // up .25f, .6666f, .5f, .6666f, .5f, 1, .25f, 1 // down }; if(mIsSkybox && !mHasCubemapTexture) skyboxTextureCoords = skybox2TextureCoords; float[] colors = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; float n = 1; float[] normals = { 0, 0, n, 0, 0, n, 0, 0, n, 0, 0, n, //front n, 0, 0, n, 0, 0, n, 0, 0, n, 0, 0, // right 0, 0,-n, 0, 0,-n, 0, 0,-n, 0, 0,-n, //back -n, 0, 0, -n, 0, 0, -n, 0, 0, -n, 0, 0, // left 0, n, 0, 0, n, 0, 0, n, 0, 0, n, 0, // top 0,-n, 0, 0,-n, 0, 0,-n, 0, 0,-n, 0, // bottom }; int[] indices = { 0,1,2, 0,2,3, 4,5,6, 4,6,7, 8,9,10, 8,10,11, 12,13,14, 12,14,15, 16,17,18, 16,18,19, 20,21,22, 20,22,23, }; int[] skyboxIndices = { 2,1,0, 3,2,0, 6,5,4, 7,6,4, 10,9,8, 11, 10, 8, 14, 13, 12, 15, 14, 12, 18, 17, 16, 19, 18, 16, 22, 21, 20, 23, 22, 20 }; setData(vertices, normals, mIsSkybox ? skyboxTextureCoords : textureCoords, colors, mIsSkybox && mHasCubemapTexture ? skyboxIndices : indices); } }