Java 类javax.vecmath.Tuple3f 实例源码

项目:ChessMaster    文件:RenderUtil.java   
static short createVertexBuffer(ByteBuffer buffer, BGFXVertexDecl decl, Object[]... vertices) {
    for (Object[] objects : vertices) {
        for (Object object : objects) {
            if (object instanceof Tuple2f)
                buffer.putFloat(((Tuple2f) object).getX()).putFloat(((Tuple2f) object).getY());
            else if (object instanceof Tuple3f)
                buffer.putFloat(((Tuple3f) object).getX()).putFloat(((Tuple3f) object).getY()).putFloat(((Tuple3f) object).getZ());
            else if (object instanceof Tuple4f)
                buffer.putFloat(((Tuple4f) object).getX()).putFloat(((Tuple4f) object).getY()).putFloat(((Tuple4f) object).getZ()).putFloat(((Tuple4f) object).getW());
            else if (object instanceof Integer)
                buffer.putInt(((int) object));
            else
                throw new IllegalArgumentException("Unknown type of vertex: " + object.getClass().getName() + ", valid type are:" +
                    "javax.vecmath.Tuple2f/3f/4f & java.lang.Integer");
        }
    }

    if (buffer.remaining() != 0) {
        throw new RuntimeException("ByteBuffer size and number of arguments do not match");
    }

    buffer.flip();

    return createVertexBuffer(buffer, decl);
}
项目:PhET    文件:LabelToken.java   
private String format(float floatT, String strT, Tuple3f ptT) {
  if (!Float.isNaN(floatT)) {
    return TextFormat.format(floatT, width, precision, alignLeft, zeroPad);
  } else if (strT != null) {
    return TextFormat.format(strT, width, precision, alignLeft, zeroPad);
  } else if (ptT != null) {
    if (width == 0 && precision == Integer.MAX_VALUE) {
      width = 6;
      precision = 2;
    }
    return TextFormat.format(ptT.x, width, precision, false, false)
        + TextFormat.format(ptT.y, width, precision, false, false)
        + TextFormat.format(ptT.z, width, precision, false, false);
  } else {
    return text;
  }
}
项目:PhET    文件:__CartesianExporter.java   
protected int[] getNormalMap(Tuple3f[] normals, int nNormals,
                             BitSet bsValid, List<String> vNormals) {
  Map<String, Integer> htNormals = new Hashtable<String, Integer>();
  int[] normalMap = new int[nNormals];
  for (int i = 0; i < nNormals; i++) {
    String s;
    if (bsValid != null && !bsValid.get(i) || Float.isNaN(normals[i].x)){
      if (bsValid != null)
        bsValid.clear(i);
      continue;
    }
    s = (round(normals[i].x) + " " + round(normals[i].y) + " "
        + round(normals[i].z) + "\n");
    if (htNormals.containsKey(s)) {
      normalMap[i] = htNormals.get(s).intValue();
    } else {
      normalMap[i] = vNormals.size();
      vNormals.add(s);
      htNormals.put(s, Integer.valueOf(normalMap[i]));
    }
  }
  return normalMap;
}
项目:form-follows-function    文件:Rasterizer.java   
public void clear(int bufferMask, Tuple3f color) {
    if ((bufferMask & COLOR_BUFFER) != 0) {
        int r = (int)(color.x*255f);
        int g = (int)(color.y*255f);
        int b = (int)(color.z*255f);
        int c = (r << 16) | (g << 8) | b;
        for (int i=0; i<zbuffer.length; i++) {
            pixels[i] = c;
        }
    }

    if ((bufferMask & DEPTH_BUFFER) != 0) {
        for (int i=0; i<zbuffer.length; i++) {
            zbuffer[i] = Float.MAX_VALUE;
        }
    }
}
项目:form-follows-function    文件:Rasterizer.java   
public void clear(int bufferMask, Tuple3f color) {
    if ((bufferMask & COLOR_BUFFER) != 0) {
        int r = (int)(color.x*255f);
        int g = (int)(color.y*255f);
        int b = (int)(color.z*255f);
        int c = (r << 16) | (g << 8) | b;
        for (int i=0; i<zbuffer.length; i++) {
            pixels[i] = c;
        }
    }

    if ((bufferMask & DEPTH_BUFFER) != 0) {
        for (int i=0; i<zbuffer.length; i++) {
            zbuffer[i] = Float.MAX_VALUE;
        }
    }
}
项目:Analyst    文件:FacialPoint.java   
public FacialPoint(FacialPointType type, Tuple3f coords) {        
    this.pos = new Vector3f(coords);

    this.type = type;
    this.name = FpTexter.getInstance().getFPname(type);
    this.info = FpTexter.getInstance().getFPinfo(type);
}
项目:Analyst    文件:Intersection.java   
public static Point3d getIntersectionBetweenLineAndPlane(PlaneEquation eq, Tuple3f one, Tuple3f two) {

        double Xa = one.x;
        double Ya = one.y;
        double Za = one.z;
        double k;

        //A,B,C,D from Ax+By+Cz+d=0
        double A = eq.getA();
        double B = eq.getB();
        double C = eq.getC();
        double D = eq.getD();

        //case when plane and polygon have the common tangent
        //ignore this?
        if (isPointWithinPlane(eq, one) && isPointWithinPlane(eq, two)) {
            return null;
        }

        try {
            //for parallel it'will be an exception 
            k = -(A * Xa + B * Ya + C * Za + D) / (A * (two.x - one.x)
                    + B * (two.y - one.y)
                    + C * (two.z - one.z));
        } catch (Exception e) {
            return null;
        }

        if (Math.abs(k) > 1 || k < 0) {
            return null;
        }

        double x0 = k * (two.x - one.x) + Xa;
        double y0 = k * (two.y - one.y) + Ya;
        double z0 = k * (two.z - one.z) + Za;

        Point3d resPoint = new Point3d(x0, y0, z0);

        return resPoint;
    }
项目:Analyst    文件:Intersection.java   
public static boolean isPointWithinPlane(PlaneEquation eq, Tuple3f point) {
    double value = (eq.getA() * point.x
            + eq.getB() * point.y
            + eq.getC() * point.z
            + eq.getD());

    return (Math.abs(value) / eq.getMAX() < THRESHOLD2);
}
项目:PhET    文件:SymmetryOperation.java   
private static Tuple3f approx0(Tuple3f pt) {
  if (pt != null) {
    if (Math.abs(pt.x) < 0.0001f)
      pt.x = 0;
    if (Math.abs(pt.y) < 0.0001f)
      pt.y = 0;
    if (Math.abs(pt.z) < 0.0001f)
      pt.z = 0;
  }
  return pt;
}
项目:PhET    文件:SymmetryOperation.java   
private static Tuple3f approx(Tuple3f pt) {
  if (pt != null) {
    pt.x = approx(pt.x);
    pt.y = approx(pt.y);
    pt.z = approx(pt.z);
  }
  return pt;
}
项目:PhET    文件:Escape.java   
@SuppressWarnings("unchecked")
public static String escape(Object x) {
  if (x instanceof String)
    return escape((String) x);
  if (x instanceof List<?>)
    return escape((ArrayList<ScriptVariable>) x);
  if (x instanceof BitSet) 
    return escape((BitSet) x, true);
  if (x instanceof Matrix3f) 
    return ((Matrix3f) x).toString();
  if (x instanceof Matrix4f) 
    return ((Matrix4f) x).toString();
  if (x instanceof Tuple3f)
    return escape((Tuple3f) x);
  if (x instanceof Point4f) {
    Point4f xyzw = (Point4f) x;
    return "{" + xyzw.x + " " + xyzw.y + " " + xyzw.z + " " + xyzw.w + "}";
  }
  if (x instanceof AxisAngle4f) {
    AxisAngle4f a = (AxisAngle4f) x;
    return "{" + a.x + " " + a.y + " " + a.z + " " + (float) (a.angle * 180d/Math.PI) + "}";
  }    
  if (x instanceof String[])
    return escape((String[]) x, true);
  if (x instanceof int[] 
        || x instanceof int[][]
        || x instanceof float[]
        || x instanceof float[][]
        || x instanceof float[][][]) 
    return toJSON(null, x);
  if (x instanceof Point3f[])
    return escapeArray(x);
  if (x instanceof Map)
    return escape((Map<String, Object>) x);
  return (x == null ? "null" : x.toString());
}
项目:PhET    文件:MeshSurface.java   
public MeshSurface(int[][] polygonIndexes, Tuple3f[] vertices, int nVertices,
    Tuple3f[] normals, int nNormals) {
  this.polygonIndexes = polygonIndexes;
  if (vertices instanceof Point3f[])
    this.vertices = (Point3f[]) vertices;
  else
    this.altVertices = vertices;
  this.vertexCount = (nVertices == 0 ? vertices.length : nVertices);
  this.normals = normals;
  this.normalCount = (nNormals == 0  && normals != null ? normals.length : nNormals);
}
项目:PhET    文件:Quaternion.java   
/**
 * q = (cos(theta/2), sin(theta/2) * n)
 * 
 * @param pt
 * @param theta
 */
public void set(Tuple3f pt, float theta) {
  if (pt.x == 0 && pt.y == 0 && pt.z == 0) {
    q0 = 1;
    return;
  }
  double fact = (Math.sin(theta / 2 * Math.PI / 180) / Math.sqrt(pt.x
      * pt.x + pt.y * pt.y + pt.z * pt.z));
  q0 = (float) (Math.cos(theta / 2 * Math.PI / 180));
  q1 = (float) (pt.x * fact);
  q2 = (float) (pt.y * fact);
  q3 = (float) (pt.z * fact);
}
项目:PhET    文件:Quaternion.java   
public static final Quaternion getQuaternionFrame(Point3f center, Tuple3f x, Tuple3f xy) {
  Vector3f vA = new Vector3f(x);
  vA.sub(center);
  Vector3f vB = new Vector3f(xy);
  vB.sub(center);
  return getQuaternionFrame(vA, vB, null, false);
}
项目:PhET    文件:_ObjExporter.java   
/**
 * create the v or vn list
 * 
 * @param pts  
 * @param nPts
 * @param m
 * @param prefix
 * @param bsValid TODO
 */
private void outputList(Tuple3f[] pts, int nPts, Matrix4f m, String prefix, BitSet bsValid) {
  for (int i = 0; i < nPts; i++) {
    if (bsValid != null && !bsValid.get(i))
      continue;
    ptTemp.set(pts[i]);
    if (m != null)
      m.transform(ptTemp);
    output(prefix + ptTemp.x + " " + ptTemp.y + " " + ptTemp.z + "\n");
  }
}
项目:PhET    文件:_IdtfExporter.java   
private void checkPoint(Tuple3f pt) {
  if (pt.x < ptMin.x)
    ptMin.x = pt.x;
  if (pt.y < ptMin.y)
    ptMin.y = pt.y;
  if (pt.z < ptMin.z)
    ptMin.z = pt.z;
  if (pt.x > ptMax.x)
    ptMax.x = pt.x;
  if (pt.y > ptMax.y)
    ptMax.y = pt.y;
  if (pt.z > ptMax.z)
    ptMax.z = pt.z;
}
项目:PhET    文件:_IdtfExporter.java   
private String getMeshData(String type, int[][] indices, Tuple3f[] vertexes, Tuple3f[] normals) {
  int nFaces = indices.length;
  int vertexCount = vertexes.length;
  int normalCount = normals.length;
  StringBuffer sb = new StringBuffer();
  getMeshHeader(type, nFaces, vertexCount, normalCount, 0, sb);
  StringBuffer sb1 = new StringBuffer();
  for (int i = 0; i < indices.length; i++) {
    sb1.append(indices[i][0]).append(" ");
    sb1.append(indices[i][1]).append(" ");
    sb1.append(indices[i][2]).append(" ");
  }
  sb.append("MESH_FACE_POSITION_LIST { ");
  sb.append(sb1);
  sb.append("}\n");
  sb.append("MESH_FACE_NORMAL_LIST { ");
  sb.append(sb1);
  sb.append("}\n");
  sb.append("MESH_FACE_SHADING_LIST { ");
  for (int i = 0; i < nFaces; i++)
    sb.append("0 ");
  sb.append("}\n");
  sb.append("MODEL_POSITION_LIST { ");
  for (int i = 0; i < vertexCount; i++)
    output(vertexes[i], sb, false);
  sb.append("}\n");
  sb.append("MODEL_NORMAL_LIST { ");
  for (int i = 0; i < normalCount; i++)
    output(normals[i], sb, false);
  sb.append("}\n}}}\n");
  return sb.toString();
}
项目:PhET    文件:__CartesianExporter.java   
protected int getCoordinateMap(Tuple3f[] vertices, int[] coordMap, BitSet bsValid) {
  int n = 0;
  for (int i = 0; i < coordMap.length; i++) {
    if (bsValid != null && !bsValid.get(i) || Float.isNaN(vertices[i].x)) {
      if (bsValid != null)
        bsValid.clear(i);
      continue;
    }
    coordMap[i] = n++;
  }
  return n;
}
项目:Null-Engine    文件:ByteBufferVertexData.java   
@Override
public <T extends Tuple3f> T getVertex(int idx, T out) {
    int off = idx*vertexStride;
    out.x = vertexData.getFloat(off+4*0);
    out.y = vertexData.getFloat(off+4*1);
    out.z = vertexData.getFloat(off+4*2);
    return out;
}
项目:Nuclear-Foundation    文件:ModelUtil.java   
/**
 * A method for calculating the points of a face for an axis-aligned cuboid, with a given center and radius.
 */
public static Point3f[] getPointsForFace(EnumFacing face, Tuple3f center, Tuple3f radius) {
    Point3f centerOfFace = new Point3f(center);
    Point3f faceAdd = new Point3f(face.getFrontOffsetX() * radius.x, face.getFrontOffsetY() * radius.y, face.getFrontOffsetZ() * radius.z);
    centerOfFace.add(faceAdd);
    Vector3f faceRadius = new Vector3f(radius);
    if (face.getAxisDirection() == AxisDirection.POSITIVE) {
        faceRadius.sub(faceAdd);
    } else {
        faceRadius.add(faceAdd);
    }
    return getPoints(centerOfFace, faceRadius);
}
项目:Nuclear-Foundation    文件:ModelUtil.java   
/**
 * Inner method for {@link #getPointsForFace(EnumFacing, Tuple3f, Tuple3f)} that requires centerFace and faceRadius to be specific for the face.
 */
public static Point3f[] getPoints(Point3f centerFace, Tuple3f faceRadius) {
    Point3f[] array = { new Point3f(centerFace), new Point3f(centerFace), new Point3f(centerFace), new Point3f(centerFace) };
    array[0].add(addOrNegate(faceRadius, false, false));
    array[1].add(addOrNegate(faceRadius, false, true));
    array[2].add(addOrNegate(faceRadius, true, true));
    array[3].add(addOrNegate(faceRadius, true, false));
    return array;
}
项目:form-follows-function    文件:ByteBufferVertexData.java   
@Override
public <T extends Tuple3f> T getVertex(int idx, T out) {
    int off = idx*vertexStride;
    out.x = vertexData.getFloat(off+4*0);
    out.y = vertexData.getFloat(off+4*1);
    out.z = vertexData.getFloat(off+4*2);
    return out;
}
项目:MCAnm    文件:Point.java   
public void putIntoBakedQuadBuilder(UnpackedBakedQuad.Builder builder, TextureAtlasSprite sprite) {
    Vertex transformed = getTransformedVertex();
    Tuple4f positionBuffer = new Vector4f();
    transformed.getPosition(positionBuffer);
    Tuple3f normalBuffer = new Vector3f();
    transformed.getNormal(normalBuffer);
    Tuple2f uvBuffer = new Vector2f();
    transformed.getUV(uvBuffer);

    VertexFormat vertexFormat = builder.getVertexFormat();
    int elementCount = vertexFormat.getElementCount();
    for (int e = 0; e < elementCount; e++) {
        VertexFormatElement element = vertexFormat.getElement(e);
        switch (element.getUsage()) {
        case POSITION:
            builder.put(e, positionBuffer.x, positionBuffer.z, -positionBuffer.y, positionBuffer.w);
            break;
        case NORMAL:
            builder.put(e, normalBuffer.x, normalBuffer.z, -normalBuffer.y, 0);
            break;
        case UV:
            if (element.getIndex() != 0)
                break;
            builder.put(
                    e,
                    sprite.getInterpolatedU(uvBuffer.x * 16),
                    sprite.getInterpolatedV(uvBuffer.y * 16),
                    0,
                    1);
            break;
        case COLOR:
            builder.put(e, 1, 1, 1, 1);
            break;
        default:
            builder.put(e);
        }
    }
}
项目:breakout    文件:SegmentedCurve3f.java   
private Tuple3f get(float param, List<? extends Tuple3f> list, Tuple3f result) {
    int index = findInsertionIndex(param);
    if (index < 0) {
        index = -(index + 1);
        checkInsertionIndex(index);
        float lower = params.get(index - 1);
        float upper = params.get(index);
        float f = (param - lower) / (upper - lower);
        result.interpolate(list.get(index - 1), list.get(index), f);
    } else {
        result.set(list.get(index));
    }
    return result;
}
项目:breakout    文件:VecmathUtils.java   
public static void checkReal(Tuple3f p) {
    if (Double.isNaN(p.x) || Double.isNaN(p.y) || Double.isNaN(p.z)) {
        throw new IllegalArgumentException("tuple has NaN values: " + p);
    }
    if (Double.isInfinite(p.x) || Double.isInfinite(p.y) || Double.isInfinite(p.z)) {
        throw new IllegalArgumentException("tuple has Infinite values: " + p);
    }
}
项目:breakout    文件:VecmathUtils.java   
public static <T extends Tuple3f> float[] toFloatArray3(Collection<T> tuples, float[] buffer) {
    if (buffer == null) {
        buffer = new float[tuples.size() * 3];
    }
    int d = 0;
    for (final T tuple : tuples) {
        buffer[d++] = tuple.x;
        buffer[d++] = tuple.y;
        buffer[d++] = tuple.z;
    }
    return buffer;
}
项目:breakout    文件:VecmathUtils.java   
public static <T extends Tuple3f> float[] toFloatArray3(T[] tuples, float[] buffer) {
    if (buffer == null) {
        buffer = new float[tuples.length * 3];
    }
    int d = 0;
    for (final T tuple : tuples) {
        buffer[d++] = tuple.x;
        buffer[d++] = tuple.y;
        buffer[d++] = tuple.z;
    }
    return buffer;
}
项目:breakout    文件:Camera3D.java   
/**
 * Sets the camera location to <code>newLocation</code> without affecting the rotation.
 */
public void setLocation( Tuple3f newLocation , boolean applyNow )
{
    m_pendingPosition.setLocation( newLocation );
    if( applyNow )
    {
        exportVPT( );
    }
}
项目:breakout    文件:CameraPosition.java   
static void checkValid( Tuple3f t )
{
    if( Double.isNaN( t.x ) || Double.isNaN( t.y ) || Double.isNaN( t.z ) )
    {
        throw new IllegalArgumentException( "tuple has NaN values" );
    }
    if( Double.isInfinite( t.x ) || Double.isInfinite( t.y ) || Double.isInfinite( t.z ) )
    {
        throw new IllegalArgumentException( "tuple has Infinite values" );
    }
}
项目:breakout    文件:CameraPosition.java   
/**
 * Sets the camera location to <code>newLocation</code> without affecting the rotation.
 */
public void setLocation( Tuple3f newLocation )
{
    checkValid( newLocation );
    tempVec.set( newLocation );
    setLocation( tempVec );
}
项目:java-3d-utils4gl    文件:VertexBuffer.java   
/**
 * Gets the specified vertex from the buffer
 * 
 * @param _nIndex The index of the vertex to retrieve
 * @param _tuple Tuple3f object where the vertex coordinates will be stored
 */
public void getVertex(int _nIndex, Tuple3f _tuple) {
    int nIdx = getVertexOffset(_nIndex);
    _tuple.x = m_vertices.get(nIdx + 0);
    _tuple.y = m_vertices.get(nIdx + 1);
    _tuple.z = m_vertices.get(nIdx + 2);
}
项目:java-3d-utils4gl    文件:VertexBuffer.java   
/**
 * Adds the specified vertex to the buffer
 * 
 * @param _tuple Tuple3f object to add to the vertex buffer
 */
public void addVertex(Tuple3f _tuple) {
    int nIdx = getVertexOffset(m_nVertexCount);
    m_vertices.put(nIdx + 0, _tuple.x);
    m_vertices.put(nIdx + 1, _tuple.y);
    m_vertices.put(nIdx + 2, _tuple.z);
    m_nVertexCount++;
}
项目:java-3d-utils4gl    文件:VertexBuffer.java   
/**
 * Changes the specified vertex in the buffer
 * 
 * @param _nIndex The index of the vertex to change
 * @param _tuple Tuple3f object to use to change the vertex buffer
 */
public void setVertex(int _nIndex, Tuple3f _tuple) {
    int nIdx = getVertexOffset(_nIndex);
    m_vertices.put(nIdx + 0, _tuple.x);
    m_vertices.put(nIdx + 1, _tuple.y);
    m_vertices.put(nIdx + 2, _tuple.z);
}
项目:java-3d-utils4gl    文件:VertexBuffer.java   
/**
 * Gets the specified normal from the buffer
 * 
 * @param _nIndex The index of the normal to retrieve
 * @param _tuple Tuple3f object where the normal coordinates will be stored
 */
public void getNormal(int _nIndex, Tuple3f _tuple) {
    int nIdx = _nIndex * m_nVertexInfoSize + m_nNormalOffset;
    _tuple.x = m_normals.get(nIdx + 0);
    _tuple.y = m_normals.get(nIdx + 1);
    _tuple.z = m_normals.get(nIdx + 2);
}
项目:java-3d-utils4gl    文件:VertexBuffer.java   
/**
 * Adds a new normal to the buffer
 * 
 * @param _tuple Tuple3f object to add to the normal buffer
 */
public void addNormal(Tuple3f _tuple) {
    int nIdx = getNormalOffset(m_nVertexCount);
    m_normals.put(nIdx + 0, _tuple.x);
    m_normals.put(nIdx + 1, _tuple.y);
    m_normals.put(nIdx + 2, _tuple.z);
}
项目:java-3d-utils4gl    文件:VertexBuffer.java   
/**
 * Changes the specified normal in the buffer
 * 
 * @param _nIndex The index of the normal to change
 * @param _tuple Tuple3f object to use to change the normal buffer
 */
public void setNormal(int _nIndex, Tuple3f _tuple) {
    int nIdx = getNormalOffset(_nIndex);
    m_normals.put(nIdx + 0, _tuple.x);
    m_normals.put(nIdx + 1, _tuple.y);
    m_normals.put(nIdx + 2, _tuple.z);
}
项目:Mineworld    文件:TeraAssert.java   
public static void assertEquals(Tuple3f expected, Tuple3f actual, float error) {
    if (expected == null) {
        assertNull(actual);
    } else {
        assertNotNull(actual);
        String errorMessage = "Expected " + expected + ", actual" + actual;
        org.junit.Assert.assertEquals(errorMessage, expected.x, actual.x, error);
        org.junit.Assert.assertEquals(errorMessage, expected.y, actual.y, error);
        org.junit.Assert.assertEquals(errorMessage, expected.z, actual.z, error);
    }
}
项目:ChessMaster    文件:RenderUtil.java   
static float[] toFloatArray(Tuple3f tuple) {
    return new float[]{tuple.getX(), tuple.getY(), tuple.getZ()};
}
项目:CustomWorldGen    文件:TRSRTransformation.java   
public static Vector3f lerp(Tuple3f from, Tuple3f to, float progress)
{
    Vector3f res = new Vector3f(from);
    res.interpolate(from, to, progress);
    return res;
}
项目:Analyst    文件:FacialPoint.java   
public void setCoords(Tuple3f coords) {        
    this.pos = new Vector3f(coords);
}