Example usage for org.apache.commons.math3.geometry.euclidean.threed Vector3D getZ

List of usage examples for org.apache.commons.math3.geometry.euclidean.threed Vector3D getZ

Introduction

In this page you can find the example usage for org.apache.commons.math3.geometry.euclidean.threed Vector3D getZ.

Prototype

public double getZ() 

Source Link

Document

Get the height of the vector.

Usage

From source file:org.jtrfp.trcl.core.Renderer.java

public void setSunVector(Vector3D sv) {
    factory.getDeferredProgram().use();//from   ww w.  jav a  2 s  .  c o m
    factory.getSunVectorUniform().set((float) sv.getX(), (float) sv.getY(), (float) sv.getZ());
    gpu.defaultProgram();
}

From source file:org.jtrfp.trcl.core.TR.java

public static Vector3D twosComplimentSubtract(Vector3D l, Vector3D r) {
    return new Vector3D(deltaRollover(l.getX() - r.getX()), deltaRollover(l.getY() - r.getY()),
            deltaRollover(l.getZ() - r.getZ()));
}

From source file:org.jtrfp.trcl.DEFObjectPlacer.java

@Override
public void placeObjects(RenderableSpacePartitioningGrid target, Vector3D positionOffset) {
    final List<EnemyDefinition> defs = def.getEnemyDefinitions();
    final List<EnemyPlacement> places = def.getEnemyPlacements();
    final Model[] models = new Model[defs.size()];
    //final TR tr = world.getTr();
    final LoadingProgressReporter[] defReporters = rootReporter.generateSubReporters(defs.size());
    final LoadingProgressReporter[] placementReporters = rootReporter.generateSubReporters(places.size());
    for (int i = 0; i < defs.size(); i++) {
        defReporters[i].complete();/*from   w ww. ja  va  2s  .c o  m*/
        final int index = i;//???
        final EnemyDefinition def = defs.get(index);
        try {
            models[index] = tr.getResourceManager().getBINModel(def.getComplexModelFile(),
                    tr.getGlobalPaletteVL(), null, tr.gpu.get().getGl());
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (models[index] == null)
            System.out.println(
                    "Failed to get a model from BIN " + def.getComplexModelFile() + " at index " + index);
        final Reporter reporter = tr.getReporter();
        reporter.report("org.jtrfp.trcl.DEFObjectPlacer.def." + defs.get(i).getDescription().replace('.', ' ')
                + ".complexModelFile", defs.get(i).getComplexModelFile());
        reporter.report("org.jtrfp.trcl.DEFObjectPlacer.def." + defs.get(i).getDescription().replace('.', ' ')
                + ".logic", defs.get(i).getLogic());
        reporter.report("org.jtrfp.trcl.DEFObjectPlacer.def." + defs.get(i).getDescription().replace('.', ' ')
                + ".simpleModelFile", defs.get(i).getSimpleModel());
    } //end for(i:defs)
    int placementReporterIndex = 0;
    for (EnemyPlacement pl : places) {
        placementReporters[placementReporterIndex++].complete();
        Model model = models[pl.getDefIndex()];
        if (model != null) {
            final EnemyDefinition def = defs.get(pl.getDefIndex());
            final DEFObject obj = new DEFObject(tr, model, def, pl);
            if (defList != null)
                defList.add(obj);
            if (def.isShowOnBriefing() && !enemyPlacementMap.containsKey(def)) {
                enemyPlacementMap.put(def, obj);
            } //end 
            //USING  z,x coords
            final double[] objPos = obj.getPosition();
            objPos[0] = TR.legacy2Modern(pl.getLocationOnMap().getZ()) + positionOffset.getX();
            objPos[1] = (TR.legacy2Modern(pl.getLocationOnMap().getY()) / TR.mapWidth) * 16.
                    * tr.getWorld().sizeY + positionOffset.getY();
            objPos[2] = TR.legacy2Modern(pl.getLocationOnMap().getX()) + positionOffset.getZ();
            obj.notifyPositionChange();

            if (def.getLogic() == EnemyLogic.groundStaticRuin) {
                //Spawn a second, powerup-free model using the simplemodel
                Model simpleModel = null;
                try {
                    simpleModel = tr.getResourceManager().getBINModel(def.getSimpleModel(),
                            tr.getGlobalPaletteVL(), null, tr.gpu.get().getGl());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                EnemyDefinition ed = new EnemyDefinition();
                ed.setLogic(EnemyLogic.groundDumb);
                ed.setDescription("auto-generated enemy rubble def");
                ed.setPowerupProbability(0);
                EnemyPlacement simplePlacement = pl.clone();
                final DEFObject ruin = new DEFObject(tr, simpleModel, ed, simplePlacement);
                ruin.setVisible(false);
                ruin.setIsRuin(true);
                obj.setRuinObject(ruin);
                ruin.setPosition(obj.getPosition());
                try {
                    ruin.setDirection(new ObjectDirection(pl.getRoll(), pl.getPitch(), pl.getYaw() + 65536));
                } catch (MathArithmeticException e) {
                    e.printStackTrace();
                }
                target.add(ruin);
            } //end if(groundStaticRuin)
            if (pl.getRoll() != 0 || pl.getPitch() != 0 || pl.getYaw() != 0)//Only set if not 0,0,0
                try {
                    obj.setDirection(new ObjectDirection(pl.getRoll(), pl.getPitch(), pl.getYaw() + 65536));
                } catch (MathArithmeticException e) {
                    e.printStackTrace();
                }
            if (headingOverride != null) {
                final double[] headingArray = obj.getHeadingArray();
                headingArray[0] = headingOverride.getX();
                headingArray[1] = headingOverride.getY();
                headingArray[2] = headingOverride.getZ();
            } //end if(headingOverride)
            target.add(obj);
        } //end if(model!=null)
        else {
            System.out.println("Skipping triangle list at index " + pl.getDefIndex());
        }
    } //end for(places)
    for (EnemyDefinition ed : enemyPlacementMap.keySet()) {
        enemyIntros.add(new EnemyIntro(enemyPlacementMap.get(ed), ed.getDescription()));
    }
}

From source file:org.jtrfp.trcl.flow.Mission.java

public void setSatelliteView(boolean satelliteView) {
    if (!(getMissionMode() instanceof AboveGroundMode) && satelliteView)
        throw new IllegalArgumentException("Cannot activate satellite view while mission mode is "
                + getMissionMode().getClass().getSimpleName());
    if (satelliteView && tr.getGame().isPaused())
        throw new IllegalArgumentException("Cannot activate satellite view while paused.");
    pcs.firePropertyChange(SATELLITE_VIEW, this.satelliteView, satelliteView);
    if (satelliteView != this.satelliteView) {
        final Game game = tr.getGame();
        final Camera cam = tr.mainRenderer.get().getCamera();
        if (satelliteView) {//Switched on
            tr.getThreadManager().setPaused(true);
            game.getNavSystem().deactivate();
            game.getHUDSystem().deactivate();
            cam.setFogEnabled(false);/*from  ww w  .  j  a  v a  2  s .  com*/
            cam.probeForBehavior(MatchPosition.class).setEnable(false);
            cam.probeForBehavior(MatchDirection.class).setEnable(false);
            final Vector3D pPos = new Vector3D(game.getPlayer().getPosition());
            final Vector3D pHeading = tr.getGame().getPlayer().getHeading();
            cam.setPosition(new Vector3D(pPos.getX(), TR.mapSquareSize * 25, pPos.getZ()));
            cam.setHeading(Vector3D.MINUS_J);
            cam.setTop(new Vector3D(pHeading.getX(), .0000000001, pHeading.getZ()).normalize());
            tr.getGame().getSatDashboard().setVisible(true);
        } else {//Switched off
            tr.getThreadManager().setPaused(false);
            tr.getGame().getNavSystem().activate();
            game.getHUDSystem().activate();
            cam.setFogEnabled(true);
            cam.probeForBehavior(MatchPosition.class).setEnable(true);
            cam.probeForBehavior(MatchDirection.class).setEnable(true);
            tr.getGame().getSatDashboard().setVisible(false);
        } //end !satelliteView
    } //end if(change)
    this.satelliteView = satelliteView;
}

From source file:org.jtrfp.trcl.LineSegment.java

public static Triangle[] buildTriPipe(Vector3D start, Vector3D end, TextureDescription texture, int thickness,
        Triangle[] dest, int destOffset) {
    Rotation rot = new Rotation(Vector3D.PLUS_K, end.subtract(start).normalize());
    final double len = start.distance(end);
    // Start/*from www  .  j a v  a2  s .com*/
    Vector3D sbl = new Vector3D(-thickness, -thickness, 0);// bottom left
    Vector3D sbr = new Vector3D(thickness, -thickness, 0);// bottom right
    Vector3D stp = new Vector3D(0, thickness, 0);
    // End
    Vector3D ebl = new Vector3D(-thickness, -thickness, len);
    Vector3D ebr = new Vector3D(thickness, -thickness, len);
    Vector3D etp = new Vector3D(0, thickness, len);

    Vector3D cl = new Vector3D(-1, 1, 0).normalize();
    Vector3D cr = new Vector3D(1, 1, 0).normalize();
    Vector3D cb = new Vector3D(0, -1, 0);

    cl = rot.applyTo(cl);
    cr = rot.applyTo(cr);
    cb = rot.applyTo(cb);

    sbl = rot.applyTo(sbl).add(start);
    sbr = rot.applyTo(sbr).add(start);
    stp = rot.applyTo(stp).add(start);

    ebl = rot.applyTo(ebl).add(start);
    ebr = rot.applyTo(ebr).add(start);
    etp = rot.applyTo(etp).add(start);

    final double u[] = { 0, 1, 1, 0 };
    final double v[] = { 1, 1, 0, 0 };
    // TOP LEFT
    Triangle.quad2Triangles(new double[] { sbl.getX(), stp.getX(), etp.getX(), ebl.getX() },
            new double[] { sbl.getY(), stp.getY(), etp.getY(), ebl.getY() },
            new double[] { sbl.getZ(), stp.getZ(), etp.getZ(), ebl.getZ() }, u, v, texture, RenderMode.STATIC,
            false, cl, dest, destOffset, "LineSegment.topLeft");
    // TOP RIGHT
    Triangle.quad2Triangles(new double[] { sbr.getX(), stp.getX(), etp.getX(), ebr.getX() },
            new double[] { sbr.getY(), stp.getY(), etp.getY(), ebr.getY() },
            new double[] { sbr.getZ(), stp.getZ(), etp.getZ(), ebr.getZ() }, u, v, texture, RenderMode.STATIC,
            false, cr, dest, destOffset + 2, "LineSegment.topRight");
    // BOTTOM
    Triangle.quad2Triangles(new double[] { sbl.getX(), sbr.getX(), ebr.getX(), ebl.getX() },
            new double[] { sbl.getY(), sbr.getY(), ebr.getY(), ebl.getY() },
            new double[] { sbr.getZ(), sbr.getZ(), ebr.getZ(), ebl.getZ() }, u, v, texture, RenderMode.STATIC,
            false, cb, dest, destOffset + 4, "LineSegment.bottom");
    return dest;
}

From source file:org.jtrfp.trcl.obj.DEFObject.java

private void fallingObjectBehavior() {
    canTurn = false;/*  ww  w  .j  a  v a  2  s  .c  o m*/
    mobile = false;//Technically wrong but propulsion is unneeded.
    //addBehavior(new PulledDownByGravityBehavior());
    final MovesByVelocity mbv = new MovesByVelocity();
    mbv.setVelocity(new Vector3D(3500, -100000, 5000));
    addBehavior(mbv);
    //addBehavior(new VelocityDragBehavior().setDragCoefficient(.99)); // For some reason it falls like pine tar
    addBehavior(new DamageableBehavior().setMaxHealth(10).setHealth(10));
    addBehavior(new DeathBehavior());
    addBehavior(new CollidesWithTerrain().setIgnoreCeiling(true));
    addBehavior(new DamagedByCollisionWithSurface());
    addBehavior(new RotationalMomentumBehavior().setEquatorialMomentum(.01).setLateralMomentum(.02)
            .setPolarMomentum(.03));
    {
        final DEFObject thisObject = this;
        final TR thisTr = getTr();
        addBehavior(new ResetsRandomlyAfterDeath().setMinWaitMillis(1000).setMaxWaitMillis(5000)
                .setRunOnReset(new Runnable() {
                    @Override
                    public void run() {
                        final Vector3D centerPos = thisObject.probeForBehavior(DeathBehavior.class)
                                .getLocationOfLastDeath();
                        thisObject.probeForBehavior(MovesByVelocity.class)
                                .setVelocity(new Vector3D(7000, -200000, 1000));
                        final double[] pos = thisObject.getPosition();
                        pos[0] = centerPos.getX() + Math.random() * TR.mapSquareSize * 3
                                - TR.mapSquareSize * 1.5;
                        pos[1] = thisTr.getWorld().sizeY / 2 + thisTr.getWorld().sizeY * (Math.random()) * .3;
                        pos[2] = centerPos.getZ() + Math.random() * TR.mapSquareSize * 3
                                - TR.mapSquareSize * 1.5;
                        thisObject.notifyPositionChange();
                    }//end run()
                }));
    }
}

From source file:org.jtrfp.trcl.obj.Explosion.java

public Explosion(TR tr, ExplosionType type) {
    super(tr, type.getMillisPerFrame(), type.getAnimationFiles().length);
    final Vector3D origin = type.getOrigin();
    this.setModelOffset(origin.getX() * type.getBillboardSize().getWidth() * -.5,
            origin.getY() * type.getBillboardSize().getHeight() * -.5, origin.getZ());
    this.type = type;
    setBillboardSize(type.getBillboardSize());
    if (type.isRandomRotate())
        setRotation(2 * Math.PI * Math.random());
    String[] aniFiles = type.getAnimationFiles();
    Texture[] frames = new Texture[aniFiles.length];
    try {//  w  w w . j  a v  a2 s . c o  m
        for (int i = 0; i < aniFiles.length; i++) {
            frames[i] = frame(aniFiles[i]);
        }
    } //end try{}
    catch (Exception e) {
        e.printStackTrace();
    }
    setTexture(new AnimatedTexture(getSequencer(), frames), true);
}

From source file:org.jtrfp.trcl.obj.ExplosionSystem.java

public Explosion triggerExplosion(Vector3D loc, ExplosionType type) {
    if (!isNewExplosionFeasible(loc, type))
        return null;
    indices[type.ordinal()]++;//from  www  . jav  a 2s .c  o  m
    indices[type.ordinal()] %= MAX_EXPLOSIONS_PER_POOL;
    Explosion result = allExplosions[type.ordinal()][indices[type.ordinal()]];
    result.destroy();
    result.reset();
    result.setPosition(loc.getX(), loc.getY(), loc.getZ());
    result.notifyPositionChange();
    final SmokeSystem sf = tr.getResourceManager().getSmokeSystem();
    final int NUM_PUFFS = 1;

    for (int i = 0; i < NUM_PUFFS; i++) {
        sf.triggerSmoke(loc.add(new Vector3D(Math.random() * 10000 - 5000, Math.random() * 10000 - 5000,
                Math.random() * 10000 - 5000)), SmokeType.Puff);
    } //end for(i)

    add(result);
    return result;
}

From source file:org.jtrfp.trcl.obj.TunnelSegment.java

private static Model createModel(Segment s, double segLen, TextureDescription[] tunnelTexturePalette,
        double endX, double endY, final TR tr) {
    Model mainModel = new Model(true, tr);
    mainModel.setDebugName("tunnelSegment main.");
    final int numPolys = s.getNumPolygons();
    double startWidth = getStartWidth(s);
    double startHeight = getStartHeight(s);
    double endWidth = getEndWidth(s);
    double endHeight = getEndHeight(s);
    final FlickerLightType lightType = s.getFlickerLightType();
    // TODO: Cleanup.
    final double startAngle1 = ((double) s.getStartAngle1() / 65535.) * 2. * Math.PI;
    final double startAngle2 = ((double) s.getStartAngle2() / 65535.) * 2. * Math.PI;
    final double startAngle = startAngle1;
    final double endAngle1 = ((double) s.getEndAngle1() / 65535.) * 2. * Math.PI;
    final double endAngle2 = ((double) s.getEndAngle2() / 65535.) * 2. * Math.PI;
    double endAngle = endAngle1;
    final double dAngleStart = (startAngle2 - startAngle1) / (double) numPolys;
    final double dAngleEnd = (endAngle2 - endAngle1) / (double) numPolys;
    final double startX = 0;
    final double startY = 0;
    final double zStart = 0;
    final double zEnd = segLen;
    final int numPolygonsMinusOne = s.getNumPolygons() - 1;
    final int lightPoly = s.getLightPolygon();
    final boolean hasLight = lightPoly != -1;
    if (hasLight) {
        mainModel.setAnimateUV(true);/* w  w  w .  java2s .  co  m*/
        mainModel.setSmoothAnimation(false);
        if (lightType == FlickerLightType.noLight) {
            //Do nothing.
        } else if (lightType == FlickerLightType.off1p5Sec) {
            mainModel.setController(new Controller() {
                private final int off = (int) (Math.random() * 2000);

                @Override
                public double getCurrentFrame() {
                    return (off + System.currentTimeMillis() % 2000) > 1500 ? 1 : 0;
                }

                @Override
                public void setDebugMode(boolean b) {
                    //Not implemented.
                }
            });
        } else if (lightType == FlickerLightType.on1p5Sec) {
            mainModel.setController(new Controller() {
                private final int off = (int) (Math.random() * 2000);

                @Override
                public double getCurrentFrame() {
                    return (off + System.currentTimeMillis() % 2000) < 1500 ? 1 : 0;
                }

                @Override
                public void setDebugMode(boolean b) {
                    //Not implemented.
                }
            });
        } else if (lightType == FlickerLightType.on1Sec) {
            mainModel.setController(new Controller() {
                private final int off = (int) (Math.random() * 2000);

                @Override
                public double getCurrentFrame() {
                    return (off + System.currentTimeMillis() % 2000) > 1000 ? 1 : 0;
                }

                @Override
                public void setDebugMode(boolean b) {
                    //Not implemented.
                }
            });
        }
    } //end (has light)
    final double[] noLightU = new double[] { 1, 1, 0, 0 };
    final double[] noLightV = new double[] { 0, 1, 1, 0 };
    final double[] lightOffU = new double[] { 1, 1, .5, .5 };
    final double[] lightOffV = new double[] { .5, 1, 1, .5 };
    final double[] lightOnU = new double[] { .5, .5, 0, 0 };
    final double[] lightOnV = new double[] { .5, 1, 1, .5 };

    double rotPeriod = (1000. * 32768.) / (double) s.getRotationSpeed();
    final boolean reverseDirection = rotPeriod < 0;
    if (reverseDirection)
        rotPeriod *= -1;
    final int numFramesIfRotating = 30;
    final int numFramesIfStatic = 2;
    final boolean isRotating = !Double.isInfinite(rotPeriod);
    int numAnimFrames = isRotating ? numFramesIfRotating : numFramesIfStatic;
    if (isRotating)
        mainModel.setFrameDelayInMillis((int) (rotPeriod / (numAnimFrames)));
    final double animationDeltaRadians = isRotating
            ? ((reverseDirection ? 1 : -1) * (2 * Math.PI) / (double) numAnimFrames)
            : 0;
    //FRAME LOOP
    for (int frameIndex = 0; frameIndex < numAnimFrames; frameIndex++) {
        final Model m = new Model(false, tr);
        m.setDebugName("TunnelSegment frame " + frameIndex + " of " + numAnimFrames);
        final double frameAngleDeltaRadians = animationDeltaRadians * (double) frameIndex;
        double frameStartAngle = startAngle + frameAngleDeltaRadians;
        double frameEndAngle = endAngle + frameAngleDeltaRadians;
        final double frameStartAngle1 = startAngle1 + frameAngleDeltaRadians;
        final double frameStartAngle2 = startAngle2 + frameAngleDeltaRadians;
        final double frameEndAngle1 = endAngle + frameAngleDeltaRadians;
        double[] thisU = noLightU, thisV = noLightV;//Changeable u/v references, default to noLight
        // Poly quads
        for (int pi = 0; pi < numPolygonsMinusOne; pi++) {
            Vector3D p0 = segPoint(frameStartAngle, zStart, startWidth, startHeight, startX, startY);
            Vector3D p1 = segPoint(frameEndAngle, zEnd, endWidth, endHeight, endX, endY);
            Vector3D p2 = segPoint(frameEndAngle + dAngleEnd, zEnd, endWidth, endHeight, endX, endY);
            Vector3D p3 = segPoint(frameStartAngle + dAngleStart, zStart, startWidth, startHeight, startX,
                    startY);

            TextureDescription tex = tunnelTexturePalette[s.getPolyTextureIndices().get(pi)];

            if (pi == lightPoly && lightType != FlickerLightType.noLight) {
                if (frameIndex == 0) {
                    thisU = lightOnU;
                    thisV = lightOnV;
                } else {
                    thisU = lightOffU;
                    thisV = lightOffV;
                }
                /*try {
                            
                    final int flickerThresh = flt == FlickerLightType.off1p5Sec ? (int) (-.3 * (double) Integer.MAX_VALUE)
                       : flt == FlickerLightType.on1p5Sec ? (int) (.4 * (double) Integer.MAX_VALUE)
                          : flt == FlickerLightType.on1Sec ? (int) (.25 * (double) Integer.MAX_VALUE)
                             : Integer.MAX_VALUE;
                        
                    m.addTickableAnimator(new Tickable() {
                   @Override
                   public void tick() {
                       if (flickerRandom.transfer(Math.abs((int) System
                          .currentTimeMillis())) > flickerThresh)
                      st.setFrame(1);
                       else
                      st.setFrame(0);
                   }
                           
                    });
                } catch (Exception e) {
                    e.printStackTrace();
                }*/
            } else {
                thisU = noLightU;
                thisV = noLightV;
            } // No light

            m.addTriangles(Triangle.quad2Triangles(new double[] { p3.getX(), p2.getX(), p1.getX(), p0.getX() },
                    new double[] { p3.getY(), p2.getY(), p1.getY(), p0.getY() },
                    new double[] { p3.getZ(), p2.getZ(), p1.getZ(), p0.getZ() }, thisU, thisV, tex,
                    RenderMode.DYNAMIC,
                    new Vector3D[] {
                            new Vector3D(Math.cos(frameStartAngle + dAngleStart),
                                    -Math.sin(frameStartAngle + dAngleStart), 0),
                            new Vector3D(Math.cos(frameEndAngle + dAngleEnd),
                                    -Math.sin(frameEndAngle + dAngleEnd), 0),
                            new Vector3D(Math.cos(frameEndAngle), -Math.sin(frameEndAngle), 0),
                            new Vector3D(Math.cos(frameStartAngle), -Math.sin(frameStartAngle), 0) },
                    0));
            frameStartAngle += dAngleStart;
            frameEndAngle += dAngleEnd;
        } // for(polygons)
        if (s.isCutout()) {
            // The slice quad
            // INWARD
            Vector3D p0 = segPoint(frameStartAngle, zStart, startWidth, startHeight, startX, startY);
            Vector3D p1 = segPoint(frameEndAngle, zEnd, endWidth, endHeight, endX, endY);
            Vector3D p2 = segPoint(frameEndAngle1, zEnd, 0, 0, endX, endY);
            Vector3D p3 = segPoint(frameStartAngle1, zStart, 0, 0, startX, startY);
            m.addTriangles(Triangle.quad2Triangles(new double[] { p3.getX(), p2.getX(), p1.getX(), p0.getX() },
                    new double[] { p3.getY(), p2.getY(), p1.getY(), p0.getY() },
                    new double[] { p3.getZ(), p2.getZ(), p1.getZ(), p0.getZ() },

                    new double[] { 1, 1, 0, 0 }, new double[] { 0, 1, 1, 0 },
                    tunnelTexturePalette[s.getPolyTextureIndices().get(numPolygonsMinusOne)],
                    RenderMode.DYNAMIC,
                    new Vector3D[] {
                            new Vector3D(Math.cos(frameStartAngle + dAngleStart),
                                    -Math.sin(frameStartAngle + dAngleStart), 0),
                            new Vector3D(Math.cos(frameEndAngle + dAngleEnd),
                                    -Math.sin(frameEndAngle + dAngleEnd), 0),
                            new Vector3D(Math.cos(frameEndAngle), -Math.sin(frameEndAngle), 0),
                            new Vector3D(Math.cos(frameStartAngle), -Math.sin(frameStartAngle), 0) },
                    0));
            // OUTWARD
            p3 = segPoint(frameStartAngle1, zStart, startWidth, startHeight, startX, startY);
            p2 = segPoint(frameEndAngle1, zEnd, endWidth, endHeight, endX, endY);
            p1 = segPoint(frameEndAngle1, zEnd, 0, 0, endX, endY);
            p0 = segPoint(frameStartAngle1, zStart, 0, 0, startX, startY);
            m.addTriangles(Triangle.quad2Triangles(new double[] { p3.getX(), p2.getX(), p1.getX(), p0.getX() },
                    new double[] { p3.getY(), p2.getY(), p1.getY(), p0.getY() },
                    new double[] { p3.getZ(), p2.getZ(), p1.getZ(), p0.getZ() },

                    new double[] { 1, 1, 0, 0 }, new double[] { 0, 1, 1, 0 },
                    tunnelTexturePalette[s.getPolyTextureIndices().get(numPolygonsMinusOne)],
                    RenderMode.DYNAMIC,
                    new Vector3D[] {
                            new Vector3D(Math.cos(frameStartAngle + dAngleStart),
                                    -Math.sin(frameStartAngle + dAngleStart), 0),
                            new Vector3D(Math.cos(frameEndAngle + dAngleEnd),
                                    -Math.sin(frameEndAngle + dAngleEnd), 0),
                            new Vector3D(Math.cos(frameEndAngle), -Math.sin(frameEndAngle), 0),
                            new Vector3D(Math.cos(frameStartAngle), -Math.sin(frameStartAngle), 0) },
                    0));
        } else {
            // The slice quad
            Vector3D p0 = segPoint(frameStartAngle, zStart, startWidth, startHeight, startX, startY);
            Vector3D p1 = segPoint(frameEndAngle, zEnd, endWidth, endHeight, endX, endY);
            Vector3D p2 = segPoint(frameEndAngle1, zEnd, endWidth, endHeight, endX, endY);
            Vector3D p3 = segPoint(frameStartAngle1, zStart, startWidth, startHeight, startX, startY);
            m.addTriangles(Triangle.quad2Triangles(new double[] { p3.getX(), p2.getX(), p1.getX(), p0.getX() },
                    new double[] { p3.getY(), p2.getY(), p1.getY(), p0.getY() },
                    new double[] { p3.getZ(), p2.getZ(), p1.getZ(), p0.getZ() },

                    new double[] { 1, 1, 0, 0 }, new double[] { 0, 1, 1, 0 },
                    tunnelTexturePalette[s.getPolyTextureIndices().get(numPolygonsMinusOne)],
                    RenderMode.DYNAMIC,
                    new Vector3D[] {
                            new Vector3D(Math.cos(frameStartAngle + dAngleStart),
                                    -Math.sin(frameStartAngle + dAngleStart), 0),
                            new Vector3D(Math.cos(frameEndAngle + dAngleEnd),
                                    -Math.sin(frameEndAngle + dAngleEnd), 0),
                            new Vector3D(Math.cos(frameEndAngle), -Math.sin(frameEndAngle), 0),
                            new Vector3D(Math.cos(frameStartAngle), -Math.sin(frameStartAngle), 0) },
                    0));
        } //end !cutout
          //if(numAnimFrames!=1)//Push frame if animated.
        mainModel.addFrame(m);
    } //end for(frames)
    return mainModel;
}

From source file:org.jtrfp.trcl.obj.WorldObject.java

protected void attemptLoop() {
    if (LOOP) {/*from  w w  w  .  j a  v  a 2 s  .  c  o m*/
        final Vector3D camPos = tr.mainRenderer.get().getCamera().getCameraPosition();
        double delta = position[0] - camPos.getX();
        if (delta > TR.mapWidth / 2.) {
            position[0] -= TR.mapWidth;
            needToRecalcMatrix = true;
        } else if (delta < -TR.mapWidth / 2.) {
            position[0] += TR.mapWidth;
            needToRecalcMatrix = true;
        }
        delta = position[1] - camPos.getY();
        if (delta > TR.mapWidth / 2.) {
            position[1] -= TR.mapWidth;
            needToRecalcMatrix = true;
        } else if (delta < -TR.mapWidth / 2.) {
            position[1] += TR.mapWidth;
            needToRecalcMatrix = true;
        }
        delta = position[2] - camPos.getZ();
        if (delta > TR.mapWidth / 2.) {
            position[2] -= TR.mapWidth;
            needToRecalcMatrix = true;
        } else if (delta < -TR.mapWidth / 2.) {
            position[2] += TR.mapWidth;
            needToRecalcMatrix = true;
        }
    } //end if(LOOP)
}