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

📄 sensorgnomonecho.java

📁 JAVA3D矩陈的相关类
💻 JAVA
字号:
/* * $RCSfile: SensorGnomonEcho.java,v $ * * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistribution of source code must retain the above copyright *   notice, this list of conditions and the following disclaimer. * * - Redistribution in binary form must reproduce the above copyright *   notice, this list of conditions and the following disclaimer in *   the documentation and/or other materials provided with the *   distribution. * * Neither the name of Sun Microsystems, Inc. or the names of * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed, licensed or * intended for use in the design, construction, operation or * maintenance of any nuclear facility. * * $Revision: 1.4 $ * $Date: 2007/02/09 17:20:15 $ * $State: Exp $ */package com.sun.j3d.utils.behaviors.sensor ;import javax.media.j3d.Shape3D ;import javax.media.j3d.Material ;import javax.media.j3d.Appearance ;import javax.media.j3d.Transform3D ;import javax.media.j3d.GeometryArray ;import javax.media.j3d.TriangleArray ;import javax.media.j3d.TransparencyAttributes;import javax.vecmath.Point3f ;import javax.vecmath.Vector3f ;/** * A Shape3D representing a gnomon pointing along each coordinate * axis.  The base of the gnomon is a cube, and the coordinate axes are * represented by pyramids attached to each face of the cube. *  * @since Java 3D 1.3 */public class SensorGnomonEcho extends Shape3D {    /**     * Constructs a SensorGnomonEcho.  Read and write capabilities are     * granted for the Appearance, Material, TransparencyAttributes,     * and TransparencyAttributes mode and value.     *      * @param transform translation and/or rotation to apply to the gnomon     *  geometry; this should be the position and orientation of the sensor     *  hotspot in the sensor's local coordinate system     * @param baseWidth width of each edge of the base cube in meters     * @param axisLength distance in meters from the gnomon center to     *  the apex of the pyramid attached to each face of the base cube     * @param enableLighting boolean indicating whether normals should be     *  generated and lighting enabled     */    public SensorGnomonEcho(Transform3D transform,			    double baseWidth,			    double axisLength,			    boolean enableLighting) {	super() ;	int FRONT  = 0 ;	int BACK   = 1 ;	int LEFT   = 2 ;	int RIGHT  = 3 ;	int TOP    = 4 ;	int BOTTOM = 5 ;	Point3f[] axes = new Point3f[6] ;	float length = (float)axisLength ;	axes[FRONT]  = new Point3f(0f, 0f,  length) ; 	axes[BACK]   = new Point3f(0f, 0f, -length) ;	axes[LEFT]   = new Point3f(-length, 0f, 0f) ;	axes[RIGHT]  = new Point3f( length, 0f, 0f) ;	axes[TOP]    = new Point3f(0f,  length, 0f) ;	axes[BOTTOM] = new Point3f(0f, -length, 0f) ;	if (transform != null)	    for (int i = FRONT ; i <= BOTTOM ; i++)		transform.transform(axes[i]) ;	float offset = (float)baseWidth / 2.0f ;	Point3f[][] cube = new Point3f[6][4] ;	cube[FRONT][0]  = new Point3f(-offset, -offset,  offset) ;	cube[FRONT][1]  = new Point3f( offset, -offset,  offset) ;	cube[FRONT][2]  = new Point3f( offset,  offset,  offset) ;	cube[FRONT][3]  = new Point3f(-offset,  offset,  offset) ;	cube[BACK][0]   = new Point3f( offset, -offset, -offset) ;	cube[BACK][1]   = new Point3f(-offset, -offset, -offset) ;	cube[BACK][2]   = new Point3f(-offset,  offset, -offset) ;	cube[BACK][3]   = new Point3f( offset,  offset, -offset) ;	if (transform != null)	    for (int i = FRONT ; i <= BACK ; i++)		for (int j = 0 ; j < 4 ; j++)		    transform.transform(cube[i][j]) ;	cube[LEFT][0]   = cube[BACK][1] ;	cube[LEFT][1]   = cube[FRONT][0] ;	cube[LEFT][2]   = cube[FRONT][3] ;	cube[LEFT][3]   = cube[BACK][2] ;	cube[RIGHT][0]  = cube[FRONT][1] ;	cube[RIGHT][1]  = cube[BACK][0] ;	cube[RIGHT][2]  = cube[BACK][3] ;	cube[RIGHT][3]  = cube[FRONT][2] ;	cube[TOP][0]    = cube[FRONT][3] ;	cube[TOP][1]    = cube[FRONT][2] ;	cube[TOP][2]    = cube[BACK][3] ;	cube[TOP][3]    = cube[BACK][2] ;	cube[BOTTOM][0] = cube[BACK][1] ;	cube[BOTTOM][1] = cube[BACK][0] ;	cube[BOTTOM][2] = cube[FRONT][1] ;	cube[BOTTOM][3] = cube[FRONT][0] ;	int v = 0 ;	Point3f[] vertices = new Point3f[72] ;	for (int i = 0 ; i < 6 ; i++) {	    vertices[v++] = cube[i][0] ;	    vertices[v++] = cube[i][1] ;	    vertices[v++] = axes[i] ;	    vertices[v++] = cube[i][1] ;	    vertices[v++] = cube[i][2] ;	    vertices[v++] = axes[i] ;	    vertices[v++] = cube[i][2] ;	    vertices[v++] = cube[i][3] ;	    vertices[v++] = axes[i] ;	    vertices[v++] = cube[i][3] ;	    vertices[v++] = cube[i][0] ;	    vertices[v++] = axes[i] ;	}        	int vertexFormat ;	Material m = new Material() ;	m.setCapability(Material.ALLOW_COMPONENT_READ) ;	m.setCapability(Material.ALLOW_COMPONENT_WRITE) ;	if (enableLighting) {	    vertexFormat =		GeometryArray.COORDINATES | GeometryArray.NORMALS ;	    m.setLightingEnable(true) ;	}	else {	    vertexFormat = GeometryArray.COORDINATES ;	    m.setLightingEnable(false) ;	}	TriangleArray ta = new TriangleArray(72, vertexFormat) ;	ta.setCoordinates(0, vertices) ;	if (enableLighting) {	    Vector3f v0 = new Vector3f() ;	    Vector3f v1 = new Vector3f() ;	    Vector3f[] normals = new Vector3f[72] ;	    for (int i = 0 ; i < 72 ; i += 3) {		v0.sub(vertices[i+1], vertices[i]) ;		v1.sub(vertices[i+2], vertices[i]) ;		Vector3f n = new Vector3f() ;		n.cross(v0, v1) ;		n.normalize() ;		normals[i] = n ;		normals[i+1] = n ;		normals[i+2] = n ;	    }	    ta.setNormals(0, normals) ;	}	Appearance a = new Appearance() ;	a.setMaterial(m) ;	a.setCapability(Appearance.ALLOW_MATERIAL_READ) ;	a.setCapability(Appearance.ALLOW_MATERIAL_WRITE) ;	TransparencyAttributes tra = new TransparencyAttributes() ;	tra.setCapability(TransparencyAttributes.ALLOW_MODE_READ) ;	tra.setCapability(TransparencyAttributes.ALLOW_MODE_WRITE) ;	tra.setCapability(TransparencyAttributes.ALLOW_VALUE_READ) ;	tra.setCapability(TransparencyAttributes.ALLOW_VALUE_WRITE) ;	ta.setCapability	    (TransparencyAttributes.ALLOW_BLEND_FUNCTION_READ) ;	ta.setCapability	    (TransparencyAttributes.ALLOW_BLEND_FUNCTION_WRITE) ;	a.setTransparencyAttributes(tra) ;	a.setCapability(Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_READ) ;	a.setCapability(Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_WRITE) ;	setGeometry(ta) ;	setAppearance(a) ;	setCapability(ALLOW_APPEARANCE_READ) ;	setCapability(ALLOW_APPEARANCE_WRITE) ;    }}

⌨️ 快捷键说明

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