Search in sources :

Example 26 with Mode

use of com.jme3.scene.Mesh.Mode in project jmonkeyengine by jMonkeyEngine.

the class Material method render.

/**
     * Called by {@link RenderManager} to render the geometry by
     * using this material.
     * <p>
     * The material is rendered as follows:
     * <ul>
     * <li>Determine which technique to use to render the material -
     * either what the user selected via
     * {@link #selectTechnique(java.lang.String, com.jme3.renderer.RenderManager)
     * Material.selectTechnique()},
     * or the first default technique that the renderer supports
     * (based on the technique's {@link TechniqueDef#getRequiredCaps() requested rendering capabilities})<ul>
     * <li>If the technique has been changed since the last frame, then it is notified via
     * {@link Technique#makeCurrent(com.jme3.asset.AssetManager, boolean, java.util.EnumSet)
     * Technique.makeCurrent()}.
     * If the technique wants to use a shader to render the model, it should load it at this part -
     * the shader should have all the proper defines as declared in the technique definition,
     * including those that are bound to material parameters.
     * The technique can re-use the shader from the last frame if
     * no changes to the defines occurred.</li></ul>
     * <li>Set the {@link RenderState} to use for rendering. The render states are
     * applied in this order (later RenderStates override earlier RenderStates):<ol>
     * <li>{@link TechniqueDef#getRenderState() Technique Definition's RenderState}
     * - i.e. specific renderstate that is required for the shader.</li>
     * <li>{@link #getAdditionalRenderState() Material Instance Additional RenderState}
     * - i.e. ad-hoc renderstate set per model</li>
     * <li>{@link RenderManager#getForcedRenderState() RenderManager's Forced RenderState}
     * - i.e. renderstate requested by a {@link com.jme3.post.SceneProcessor} or
     * post-processing filter.</li></ol>
     * <li>If the technique {@link TechniqueDef#isUsingShaders() uses a shader}, then the uniforms of the shader must be updated.<ul>
     * <li>Uniforms bound to material parameters are updated based on the current material parameter values.</li>
     * <li>Uniforms bound to world parameters are updated from the RenderManager.
     * Internally {@link UniformBindingManager} is used for this task.</li>
     * <li>Uniforms bound to textures will cause the texture to be uploaded as necessary.
     * The uniform is set to the texture unit where the texture is bound.</li></ul>
     * <li>If the technique uses a shader, the model is then rendered according
     * to the lighting mode specified on the technique definition.<ul>
     * <li>{@link LightMode#SinglePass single pass light mode} fills the shader's light uniform arrays
     * with the first 4 lights and renders the model once.</li>
     * <li>{@link LightMode#MultiPass multi pass light mode} light mode renders the model multiple times,
     * for the first light it is rendered opaque, on subsequent lights it is
     * rendered with {@link BlendMode#AlphaAdditive alpha-additive} blending and depth writing disabled.</li>
     * </ul>
     * <li>For techniques that do not use shaders,
     * fixed function OpenGL is used to render the model (see {@link GL1Renderer} interface):<ul>
     * <li>OpenGL state ({@link FixedFuncBinding}) that is bound to material parameters is updated. </li>
     * <li>The texture set on the material is uploaded and bound.
     * Currently only 1 texture is supported for fixed function techniques.</li>
     * <li>If the technique uses lighting, then OpenGL lighting state is updated
     * based on the light list on the geometry, otherwise OpenGL lighting is disabled.</li>
     * <li>The mesh is uploaded and rendered.</li>
     * </ul>
     * </ul>
     *
     * @param geometry The geometry to render
     * @param lights Presorted and filtered light list to use for rendering
     * @param renderManager The render manager requesting the rendering
     */
public void render(Geometry geometry, LightList lights, RenderManager renderManager) {
    if (technique == null) {
        selectTechnique(TechniqueDef.DEFAULT_TECHNIQUE_NAME, renderManager);
    }
    TechniqueDef techniqueDef = technique.getDef();
    Renderer renderer = renderManager.getRenderer();
    EnumSet<Caps> rendererCaps = renderer.getCaps();
    if (techniqueDef.isNoRender()) {
        return;
    }
    // Apply render state
    updateRenderState(renderManager, renderer, techniqueDef);
    // Get world overrides
    SafeArrayList<MatParamOverride> overrides = geometry.getWorldMatParamOverrides();
    // Select shader to use
    Shader shader = technique.makeCurrent(renderManager, overrides, renderManager.getForcedMatParams(), lights, rendererCaps);
    // Begin tracking which uniforms were changed by material.
    clearUniformsSetByCurrent(shader);
    // Set uniform bindings
    renderManager.updateUniformBindings(shader);
    // Set material parameters
    int unit = updateShaderMaterialParameters(renderer, shader, overrides, renderManager.getForcedMatParams());
    // Clear any uniforms not changed by material.
    resetUniformsNotSetByCurrent(shader);
    // Delegate rendering to the technique
    technique.render(renderManager, shader, geometry, lights, unit);
}
Also used : Renderer(com.jme3.renderer.Renderer) Shader(com.jme3.shader.Shader) Caps(com.jme3.renderer.Caps)

Example 27 with Mode

use of com.jme3.scene.Mesh.Mode in project jmonkeyengine by jMonkeyEngine.

the class TestApplication method main.

public static void main(String[] args) throws InterruptedException {
    System.out.println("Creating application..");
    LegacyApplication app = new LegacyApplication();
    System.out.println("Starting application in LWJGL mode..");
    app.start();
    System.out.println("Waiting 5 seconds");
    Thread.sleep(5000);
    System.out.println("Closing application..");
    app.stop();
    Thread.sleep(2000);
    System.out.println("Starting in fullscreen mode");
    app = new LegacyApplication();
    AppSettings settings = new AppSettings(true);
    settings.setFullscreen(true);
    // current width/height
    settings.setResolution(-1, -1);
    app.setSettings(settings);
    app.start();
    Thread.sleep(5000);
    app.stop();
    Thread.sleep(2000);
    System.out.println("Creating offscreen buffer application");
    app = new LegacyApplication();
    app.start(Type.OffscreenSurface);
    Thread.sleep(3000);
    System.out.println("Destroying offscreen buffer");
    app.stop();
}
Also used : AppSettings(com.jme3.system.AppSettings) LegacyApplication(com.jme3.app.LegacyApplication)

Example 28 with Mode

use of com.jme3.scene.Mesh.Mode in project jmonkeyengine by jMonkeyEngine.

the class TestPssmShadow method onAction.

public void onAction(String name, boolean keyPressed, float tpf) {
    if (name.equals("toggle") && keyPressed) {
        renderModeIndex += 1;
        renderModeIndex %= 3;
        switch(renderModeIndex) {
            case 0:
                viewPort.addProcessor(pssmRenderer);
                break;
            case 1:
                viewPort.removeProcessor(pssmRenderer);
                pssmFilter.setEnabled(true);
                break;
            case 2:
                pssmFilter.setEnabled(false);
                break;
        }
    } else if (name.equals("toggleHW") && keyPressed) {
        hardwareShadows = !hardwareShadows;
        pssmRenderer.setCompareMode(hardwareShadows ? CompareMode.Hardware : CompareMode.Software);
        pssmFilter.setCompareMode(hardwareShadows ? CompareMode.Hardware : CompareMode.Software);
        System.out.println("HW Shadows: " + hardwareShadows);
    }
    if (name.equals("changeFiltering") && keyPressed) {
        filteringIndex = (filteringIndex + 1) % FilterMode.values().length;
        FilterMode m = FilterMode.values()[filteringIndex];
        pssmRenderer.setFilterMode(m);
        pssmFilter.setFilterMode(m);
        print("Filter mode : " + m.toString());
    }
    if (name.equals("lambdaUp") && keyPressed) {
        pssmRenderer.setLambda(pssmRenderer.getLambda() + 0.01f);
        pssmFilter.setLambda(pssmRenderer.getLambda() + 0.01f);
        System.out.println("Lambda : " + pssmRenderer.getLambda());
    } else if (name.equals("lambdaDown") && keyPressed) {
        pssmRenderer.setLambda(pssmRenderer.getLambda() - 0.01f);
        pssmFilter.setLambda(pssmRenderer.getLambda() - 0.01f);
        System.out.println("Lambda : " + pssmRenderer.getLambda());
    }
    if (name.equals("ShadowUp") && keyPressed) {
        pssmRenderer.setShadowIntensity(pssmRenderer.getShadowIntensity() + 0.1f);
        pssmFilter.setShadowIntensity(pssmRenderer.getShadowIntensity() + 0.1f);
        System.out.println("Shadow intensity : " + pssmRenderer.getShadowIntensity());
    }
    if (name.equals("ShadowDown") && keyPressed) {
        pssmRenderer.setShadowIntensity(pssmRenderer.getShadowIntensity() - 0.1f);
        pssmFilter.setShadowIntensity(pssmRenderer.getShadowIntensity() - 0.1f);
        System.out.println("Shadow intensity : " + pssmRenderer.getShadowIntensity());
    }
    if (name.equals("ThicknessUp") && keyPressed) {
        pssmRenderer.setEdgesThickness(pssmRenderer.getEdgesThickness() + 1);
        pssmFilter.setEdgesThickness(pssmRenderer.getEdgesThickness() + 1);
        System.out.println("Shadow thickness : " + pssmRenderer.getEdgesThickness());
    }
    if (name.equals("ThicknessDown") && keyPressed) {
        pssmRenderer.setEdgesThickness(pssmRenderer.getEdgesThickness() - 1);
        pssmFilter.setEdgesThickness(pssmRenderer.getEdgesThickness() - 1);
        System.out.println("Shadow thickness : " + pssmRenderer.getEdgesThickness());
    }
    if (name.equals("switchGroundMat") && keyPressed) {
        if (ground.getMaterial() == matGroundL) {
            ground.setMaterial(matGroundU);
        } else {
            ground.setMaterial(matGroundL);
        }
    }
    if (name.equals("up")) {
        up = keyPressed;
    }
    if (name.equals("down")) {
        down = keyPressed;
    }
    if (name.equals("right")) {
        right = keyPressed;
    }
    if (name.equals("left")) {
        left = keyPressed;
    }
    if (name.equals("fwd")) {
        fwd = keyPressed;
    }
    if (name.equals("back")) {
        back = keyPressed;
    }
}
Also used : FilterMode(com.jme3.shadow.PssmShadowRenderer.FilterMode)

Example 29 with Mode

use of com.jme3.scene.Mesh.Mode in project jmonkeyengine by jMonkeyEngine.

the class FbxGlobalSettings method fromElement.

public void fromElement(FbxElement element) {
    // jME3 uses a +Y up, -Z forward coordinate system (same as OpenGL)
    // Luckily enough, this is also the default for FBX models.
    int timeMode = -1;
    float customFrameRate = 30.0f;
    for (FbxElement e2 : element.getFbxProperties()) {
        String propName = (String) e2.properties.get(0);
        if (propName.equals("UnitScaleFactor")) {
            unitScaleFactor = ((Double) e2.properties.get(4)).floatValue();
            if (unitScaleFactor != 100.0f) {
                logger.log(Level.WARNING, "FBX model isn't using meters for world units. Scale could be incorrect.");
            }
        } else if (propName.equals("TimeMode")) {
            timeMode = (Integer) e2.properties.get(4);
        } else if (propName.equals("CustomFrameRate")) {
            float framerate = ((Double) e2.properties.get(4)).floatValue();
            if (framerate != -1) {
                customFrameRate = framerate;
            }
        } else if (propName.equals("UpAxis")) {
            Integer upAxis = (Integer) e2.properties.get(4);
            if (upAxis != 1) {
                logger.log(Level.WARNING, "FBX model isn't using Y as up axis. Orientation could be incorrect");
            }
        } else if (propName.equals("UpAxisSign")) {
            Integer upAxisSign = (Integer) e2.properties.get(4);
            if (upAxisSign != 1) {
                logger.log(Level.WARNING, "FBX model isn't using correct up axis sign. Orientation could be incorrect");
            }
        } else if (propName.equals("FrontAxis")) {
            Integer frontAxis = (Integer) e2.properties.get(4);
            if (frontAxis != 2) {
                logger.log(Level.WARNING, "FBX model isn't using Z as forward axis. Orientation could be incorrect");
            }
        } else if (propName.equals("FrontAxisSign")) {
            Integer frontAxisSign = (Integer) e2.properties.get(4);
            if (frontAxisSign != -1) {
                logger.log(Level.WARNING, "FBX model isn't using correct forward axis sign. Orientation could be incorrect");
            }
        }
    }
    Float fps = timeModeToFps.get(timeMode);
    if (fps != null) {
        if (fps == -1f) {
            // Using custom framerate
            frameRate = customFrameRate;
        } else {
            // Use FPS from time mode.
            frameRate = fps;
        }
    }
}
Also used : FbxElement(com.jme3.scene.plugins.fbx.file.FbxElement)

Example 30 with Mode

use of com.jme3.scene.Mesh.Mode in project jmonkeyengine by jMonkeyEngine.

the class VRApplication method initialize.

@Override
public void initialize() {
    logger.config("Initialize VR application...");
    initialize_internal();
    cam.setFrustumFar(fFar);
    cam.setFrustumNear(fNear);
    dummyCam = cam.clone();
    if (isInVR()) {
        logger.config("VR mode enabled.");
        if (VRhardware != null) {
            VRhardware.initVRCompositor(compositorAllowed());
        } else {
            logger.warning("No VR system found.");
        }
        //FIXME: WARNING !!
        viewmanager = new VRViewManagerOpenVR(null);
        viewmanager.setResolutionMultiplier(resMult);
        inputManager.addMapping(RESET_HMD, new KeyTrigger(KeyInput.KEY_F9));
        setLostFocusBehavior(LostFocusBehavior.Disabled);
    } else {
        logger.config("VR mode disabled.");
        viewPort.attachScene(rootNode);
        guiViewPort.attachScene(guiNode);
    }
    if (viewmanager != null) {
        viewmanager.initialize();
    }
    simpleInitApp();
    // any filters created, move them now
    if (viewmanager != null) {
        viewmanager.moveScreenProcessingToEyes();
        // print out camera information
        if (isInVR()) {
            logger.info("VR Initialization Information");
            if (viewmanager.getLeftCamera() != null) {
                logger.info("camLeft: " + viewmanager.getLeftCamera().toString());
            }
            if (viewmanager.getRightCamera() != null) {
                logger.info("camRight: " + viewmanager.getRightCamera().toString());
            }
        }
    }
}
Also used : VRViewManagerOpenVR(com.jme3.util.VRViewManagerOpenVR) KeyTrigger(com.jme3.input.controls.KeyTrigger)

Aggregations

Vector3f (com.jme3.math.Vector3f)6 Texture2D (com.jme3.texture.Texture2D)6 Bone (com.jme3.animation.Bone)5 Quaternion (com.jme3.math.Quaternion)4 AppSettings (com.jme3.system.AppSettings)3 AnimControl (com.jme3.animation.AnimControl)2 InputCapsule (com.jme3.export.InputCapsule)2 OutputCapsule (com.jme3.export.OutputCapsule)2 Material (com.jme3.material.Material)2 Spatial (com.jme3.scene.Spatial)2 IndexBuffer (com.jme3.scene.mesh.IndexBuffer)2 Texture (com.jme3.texture.Texture)2 TempVars (com.jme3.util.TempVars)2 GraphicsDevice (java.awt.GraphicsDevice)2 BufferedReader (java.io.BufferedReader)2 File (java.io.File)2 FileReader (java.io.FileReader)2 IOException (java.io.IOException)2 Buffer (java.nio.Buffer)2 FloatBuffer (java.nio.FloatBuffer)2