/** * Returns the vertices of the corners for the specified face in counter clockwise order. */ public @Nonnull List<Vertex> getCornersWithUvForFace(@Nonnull EnumFacing face) { return getCornersWithUvForFace(face, 0, 1, 0, 1); }
public HalfBakedQuad(@Nonnull BoundingBox bb, @Nonnull EnumFacing face, float umin, float umax, float vmin, float vmax, @Nullable TextureAtlasSprite tex, @Nullable Vector4f color) { this.corners = bb.getCornersWithUvForFace(face, umin, umax, vmin, vmax); this.tex = tex != null ? tex : Minecraft.getMinecraft().getTextureMapBlocks().getMissingSprite(); this.color = color != null ? color : NO_COLOR; this.face = face; }
private @Nullable List<Vertex> createVerticesForDir(BoundingBox refBB, VertexTransform xform) { List<Vertex> result = new ArrayList<Vertex>(24); for (EnumFacing face : EnumFacing.VALUES) { if (face != null) { result.addAll(refBB.getCornersWithUvForFace(face)); } } for (Vertex v : result) { xform.apply(v.xyz); Vector3f normal = v.normal; if (normal != null) { xform.applyToNormal(normal); } } return result; }
public static void addBakedQuadForFace(@Nonnull List<BakedQuad> quads, @Nonnull BoundingBox bb, @Nonnull TextureAtlasSprite tex, @Nonnull EnumFacing face, @Nonnull Vector4f uvs, @Nullable VertexTransform xform, boolean rotateUV, boolean flipU, boolean recolor, @Nullable Vector4f color) { UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder(DefaultVertexFormats.ITEM); List<Vertex> corners = bb.getCornersWithUvForFace(face, uvs.x, uvs.z, uvs.y, uvs.w); builder.setQuadOrientation(face); builder.setTexture(tex);
@Override public void apply(@Nonnull EnumFacing e) { for (Vertex v : bb.getCornersWithUvForFace(e, minU, maxU, minV, maxV)) { tes.pos(v.x(), v.y(), v.z()).tex(v.u(), v.v()).endVertex(); } } });
@Override public void apply(@Nonnull EnumFacing e) { for (Vertex v : bb.getCornersWithUvForFace(e, minU, maxU, maxV, minV)) { worldRendererIn.pos(v.x(), v.y(), v.z()).color(0.5F, 0.5F, 0.5F, 1.0F).tex(v.u(), v.v()).lightmap(240, 240).endVertex(); } } });
@Override public void apply(@Nonnull RenderFace e) { for (Vertex v : e.bb.getCornersWithUvForFace(e.face, e.minU, e.maxU, e.minV, e.maxV)) { // DefaultVertexFormats.BLOCK buffer.pos(v.x(), v.y(), v.z()).color(e.r, e.g, e.b, e.a).tex(v.u(), v.v()).lightmap(e.light1, e.light2).endVertex(); } } }
EnumFacing face = itr.next(); if (face != componentDirection && face != componentDirection.getOpposite()) { List<Vertex> corners = bbb.getCornersWithUvForFace(face, texture.getMinU(), texture.getMaxU(), texture.getMinV(), texture.getMaxV()); for (Vertex corner : corners) { data.add(new CachableRenderStatement.AddVertexWithUV(corner.x(), corner.y(), corner.z(), corner.uv.x, corner.uv.y, colorv));
double width = Math.min(bb.sizeX(), bb.sizeY()) * 15f / 16f; List<Vertex> corners = bb.getCornersWithUvForFace(dir, minU, maxU, minV, maxV); moveEdgeCorners(corners, vDir, width); moveEdgeCorners(corners, componentDirection.getOpposite(), sideScale); corners = bb.getCornersWithUvForFace(dir, minU, maxU, minV, maxV); moveEdgeCorners(corners, vDir.getOpposite(), width); moveEdgeCorners(corners, componentDirection.getOpposite(), sideScale); List<Vertex> corners = component.bound.getCornersWithUvForFace(component.getDirection(), tex2.getMinU(), tex2.getMaxU(), tex2.getMinV(), tex2.getMaxV()); List<Vertex> vertices = new ArrayList<>(); for (Vertex c : corners) {
@Override public void apply(@Nonnull RenderFace e) { for (Vertex v : e.bb.getCornersWithUvForFace(e.face, e.minU, e.maxU, e.minV, e.maxV)) { // DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL buffer.pos(v.x(), v.y(), v.z()).tex(v.u(), v.v()).color(e.r, e.g, e.b, e.a).normal(v.nx(), v.ny(), v.nz()).endVertex(); } } }
protected void renderConduitDynamic(@Nonnull IConduitTexture tex, @Nonnull IClientConduit.WithDefaultRendering conduit, @Nonnull CollidableComponent component, float brightness) { GlStateManager.color(1, 1, 1); if (component.isDirectional() && component.data == null) { final EnumFacing componentDirection = component.getDirection(); float scaleFactor = 0.75f; float xLen = Math.abs(componentDirection.getFrontOffsetX()) == 1 ? 1 : scaleFactor; float yLen = Math.abs(componentDirection.getFrontOffsetY()) == 1 ? 1 : scaleFactor; float zLen = Math.abs(componentDirection.getFrontOffsetZ()) == 1 ? 1 : scaleFactor; BoundingBox cube = component.bound; BoundingBox bb = cube.scale(xLen, yLen, zLen); TextureAtlasSprite sprite = tex.getSprite(); drawDynamicSection(bb, sprite.getInterpolatedU(tex.getUv().x * 16), sprite.getInterpolatedU(tex.getUv().z * 16), sprite.getInterpolatedV(tex.getUv().y * 16), sprite.getInterpolatedV(tex.getUv().w * 16), componentDirection, false, conduit.shouldMirrorTexture()); if (conduit.getConnectionMode(componentDirection) == ConnectionMode.DISABLED) { TextureAtlasSprite tex2 = ConduitBundleRenderManager.instance.getConnectorIcon(component.data); List<Vertex> corners = component.bound.getCornersWithUvForFace(componentDirection, tex2.getMinU(), tex2.getMaxU(), tex2.getMinV(), tex2.getMaxV()); RenderUtil.addVerticesToTessellator(corners, DefaultVertexFormats.POSITION_TEX, false); } } else { // TODO: HL: I commented this out because component.getDirection() (the second to last parameter) is always null in // this else branch and drawDynamicSection() with isTransmission=true (last parameter) would NPE on it. (Not a // mistake in the component.dir encapsulation, this was that way before.) // drawDynamicSection(component.bound, tex.getMinU(), tex.getMaxU(), tex.getMinV(), tex.getMaxV(), dir, true); } }
private void renderSelection() { if (selection == null) { return; } BoundingBox bb = new BoundingBox(selection.config.getLocation()); TextureAtlasSprite icon = selectedFaceIcon.get(TextureAtlasSprite.class); List<Vertex> corners = bb.getCornersWithUvForFace(selection.face, icon.getMinU(), icon.getMaxU(), icon.getMinV(), icon.getMaxV()); GlStateManager.disableDepth(); GlStateManager.disableLighting(); RenderUtil.bindBlockTexture(); BufferBuilder tes = Tessellator.getInstance().getBuffer(); GlStateManager.color(1, 1, 1); Vector3d trans = new Vector3d((-origin.x) + eye.x, (-origin.y) + eye.y, (-origin.z) + eye.z); tes.setTranslation(trans.x, trans.y, trans.z); RenderUtil.addVerticesToTessellator(corners, DefaultVertexFormats.POSITION_TEX, true); Tessellator.getInstance().draw(); tes.setTranslation(0, 0, 0); }
float minV1 = tex1.getMinV(); float maxV1 = tex1.getInterpolatedV(8); for (Vertex v : bb.getCornersWithUvForFace(EnumFacing.DOWN, minU1, maxU1, minV1, maxV1)) { worldRendererIn.pos(v.x(), v.y(), v.z()).color(0.5F, 0.5F, 0.5F, 1.0F).tex(v.u(), v.v()).lightmap(240, 240).endVertex(); for (Vertex v : bb.getCornersWithUvForFace(EnumFacing.UP, minU1, maxU1, minV1, maxV1)) { worldRendererIn.pos(v.x(), v.y(), v.z()).color(0.5F, 0.5F, 0.5F, 1.0F).tex(v.u(), v.v()).lightmap(240, 240).endVertex();