tcr/java/src/game/renderer/model/TexturedQuad.java

73 lines
2.8 KiB
Java
Raw Normal View History

2025-03-11 00:23:54 +01:00
package game.renderer.model;
2025-03-19 23:49:49 +01:00
import org.lwjgl.opengl.GL11;
2025-03-11 00:23:54 +01:00
import game.renderer.DefaultVertexFormats;
import game.renderer.RenderBuffer;
import game.renderer.Tessellator;
import game.world.Vec3;
public class TexturedQuad
{
public final PositionTextureVertex[] vertices = new PositionTextureVertex[4];
public TexturedQuad(Vec3 u2v1, Vec3 u1v1, Vec3 u1v2, Vec3 u2v2, float u1, float v1, float u2, float v2, float tw, float th)
{
// float ax = 0.0F / tw;
// float ay = 0.0F / th;
// this.vertices[0] = u2v1.toTextureVertex(u2 / tw - ax, v1 / th + ay);
// this.vertices[1] = u1v1.toTextureVertex(u1 / tw + ax, v1 / th + ay);
// this.vertices[2] = u1v2.toTextureVertex(u1 / tw + ax, v2 / th - ay);
// this.vertices[3] = u2v2.toTextureVertex(u2 / tw - ax, v2 / th - ay);
this.vertices[0] = u2v1.toTextureVertex(u2 / tw, v1 / th);
this.vertices[1] = u1v1.toTextureVertex(u1 / tw, v1 / th);
this.vertices[2] = u1v2.toTextureVertex(u1 / tw, v2 / th);
this.vertices[3] = u2v2.toTextureVertex(u2 / tw, v2 / th);
}
public TexturedQuad(Vec3[] verts, int[] uvs, float tw, float th)
{
this(verts[0], verts[1], verts[2], verts[3], uvs[0], uvs[1], uvs[2], uvs[3], tw, th);
}
public TexturedQuad(Vec3[] verts, float u1, float v1, float u2, float v2, float tw, float th)
{
this(verts[0], verts[1], verts[2], verts[3], u1, v1, u2, v2, tw, th);
}
public void flipFace()
{
PositionTextureVertex[] vertices = new PositionTextureVertex[this.vertices.length];
for (int i = 0; i < this.vertices.length; ++i)
{
vertices[i] = this.vertices[this.vertices.length - i - 1];
}
System.arraycopy(vertices, 0, this.vertices, 0, this.vertices.length);
}
public void addTo(RenderBuffer renderer, float scale)
{
Vec3 norma = this.vertices[1].pos.subtractReverse(this.vertices[0].pos);
Vec3 normb = this.vertices[1].pos.subtractReverse(this.vertices[2].pos);
Vec3 norm = normb.crossProduct(norma).normalize();
float nx = (float)norm.xCoord;
float ny = (float)norm.yCoord;
float nz = (float)norm.zCoord;
// if (this.invNorm)
// {
// nx = -nx;
// ny = -ny;
// nz = -nz;
// }
2025-03-19 23:49:49 +01:00
renderer.begin(GL11.GL_QUADS, DefaultVertexFormats.OLDMODEL_POSITION_TEX_NORMAL);
2025-03-11 00:23:54 +01:00
for (int i = 0; i < 4; ++i)
{
PositionTextureVertex vertex = this.vertices[i];
renderer.pos(vertex.pos.xCoord * (double)scale, vertex.pos.yCoord * (double)scale, vertex.pos.zCoord * (double)scale)
.tex((double)vertex.texX, (double)vertex.texY).normal(nx, ny, nz).endVertex();
}
// Tessellator.getInstance();
Tessellator.draw();
}
}