@Override public void renderTo(Target<?> target) { float lampHeight = 0.8f; float lampHalfWidth = 0.4f; float poleHeight = parseHeight(node.getTags(), 5f) - lampHeight; /* determine material */ Material material = null; if (material == null) { material = Materials.getSurfaceMaterial(node.getTags().getValue("material")); } if (material == null) { material = Materials.getSurfaceMaterial(node.getTags().getValue("surface"), STEEL); } /* draw pole */ target.drawColumn(material, null, getBase(), 0.5, 0.16, 0.08, false, false); target.drawColumn(material, null, getBase().addY(0.5), poleHeight, 0.08, 0.08, false, false); /* draw lamp */ // lower part List<VectorXYZ> vs = new ArrayList<VectorXYZ>(); vs.add(getBase().addY(poleHeight)); vs.add(getBase().addY(poleHeight + lampHeight * 0.8).add(lampHalfWidth, 0, lampHalfWidth)); vs.add(getBase().addY(poleHeight + lampHeight * 0.8).add(lampHalfWidth, 0, -lampHalfWidth)); vs.add(getBase().addY(poleHeight + lampHeight * 0.8).add(-lampHalfWidth, 0, -lampHalfWidth)); vs.add(getBase().addY(poleHeight + lampHeight * 0.8).add(-lampHalfWidth, 0, lampHalfWidth)); vs.add(getBase().addY(poleHeight + lampHeight * 0.8).add(lampHalfWidth, 0, lampHalfWidth)); target.drawTriangleFan(material, vs, null); // upper part vs.clear(); vs.add(getBase().addY(poleHeight + lampHeight)); vs.add(getBase().addY(poleHeight + lampHeight * 0.8).add(lampHalfWidth, 0, lampHalfWidth)); vs.add(getBase().addY(poleHeight + lampHeight * 0.8).add(-lampHalfWidth, 0, lampHalfWidth)); vs.add(getBase().addY(poleHeight + lampHeight * 0.8).add(-lampHalfWidth, 0, -lampHalfWidth)); vs.add(getBase().addY(poleHeight + lampHeight * 0.8).add(lampHalfWidth, 0, -lampHalfWidth)); vs.add(getBase().addY(poleHeight + lampHeight * 0.8).add(lampHalfWidth, 0, lampHalfWidth)); target.drawTriangleFan(material, vs, null); }
@Override public void renderTo(Target<?> target) { float height = parseHeight(node.getTags(), 0.5f); float width = parseWidth(node.getTags(), 1); float depth = width / 2f; /* determine material */ Material material = null; // TODO parse color if (material == null) { material = Materials.getSurfaceMaterial(node.getTags().getValue("material")); } if (material == null) { material = Materials.getSurfaceMaterial( node.getTags().getValue("surface"), Materials.GRITBIN_DEFAULT); } double directionAngle = parseDirection(node.getTags(), PI); VectorXZ faceVector = VectorXZ.fromAngle(directionAngle); VectorXZ boardVector = faceVector.rightNormal(); /* draw box */ target.drawBox(material, getBase(), faceVector, height, width, depth); /* draw lid */ List<VectorXYZ> vs = new ArrayList<VectorXYZ>(); vs.add(getBase().addY(height + 0.2)); vs.add( getBase().add(boardVector.mult(width / 2)).add(faceVector.mult(depth / 2)).addY(height)); vs.add( getBase().add(boardVector.mult(-width / 2)).add(faceVector.mult(depth / 2)).addY(height)); vs.add( getBase() .add(boardVector.mult(-width / 2)) .add(faceVector.mult(-depth / 2)) .addY(height)); vs.add( getBase().add(boardVector.mult(width / 2)).add(faceVector.mult(-depth / 2)).addY(height)); vs.add( getBase().add(boardVector.mult(width / 2)).add(faceVector.mult(depth / 2)).addY(height)); target.drawTriangleFan(material.brighter(), vs, null); }