face.addVert(ldf, tld, nf); face.addVert(rdf, trd, nf); face.addVert(ruf, tru, nf); face.addVert(luf, tlu, nf); face.addVert(rdb, tld, nb); face.addVert(ldb, trd, nb); face.addVert(lub, tru, nb); face.addVert(rub, tlu, nb); face.addVert(rdf, tld, nr); face.addVert(rdb, trd, nr); face.addVert(rub, tru, nr); face.addVert(ruf, tlu, nr); face.addVert(ldb, tld, nl); face.addVert(ldf, trd, nl); face.addVert(luf, tru, nl); face.addVert(lub, tlu, nl); face.addVert(luf, tld, nt); face.addVert(ruf, trd, nt); face.addVert(rub, tru, nt); face.addVert(lub, tlu, nt); face.addVert(ldb, tld, nd); face.addVert(rdb, trd, nd); face.addVert(rdf, tru, nd); face.addVert(ldf, tlu, nd);
face.addVert(ps1it, 0, niStart); face.addVert(ps2it, 0, niStart); face.addVert(ps2ib, 0, niStart); face.addVert(ps1ib, 0, niStart); face.addVert(pe1it, 0, niTop); face.addVert(pe2it, 0, niTop); face.addVert(ps2it, 0, niTop); face.addVert(ps1it, 0, niTop); face.addVert(ps1ib, 0, niBottom); face.addVert(ps2ib, 0, niBottom); face.addVert(pe2ib, 0, niBottom); face.addVert(pe1ib, 0, niBottom); face.addVert(ps1ib, 0, niRight); face.addVert(pe1ib, 0, niRight); face.addVert(pe1it, 0, niRight); face.addVert(ps1it, 0, niRight); face.addVert(ps2it, 0, niLeft); face.addVert(pe2it, 0, niLeft); face.addVert(pe2ib, 0, niLeft); face.addVert(ps2ib, 0, niLeft); face.addVert(ps2it, 0, niEnd); face.addVert(ps1it, 0, niEnd); face.addVert(ps1ib, 0, niEnd); face.addVert(ps2ib, 0, niEnd);
int ehi = pMeshBorder.addTextCoord(eh); faceRight.addVert(startHi, bhi, n1i); faceRight.addVert(startMi, bmi, n1i); faceRight.addVert(endMi, emi, n1i); faceRight.addVert(endHi, ehi, n1i); faceLeft.addVert(startMi, emi, n2i); faceLeft.addVert(startHi, ehi, n2i); faceLeft.addVert(endHi, bhi, n2i); faceLeft.addVert(endMi, bmi, n2i);
leftBorder.addVert(wbi1, tcb1, flatNormalI); leftBorder.addVert(wbi2, tcb2, flatNormalI); leftBorder.addVert(wei1, tce1, flatNormalI); leftBorder.addVert(wei2, tce2, flatNormalI); leftPart.addVert(wbi2, tcb2, flatNormalI); leftPart.addVert(wbi3, tcb3, flatNormalI); leftPart.addVert(wei2, tce2, flatNormalI); leftPart.addVert(wei3, tce3, flatNormalI); rightBorder.addVert(wbi3, tcb3, flatNormalI); rightBorder.addVert(wbi4, tcb4, flatNormalI); rightBorder.addVert(wei3, tce3, flatNormalI); rightBorder.addVert(wei4, tce4, flatNormalI); rightPart.addVert(wbi4, tcb4, flatNormalI); rightPart.addVert(wbi5, tcb5, flatNormalI); rightPart.addVert(wei4, tce4, flatNormalI); rightPart.addVert(wei5, tce5, flatNormalI);
face.addVert(b01, t_0_0, nb1); face.addVert(b11, t_0_v1, nb1); face.addVert(b12, t_u1_v1, nb1); face.addVert(b02, t_u1_0, nb1); face.addVert(b02, t_0_0, nb2); face.addVert(b12, t_0_v1, nb2); face.addVert(b13, t_u2_v2, nb2); face.addVert(b03, t_u2_0, nb2); face.addVert(b03, t_0_0, nb3); face.addVert(b13, t_0_v2, nb3); face.addVert(b14, t_u1_v2, nb3); face.addVert(b04, t_u1_0, nb3); face.addVert(b04, t_u2_0, nb4); face.addVert(b14, t_u2_v2, nb4); face.addVert(b11, t_0_v1, nb4); face.addVert(b01, t_0_0, nb4); topFace.addVert(t1, tc1, tni); topFace.addVert(t2, tc2, tni); topFace.addVert(t3, tc3, tni); topFace.addVert(t4, tc4, tni);
face.addVert(b01, t_0_0, nb1); face.addVert(b03, t_u1_0, nb1); face.addVert(b12, t_u15_v1, nb1); face.addVert(b04, t_0_0, nb2); face.addVert(b06, t_u1_0, nb2); face.addVert(b15, t_u15_v1, nb2); topFace.addVert(t1, tc1, tn1i); topFace.addVert(t25, tc2, tn1i); topFace.addVert(t38, tc3, tn1i); topFace.addVert(t4, tc4, tn1i); topFace.addVert(t25, tc5, tn2i); topFace.addVert(t6, tc6, tn2i); topFace.addVert(t7, tc7, tn2i); topFace.addVert(t38, tc8, tn2i);
/** * @param meshBorder * @param polygons */ public void solidToModel(MeshFactory meshBorder, ArrayList<Polygon> polygons) { for (Polygon polygon : polygons) { Vertex[] vertices = polygon.getVertices(); FaceFactory faceRight = meshBorder.addFace(FaceType.TRIANGLE_FAN); meshBorder.addTextCoord(new TextCoord(0.5, 0.5)); for (Vertex vertex : vertices) { kendzi.math.geometry.Bool.CSG.Vector pos = vertex.getPos(); Vector normal = vertex.getNormal(); int vi = meshBorder.addVertex(new Point3d(pos.x, pos.y, pos.z)); int ni = meshBorder.addNormal(new Vector3d(normal.x, normal.y, normal.z)); faceRight.addVert(vi, 0, ni); } } }
private static MultiPolygonList2d applyWindowsEnd(MultiPolygonList2d mPoly, BuildingNodeElement be, Point2d segmentStart, Vector2d segmentDirection, double nodeDisplacement, CatchFaceFactory catchFaceFactory, BuildingElementsTextureManager textureMenager, boolean counterClockwise) { if (be instanceof SquareHoleElement) { SquareHoleElement she = (SquareHoleElement) be; Point2d lbp = new Point2d(nodeDisplacement - she.getWidth() / 2.0, she.getMinHeight()); Point2d mbp = new Point2d(nodeDisplacement, she.getMinHeight()); Point2d mtp = new Point2d(nodeDisplacement, she.getMaxHeight()); Point2d ltp = new Point2d(nodeDisplacement - she.getWidth() / 2.0, she.getMaxHeight()); mPoly = PolygonSplitHelper.unionOfLeftSideOfMultipleCuts(mPoly, new LinePoints2d(lbp, ltp), new LinePoints2d(ltp, mtp), new LinePoints2d(mbp, lbp)); TextureData td = findWindowTextureData(be, textureMenager); MeshFactory mesh = catchFaceFactory.createOrGetMeshFactory(td.getTex0()); FaceFactory face = mesh.addFace(FaceType.QUADS); Vector3d n = new Vector3d(-segmentDirection.y, 0, -segmentDirection.x); n.negate(); int iN = mesh.addNormal(n); int imbTc = mesh.addTextCoord(new TextCoord(0.5, 0)); int imtTc = mesh.addTextCoord(new TextCoord(0.5, 1)); int ilbTc = mesh.addTextCoord(new TextCoord(0, 0)); int iltTc = mesh.addTextCoord(new TextCoord(0, 1)); face.addVert(segmentPointToVertex3dIndex(lbp, segmentStart, segmentDirection, mesh), ilbTc, iN); face.addVert(segmentPointToVertex3dIndex(mbp, segmentStart, segmentDirection, mesh), imbTc, iN); face.addVert(segmentPointToVertex3dIndex(mtp, segmentStart, segmentDirection, mesh), imtTc, iN); face.addVert(segmentPointToVertex3dIndex(ltp, segmentStart, segmentDirection, mesh), iltTc, iN); } return mPoly; }
private static MultiPolygonList2d applyWindowsBegin(MultiPolygonList2d mPoly, BuildingNodeElement be, Point2d segmentStart, Vector2d segmentDirection, double nodeDisplacement, CatchFaceFactory pCatchFaceFactory, BuildingElementsTextureManager pTextureMenager, boolean counterClockwise) { if (be instanceof SquareHoleElement) { SquareHoleElement she = (SquareHoleElement) be; Point2d mbp = new Point2d(0, she.getMinHeight()); Point2d rbp = new Point2d(she.getWidth() / 2.0, she.getMinHeight()); Point2d rtp = new Point2d(she.getWidth() / 2.0, she.getMaxHeight()); Point2d mtp = new Point2d(0, she.getMaxHeight()); mPoly = PolygonSplitHelper.unionOfLeftSideOfMultipleCuts(mPoly, new LinePoints2d(rtp, rbp), new LinePoints2d(mtp, rtp), new LinePoints2d(rbp, mbp)); TextureData td = findWindowTextureData(be, pTextureMenager); MeshFactory mesh = pCatchFaceFactory.createOrGetMeshFactory(td.getTex0()); FaceFactory face = mesh.addFace(FaceType.QUADS); Vector3d n = new Vector3d(-segmentDirection.y, 0, -segmentDirection.x); // if (counterClockwise) { n.negate(); // } int iN = mesh.addNormal(n); int imbTc = mesh.addTextCoord(new TextCoord(0.5, 0)); int imtTc = mesh.addTextCoord(new TextCoord(0.5, 1)); int irbTc = mesh.addTextCoord(new TextCoord(1, 0)); int irtTc = mesh.addTextCoord(new TextCoord(1, 1)); face.addVert(segmentPointToVertex3dIndex(mbp, segmentStart, segmentDirection, mesh), imbTc, iN); face.addVert(segmentPointToVertex3dIndex(rbp, segmentStart, segmentDirection, mesh), irbTc, iN); face.addVert(segmentPointToVertex3dIndex(rtp, segmentStart, segmentDirection, mesh), irtTc, iN); face.addVert(segmentPointToVertex3dIndex(mtp, segmentStart, segmentDirection, mesh), imtTc, iN); } return mPoly; }
face.addVert(vi, iN, tex);