List of usage examples for javax.media.j3d QuadArray setCoordinate
public void setCoordinate(int index, float coordinate[])
From source file:LightScopeApp.java
Shape3D createXZPlane(Point3f p0, Point3f p1, Point3f p2, Point3f p3) { Shape3D plane = new Shape3D(); QuadArray planeGeom = new QuadArray(4, QuadArray.COORDINATES | QuadArray.NORMALS); planeGeom.setCoordinate(0, p0); planeGeom.setCoordinate(1, p1);// w w w . j a v a2s . com planeGeom.setCoordinate(2, p2); planeGeom.setCoordinate(3, p3); Vector3f norm = new Vector3f(0.0f, 1.0f, 0.0f); planeGeom.setNormal(0, norm); planeGeom.setNormal(1, norm); planeGeom.setNormal(2, norm); planeGeom.setNormal(3, norm); plane.setGeometry(planeGeom); return plane; }
From source file:FarbWurfelAsQuads.java
/** * Erstellung des ColorCube/*from www. java2 s .co m*/ * * @return */ private QuadArray makeCube() { QuadArray plane = new QuadArray(24, GeometryArray.COORDINATES | GeometryArray.COLOR_3); // Punkte und Farben Point3f pa = new Point3f(-1.0f, 1.0f, -1.0f); Point3f pb = new Point3f(-1.0f, -1.0f, -1.0f); Point3f pc = new Point3f(1.0f, -1.0f, -1.0f); Point3f pd = new Point3f(1.0f, 1.0f, -1.0f); Point3f pe = new Point3f(-1.0f, 1.0f, 1.0f); Point3f pf = new Point3f(-1.0f, -1.0f, 1.0f); Point3f pg = new Point3f(1.0f, -1.0f, 1.0f); Point3f ph = new Point3f(1.0f, 1.0f, 1.0f); // Coloreigenschaften Color3f red = new Color3f(1.0f, 0.0f, 0.0f); Color3f blue = new Color3f(0.0f, 0.0f, 1.0f); Color3f green = new Color3f(0.0f, 1.0f, 0.0f); Color3f cyan = new Color3f(0.0f, 1.0f, 1.0f); Color3f yellow = new Color3f(1.0f, 1.0f, 0.0f); Color3f magenta = new Color3f(1.0f, 0.0f, 1.0f); // 1. Seite plane.setCoordinate(0, pa); plane.setColor(0, red); plane.setCoordinate(1, pb); plane.setColor(1, red); plane.setCoordinate(2, pc); plane.setColor(2, red); plane.setCoordinate(3, pd); plane.setColor(3, red); // 2. Seite plane.setCoordinate(4, pe); plane.setColor(4, blue); plane.setCoordinate(5, pf); plane.setColor(5, blue); plane.setCoordinate(6, pg); plane.setColor(6, blue); plane.setCoordinate(7, ph); plane.setColor(7, blue); // 3. Seite plane.setCoordinate(8, pe); plane.setColor(8, green); plane.setCoordinate(9, pf); plane.setColor(9, green); plane.setCoordinate(10, pb); plane.setColor(10, green); plane.setCoordinate(11, pa); plane.setColor(11, green); // 4. Seite plane.setCoordinate(12, pd); plane.setColor(12, cyan); plane.setCoordinate(13, pc); plane.setColor(13, cyan); plane.setCoordinate(14, pg); plane.setColor(14, cyan); plane.setCoordinate(15, ph); plane.setColor(15, cyan); // 5. Seite plane.setCoordinate(16, pe); plane.setColor(16, yellow); plane.setCoordinate(17, pa); plane.setColor(17, yellow); plane.setCoordinate(18, pd); plane.setColor(18, yellow); plane.setCoordinate(19, ph); plane.setColor(19, yellow); // 6. Seite plane.setCoordinate(20, pf); plane.setColor(20, magenta); plane.setCoordinate(21, pb); plane.setColor(21, magenta); plane.setCoordinate(22, pc); plane.setColor(22, magenta); plane.setCoordinate(23, pg); plane.setColor(23, magenta); // ubergib den Wurfel return plane; }
From source file:GearTest.java
/** * Construct a SpurGear's teeth by adding the teeth shape nodes * //from www . ja v a 2s .c om * @param pitchCircleRadius * radius at center of teeth * @param rootRadius * distance from pitch circle to top of teeth * @param outsideRadius * distance from pitch circle to root of teeth * @param gearThickness * thickness of the gear * @param toothTipThickness * thickness of the tip of the tooth * @param toothToValleyAngleRatio * the ratio of the angle subtended by the tooth to the angle * subtended by the valley (must be <= .25) * @param look * the gear's appearance object */ void addTeeth(float pitchCircleRadius, float rootRadius, float outsideRadius, float gearThickness, float toothTipThickness, float toothToValleyAngleRatio, Appearance look) { int index; Shape3D newShape; // Temporaries that store start angle for each portion of tooth facet double toothStartAngle, toothTopStartAngle, toothDeclineStartAngle, toothValleyStartAngle, nextToothStartAngle; // The x and y coordinates at each point of a facet and at each // point on the gear: at the shaft, the root of the teeth, and // the outer point of the teeth float xRoot0, yRoot0; float xOuter1, yOuter1; float xOuter2, yOuter2; float xRoot3, yRoot3; float xRoot4, yRoot4; // The z coordinates for the gear final float frontZ = -0.5f * gearThickness; final float rearZ = 0.5f * gearThickness; // The z coordinates for the tooth tip of the gear final float toothTipFrontZ = -0.5f * toothTipThickness; final float toothTipRearZ = 0.5f * toothTipThickness; int toothFacetVertexCount; // #(vertices) per tooth facet int toothFacetCount; // #(facets) per tooth int toothFaceTotalVertexCount; // #(vertices) in all teeth int toothFaceStripCount[] = new int[toothCount]; // per tooth vertex count int topVertexCount; // #(vertices) for teeth tops int topStripCount[] = new int[1]; // #(vertices) in strip/strip // Front and rear facing normals for the teeth faces Vector3f frontToothNormal = new Vector3f(0.0f, 0.0f, -1.0f); Vector3f rearToothNormal = new Vector3f(0.0f, 0.0f, 1.0f); // Normals for teeth tops up incline, tooth top, and down incline Vector3f leftNormal = new Vector3f(-1.0f, 0.0f, 0.0f); Vector3f rightNormal = new Vector3f(1.0f, 0.0f, 0.0f); Vector3f outNormal = new Vector3f(1.0f, 0.0f, 0.0f); Vector3f inNormal = new Vector3f(-1.0f, 0.0f, 0.0f); // Temporary variables for storing coordinates and vectors Point3f coordinate = new Point3f(0.0f, 0.0f, 0.0f); Point3f tempCoordinate1 = new Point3f(0.0f, 0.0f, 0.0f); Point3f tempCoordinate2 = new Point3f(0.0f, 0.0f, 0.0f); Point3f tempCoordinate3 = new Point3f(0.0f, 0.0f, 0.0f); Vector3f tempVector1 = new Vector3f(0.0f, 0.0f, 0.0f); Vector3f tempVector2 = new Vector3f(0.0f, 0.0f, 0.0f); /* * Construct the gear's front facing teeth facets 0______2 / /\ / / \ / / \ * //___________\ 1 3 */ toothFacetVertexCount = 4; toothFaceTotalVertexCount = toothFacetVertexCount * toothCount; for (int i = 0; i < toothCount; i++) toothFaceStripCount[i] = toothFacetVertexCount; TriangleStripArray frontGearTeeth = new TriangleStripArray(toothFaceTotalVertexCount, GeometryArray.COORDINATES | GeometryArray.NORMALS, toothFaceStripCount); for (int count = 0; count < toothCount; count++) { index = count * toothFacetVertexCount; toothStartAngle = gearStartAngle + circularPitchAngle * (double) count; toothTopStartAngle = toothStartAngle + toothTopAngleIncrement; toothDeclineStartAngle = toothStartAngle + toothDeclineAngleIncrement; toothValleyStartAngle = toothStartAngle + toothValleyAngleIncrement; xRoot0 = rootRadius * (float) Math.cos(toothStartAngle); yRoot0 = rootRadius * (float) Math.sin(toothStartAngle); xOuter1 = outsideRadius * (float) Math.cos(toothTopStartAngle); yOuter1 = outsideRadius * (float) Math.sin(toothTopStartAngle); xOuter2 = outsideRadius * (float) Math.cos(toothDeclineStartAngle); yOuter2 = outsideRadius * (float) Math.sin(toothDeclineStartAngle); xRoot3 = rootRadius * (float) Math.cos(toothValleyStartAngle); yRoot3 = rootRadius * (float) Math.sin(toothValleyStartAngle); tempCoordinate1.set(xRoot0, yRoot0, frontZ); tempCoordinate2.set(xRoot3, yRoot3, frontZ); tempVector1.sub(tempCoordinate2, tempCoordinate1); tempCoordinate2.set(xOuter1, yOuter1, toothTipFrontZ); tempVector2.sub(tempCoordinate2, tempCoordinate1); frontToothNormal.cross(tempVector1, tempVector2); frontToothNormal.normalize(); coordinate.set(xOuter1, yOuter1, toothTipFrontZ); frontGearTeeth.setCoordinate(index, coordinate); frontGearTeeth.setNormal(index, frontToothNormal); coordinate.set(xRoot0, yRoot0, frontZ); frontGearTeeth.setCoordinate(index + 1, coordinate); frontGearTeeth.setNormal(index + 1, frontToothNormal); coordinate.set(xOuter2, yOuter2, toothTipFrontZ); frontGearTeeth.setCoordinate(index + 2, coordinate); frontGearTeeth.setNormal(index + 2, frontToothNormal); coordinate.set(xRoot3, yRoot3, frontZ); frontGearTeeth.setCoordinate(index + 3, coordinate); frontGearTeeth.setNormal(index + 3, frontToothNormal); } newShape = new Shape3D(frontGearTeeth, look); this.addChild(newShape); /* * Construct the gear's rear facing teeth facets (Using Quads) 1______2 / \ / \ / \ * /____________\ 0 3 */ toothFacetVertexCount = 4; toothFaceTotalVertexCount = toothFacetVertexCount * toothCount; QuadArray rearGearTeeth = new QuadArray(toothCount * toothFacetVertexCount, GeometryArray.COORDINATES | GeometryArray.NORMALS); for (int count = 0; count < toothCount; count++) { index = count * toothFacetVertexCount; toothStartAngle = gearStartAngle + circularPitchAngle * (double) count; toothTopStartAngle = toothStartAngle + toothTopAngleIncrement; toothDeclineStartAngle = toothStartAngle + toothDeclineAngleIncrement; toothValleyStartAngle = toothStartAngle + toothValleyAngleIncrement; xRoot0 = rootRadius * (float) Math.cos(toothStartAngle); yRoot0 = rootRadius * (float) Math.sin(toothStartAngle); xOuter1 = outsideRadius * (float) Math.cos(toothTopStartAngle); yOuter1 = outsideRadius * (float) Math.sin(toothTopStartAngle); xOuter2 = outsideRadius * (float) Math.cos(toothDeclineStartAngle); yOuter2 = outsideRadius * (float) Math.sin(toothDeclineStartAngle); xRoot3 = rootRadius * (float) Math.cos(toothValleyStartAngle); yRoot3 = rootRadius * (float) Math.sin(toothValleyStartAngle); tempCoordinate1.set(xRoot0, yRoot0, rearZ); tempCoordinate2.set(xRoot3, yRoot3, rearZ); tempVector1.sub(tempCoordinate2, tempCoordinate1); tempCoordinate2.set(xOuter1, yOuter1, toothTipRearZ); tempVector2.sub(tempCoordinate2, tempCoordinate1); rearToothNormal.cross(tempVector2, tempVector1); rearToothNormal.normalize(); coordinate.set(xRoot0, yRoot0, rearZ); rearGearTeeth.setCoordinate(index, coordinate); rearGearTeeth.setNormal(index, rearToothNormal); coordinate.set(xOuter1, yOuter1, toothTipRearZ); rearGearTeeth.setCoordinate(index + 1, coordinate); rearGearTeeth.setNormal(index + 1, rearToothNormal); coordinate.set(xOuter2, yOuter2, toothTipRearZ); rearGearTeeth.setCoordinate(index + 2, coordinate); rearGearTeeth.setNormal(index + 2, rearToothNormal); coordinate.set(xRoot3, yRoot3, rearZ); rearGearTeeth.setCoordinate(index + 3, coordinate); rearGearTeeth.setNormal(index + 3, rearToothNormal); } newShape = new Shape3D(rearGearTeeth, look); this.addChild(newShape); /* * Construct the gear's top teeth faces (As seen from above) Root0 * Outer1 Outer2 Root3 Root4 (RearZ) 0_______3 2_______5 4_______7 * 6_______9 |0 3| |4 7| |8 11| |12 15| | | | | | | | | | | | | | | | | * |1_____2| |5_____6| |9____10| |13___14| 1 2 3 4 5 6 7 8 Root0 Outer1 * Outer2 Root3 Root4 (FrontZ) * * Quad 0123 uses a left normal Quad 2345 uses an out normal Quad 4567 * uses a right normal Quad 6789 uses an out normal */ topVertexCount = 8 * toothCount + 2; topStripCount[0] = topVertexCount; toothFacetVertexCount = 4; toothFacetCount = 4; QuadArray topGearTeeth = new QuadArray(toothCount * toothFacetVertexCount * toothFacetCount, GeometryArray.COORDINATES | GeometryArray.NORMALS); for (int count = 0; count < toothCount; count++) { index = count * toothFacetCount * toothFacetVertexCount; toothStartAngle = gearStartAngle + circularPitchAngle * (double) count; toothTopStartAngle = toothStartAngle + toothTopAngleIncrement; toothDeclineStartAngle = toothStartAngle + toothDeclineAngleIncrement; toothValleyStartAngle = toothStartAngle + toothValleyAngleIncrement; nextToothStartAngle = toothStartAngle + circularPitchAngle; xRoot0 = rootRadius * (float) Math.cos(toothStartAngle); yRoot0 = rootRadius * (float) Math.sin(toothStartAngle); xOuter1 = outsideRadius * (float) Math.cos(toothTopStartAngle); yOuter1 = outsideRadius * (float) Math.sin(toothTopStartAngle); xOuter2 = outsideRadius * (float) Math.cos(toothDeclineStartAngle); yOuter2 = outsideRadius * (float) Math.sin(toothDeclineStartAngle); xRoot3 = rootRadius * (float) Math.cos(toothValleyStartAngle); yRoot3 = rootRadius * (float) Math.sin(toothValleyStartAngle); xRoot4 = rootRadius * (float) Math.cos(nextToothStartAngle); yRoot4 = rootRadius * (float) Math.sin(nextToothStartAngle); // Compute normal for quad 1 tempCoordinate1.set(xRoot0, yRoot0, frontZ); tempCoordinate2.set(xOuter1, yOuter1, toothTipFrontZ); tempVector1.sub(tempCoordinate2, tempCoordinate1); leftNormal.cross(frontNormal, tempVector1); leftNormal.normalize(); // Coordinate labeled 0 in the quad coordinate.set(xRoot0, yRoot0, rearZ); topGearTeeth.setCoordinate(index, coordinate); topGearTeeth.setNormal(index, leftNormal); // Coordinate labeled 1 in the quad coordinate.set(tempCoordinate1); topGearTeeth.setCoordinate(index + 1, coordinate); topGearTeeth.setNormal(index + 1, leftNormal); // Coordinate labeled 2 in the quad topGearTeeth.setCoordinate(index + 2, tempCoordinate2); topGearTeeth.setNormal(index + 2, leftNormal); topGearTeeth.setCoordinate(index + 5, tempCoordinate2); // Coordinate labeled 3 in the quad coordinate.set(xOuter1, yOuter1, toothTipRearZ); topGearTeeth.setCoordinate(index + 3, coordinate); topGearTeeth.setNormal(index + 3, leftNormal); topGearTeeth.setCoordinate(index + 4, coordinate); // Compute normal for quad 2 tempCoordinate1.set(xOuter1, yOuter1, toothTipFrontZ); tempCoordinate2.set(xOuter2, yOuter2, toothTipFrontZ); tempVector1.sub(tempCoordinate2, tempCoordinate1); outNormal.cross(frontNormal, tempVector1); outNormal.normalize(); topGearTeeth.setNormal(index + 4, outNormal); topGearTeeth.setNormal(index + 5, outNormal); // Coordinate labeled 4 in the quad topGearTeeth.setCoordinate(index + 6, tempCoordinate2); topGearTeeth.setNormal(index + 6, outNormal); topGearTeeth.setCoordinate(index + 9, tempCoordinate2); // Coordinate labeled 5 in the quad coordinate.set(xOuter2, yOuter2, toothTipRearZ); topGearTeeth.setCoordinate(index + 7, coordinate); topGearTeeth.setNormal(index + 7, outNormal); topGearTeeth.setCoordinate(index + 8, coordinate); // Compute normal for quad 3 tempCoordinate1.set(xOuter2, yOuter2, toothTipFrontZ); tempCoordinate2.set(xRoot3, yRoot3, frontZ); tempVector1.sub(tempCoordinate2, tempCoordinate1); rightNormal.cross(frontNormal, tempVector1); rightNormal.normalize(); topGearTeeth.setNormal(index + 8, rightNormal); topGearTeeth.setNormal(index + 9, rightNormal); // Coordinate labeled 7 in the quad topGearTeeth.setCoordinate(index + 10, tempCoordinate2); topGearTeeth.setNormal(index + 10, rightNormal); topGearTeeth.setCoordinate(index + 13, tempCoordinate2); // Coordinate labeled 6 in the quad coordinate.set(xRoot3, yRoot3, rearZ); topGearTeeth.setCoordinate(index + 11, coordinate); topGearTeeth.setNormal(index + 11, rightNormal); topGearTeeth.setCoordinate(index + 12, coordinate); // Compute normal for quad 4 tempCoordinate1.set(xRoot3, yRoot3, frontZ); tempCoordinate2.set(xRoot4, yRoot4, frontZ); tempVector1.sub(tempCoordinate2, tempCoordinate1); outNormal.cross(frontNormal, tempVector1); outNormal.normalize(); topGearTeeth.setNormal(index + 12, outNormal); topGearTeeth.setNormal(index + 13, outNormal); // Coordinate labeled 9 in the quad topGearTeeth.setCoordinate(index + 14, tempCoordinate2); topGearTeeth.setNormal(index + 14, outNormal); // Coordinate labeled 8 in the quad coordinate.set(xRoot4, yRoot4, rearZ); topGearTeeth.setCoordinate(index + 15, coordinate); topGearTeeth.setNormal(index + 15, outNormal); // Prepare for the loop by computing the new normal toothTopStartAngle = nextToothStartAngle + toothTopAngleIncrement; xOuter1 = outsideRadius * (float) Math.cos(toothTopStartAngle); yOuter1 = outsideRadius * (float) Math.sin(toothTopStartAngle); tempCoordinate1.set(xRoot4, yRoot4, toothTipFrontZ); tempCoordinate2.set(xOuter1, yOuter1, toothTipFrontZ); tempVector1.sub(tempCoordinate2, tempCoordinate1); leftNormal.cross(frontNormal, tempVector1); leftNormal.normalize(); } newShape = new Shape3D(topGearTeeth, look); this.addChild(newShape); }