⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spurgear.java

📁 java 3d编程的一些例子源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	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);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -