Blame |
Last modification |
View Log
| RSS feed
package com.gebauz.bauzoid2.graphics.geometry;
import com.gebauz.bauzoid2.math.Vector4;
/** Generate quad and other geometry. */
public class GeometryUtil
{
static public SimpleGeometry createQuad(float minX, float minY, float maxX, float maxY,
float minS, float minT, float maxS, float maxT, Vector4 color)
{
SimpleGeometry mesh = new SimpleGeometry(Geometry.PrimitiveType.TRIANGLES);
AttributeArray vertices = new AttributeArray(SimpleGeometry.POSITION_COORD_PER_ELEMENT * 6);
vertices.fill(minX, minY, 0.0f);
vertices.fill(maxX, minY, 0.0f);
vertices.fill(minX, maxY, 0.0f);
vertices.fill(minX, maxY, 0.0f);
vertices.fill(maxX, minY, 0.0f);
vertices.fill(maxX, maxY, 0.0f);
AttributeArray colors = new AttributeArray(SimpleGeometry.COLOR_COORD_PER_ELEMENT * 6);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
AttributeArray texCoords = new AttributeArray(SimpleGeometry.TEXCOORD_COORD_PER_ELEMENT * 6);
texCoords.fill(minS, maxT);
texCoords.fill(maxS, maxT);
texCoords.fill(minS, minT);
texCoords.fill(minS, minT);
texCoords.fill(maxS, maxT);
texCoords.fill(maxS, minT);
mesh.setPositions(vertices.getAttributeArray());
mesh.setColors(colors.getAttributeArray());
mesh.setTexCoords(texCoords.getAttributeArray());
return mesh;
}
public static SimpleGeometry createQuad(float minX, float minY, float maxX, float maxY,
float minS, float minT, float maxS, float maxT)
{
return createQuad(minX, minY, maxX, maxY, minS, minT, maxS, maxT, new Vector4(1.0f, 1.0f, 1.0f, 1.0f));
}
public static SimpleGeometry createQuad(float minX, float minY, float maxX, float maxY, Vector4 color)
{
return createQuad(minX, minY, maxX, maxY, 0.0f, 0.0f, 1.0f, 1.0f, new Vector4(1.0f, 1.0f, 1.0f, 1.0f));
}
public static SimpleGeometry createQuad(float minX, float minY, float maxX, float maxY)
{
return createQuad(minX, minY, maxX, maxY, 0.0f, 0.0f, 1.0f, 1.0f);
}
static public SimpleGeometry createSubdividedQuad(float minX, float minY, float maxX, float maxY,
float minS, float minT, float maxS, float maxT, Vector4 color, int subdivisionX, int subdivisionY)
{
SimpleGeometry mesh = new SimpleGeometry(Geometry.PrimitiveType.TRIANGLES);
final int numTiles = (subdivisionX + 1) * (subdivisionY + 1);
AttributeArray vertices = new AttributeArray(SimpleGeometry.POSITION_COORD_PER_ELEMENT * 6 * numTiles);
AttributeArray colors = new AttributeArray(SimpleGeometry.COLOR_COORD_PER_ELEMENT * 6 * numTiles);
AttributeArray texCoords = new AttributeArray(SimpleGeometry.TEXCOORD_COORD_PER_ELEMENT * 6 * numTiles);
float stepX = (maxX - minX) / (subdivisionX + 1);
float stepY = (maxY - minY) / (subdivisionY + 1);
float stepS = (maxS - minS) / (subdivisionX + 1);
float stepT = (maxT - minT) / (subdivisionY + 1);
float segmentX = minX;
float segmentY = minY;
float segmentS = minS;
float segmentT = maxT;
for (int y = 0; y < (subdivisionY + 1); y++)
{
for (int x = 0; x < (subdivisionX + 1); x++)
{
float segmentMinX = segmentX;
float segmentMaxX = segmentX + stepX;
float segmentMinY = segmentY;
float segmentMaxY = segmentY + stepY;
float segmentMinS = segmentS;
float segmentMaxS = (segmentS + stepS);
float segmentMinT = (segmentT - stepT);
float segmentMaxT = segmentT;
vertices.fill(segmentMinX, segmentMinY, 0.0f);
vertices.fill(segmentMaxX, segmentMinY, 0.0f);
vertices.fill(segmentMinX, segmentMaxY, 0.0f);
vertices.fill(segmentMinX, segmentMaxY, 0.0f);
vertices.fill(segmentMaxX, segmentMinY, 0.0f);
vertices.fill(segmentMaxX, segmentMaxY, 0.0f);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
texCoords.fill(segmentMinS, segmentMaxT);
texCoords.fill(segmentMaxS, segmentMaxT);
texCoords.fill(segmentMinS, segmentMinT);
texCoords.fill(segmentMinS, segmentMinT);
texCoords.fill(segmentMaxS, segmentMaxT);
texCoords.fill(segmentMaxS, segmentMinT);
segmentX += stepX;
segmentS += stepS;
}
segmentX = minX;
segmentS = minS;
segmentY += stepY;
segmentT -= stepT;
}
/* AttributeArray vertices = new AttributeArray(SimpleGeometry.POSITION_COORD_PER_ELEMENT * 6);
vertices.fill(minX, minY, 0.0f);
vertices.fill(maxX, minY, 0.0f);
vertices.fill(minX, maxY, 0.0f);
vertices.fill(minX, maxY, 0.0f);
vertices.fill(maxX, minY, 0.0f);
vertices.fill(maxX, maxY, 0.0f);
AttributeArray colors = new AttributeArray(SimpleGeometry.COLOR_COORD_PER_ELEMENT * 6);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
colors.fill(color.x, color.y, color.z, color.w);
AttributeArray texCoords = new AttributeArray(SimpleGeometry.TEXCOORD_COORD_PER_ELEMENT * 6);
texCoords.fill(minS, maxT);
texCoords.fill(maxS, maxT);
texCoords.fill(minS, minT);
texCoords.fill(minS, minT);
texCoords.fill(maxS, maxT);
texCoords.fill(maxS, minT);*/
mesh.setPositions(vertices.getAttributeArray());
mesh.setColors(colors.getAttributeArray());
mesh.setTexCoords(texCoords.getAttributeArray());
return mesh;
}
public static SimpleGeometry createSubdividedQuad(float minX, float minY, float maxX, float maxY,
float minS, float minT, float maxS, float maxT, int subdivisionX, int subdivisionY)
{
return createSubdividedQuad(minX, minY, maxX, maxY, minS, minT, maxS, maxT, new Vector4(1.0f, 1.0f, 1.0f, 1.0f),
subdivisionX, subdivisionY);
}
public static SimpleGeometry createSubdividedQuad(float minX, float minY, float maxX, float maxY,
Vector4 color, int subdivisionX, int subdivisionY)
{
return createSubdividedQuad(minX, minY, maxX, maxY, 0.0f, 0.0f, 1.0f, 1.0f, new Vector4(1.0f, 1.0f, 1.0f, 1.0f),
subdivisionX, subdivisionY);
}
public static SimpleGeometry createSubdividedQuad(float minX, float minY, float maxX, float maxY,
int subdivisionX, int subdivisionY)
{
return createSubdividedQuad(minX, minY, maxX, maxY, 0.0f, 0.0f, 1.0f, 1.0f, subdivisionX, subdivisionY);
}
}