Mobile 3D Graphics API for J2ME

Estou começando a pesquisar esta nova API para J2ME, só que a única referëncia que encontrei é toda em ingles, to lutando aki, mas meu ingles é muito fraco, se alguém já tem alguma experiencia nessa API ou queira desbravar esta API junto comigo, estamos aí

http://developers.sun.com/techtopics/mobility/apis/articles/3dgraphics/

pessoal, eu não to conseguindo achar o .jar que contém a API eu só consigo achar a especificação das classes, mas não o .jar

Porquê vc quer um .jar ?

Se vc for usar o WTK, não tem que se preocupar com isto pois a própria distribuição já vem prontinha para usar, igual ao que vc viu no link que passou.

não te entendi, mesmo usando o WTK você tem que usar aquele conjunto de classes javax.microedition.m3g

Tem certeza que está com o WTK 2.2 ?

É nela que está os exemplos do site, certo ?!

Normalmente não é necessário mexer em nada.

Basta codar !

ah, eu uso a versão 2.1 do WTK, pra Linux ainda não tem o 2.2 :frowning: então é isso

Tem sim, o beta.

Achei que vc estava usando ele, afinal, aquele artigo que vc postou faz uso dele.

eu sei que tem, não tem a versão pra Linux ainda , talvez seja por causa daquele acordo que a Sun e a Microsoft estão fazendo tsc, tsc

Quem precisa de Linux quando se tem Windows ? Hahahaha… :mrgreen:

Viu, pelo menos nisto, o Windows é bom.

Vc tem antes sua ferramenta nele e depois no Linux.

olha… não porque todo mundo está nessa de oba-oba do Linux, mas eu uso o Linux a algum tempinho e acho melhor que o Windows, mas deve ter centenas de posts sobre isso…

Não sou a favor do Windows não…

Apenas te mostrei que vc padece por usar uma plataforma diferente do que a que a SUN esta priorizando referente ao WTK. Só isto ! :lol:

Pessoal, uma coisa tem que ser dita:

O linux esta ganhando terreno, porém a MS ainda continua na frente con suas Versões piratas. :?:

Enquanto não conseguirmos deixar o linux tao facil e marketzado qto o Windows não conseguiremos derrubar os licros da Poderosa(MS). :smiley:

Na duvida de qual usar , particione a HD e use os Dois! :wink:

Na verdade esse tópico não seria pra discutir Linux x Microsoft, gostaria que alguém me reposndesse se já fez algo implementando a Mobile 3D API

nao cheguei a usar a Mobile 3D API, mas andei dando uma olhada nos javadocs e ela parece bastante com o Java 3D, mas um pouco mais simplificado e com menos recursos.

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.CommandListener;

import java.util.Timer;
import java.util.TimerTask;

import javax.microedition.m3g.*;

public class Ex3D extends MIDlet implements CommandListener {
    private Display myDisplay = null;
    private JesterCanvas myCanvas = null;

    private Timer myRefreshTimer = new Timer();
    private TimerTask myRefreshTask = null;

    private Command exitCommand = new Command("Exit", Command.ITEM, 1);

    private World myWorld = null;

    /**
     * JesterTestlet - default constructor.
     */
    public Ex3D() {
        // Set up the user interface.
        myDisplay = Display.getDisplay(this);
        myCanvas = new JesterCanvas(this);
        myCanvas.setCommandListener(this);
        myCanvas.addCommand(exitCommand);
    }

    /**
     * startApp()
     */
    public void startApp()
        throws MIDletStateChangeException {

        myDisplay.setCurrent(myCanvas);

        try {
            // Load a file.
            Object3D[] roots = 
                Loader.load("/pogoroo.m3g");

            // Assume the world is the first root node loaded.
            myWorld = (World)roots[0];

            // Force a repaint so that we get the update loop started.
            myCanvas.repaint();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * pauseApp()
     */
    public void pauseApp() {
        // Release resources.
        myWorld = null;
    }

    /**
     * destroyApp()
     */
    public void destroyApp(boolean unconditional)
        throws MIDletStateChangeException {

        myRefreshTimer.cancel();
        myRefreshTimer = null;

        // Release resources.
        myWorld = null;
    }

    /**
     * MIDlet paint method.
     */
    public void paint(Graphics g) {
        // We are not fully initialised yet; just return.
        if(myCanvas == null || myWorld == null)
            return;

        // Delete any pending refresh tasks.
        if(myRefreshTask != null) {
            myRefreshTask.cancel();
            myRefreshTask = null;
        }

        // Get the current time.
        long currentTime = System.currentTimeMillis();
        // Update the world to the current time.
        int validity = myWorld.animate((int)currentTime);

        // Render to our Graphics.
        Graphics3D myGraphics3D = Graphics3D.getInstance();
        myGraphics3D.bindTarget(g);
        myGraphics3D.render(myWorld);
        myGraphics3D.releaseTarget();

        // Subtract time taken to do the update.
        validity -= System.currentTimeMillis() - currentTime;

        if(validity < 1) {
            // The validity is too small; allow a minimum of 1ms.
            validity = 1;
        }

        // If the validity is not infinite schedule a refresh task.
        if(validity < 0x7fffffff) {
            // Create a new refresh task.
            myRefreshTask = new RefreshTask();

            // Schedule an update.
            myRefreshTimer.schedule(myRefreshTask, validity);
        }
    }

    /**
     * Handle commands.
     */
    public void commandAction(Command cmd, Displayable disp) {
        if (cmd == exitCommand) {
            try {
                destroyApp(false);
                notifyDestroyed();
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * Inner class for refreshing the view.
     */
    private class RefreshTask extends TimerTask {
        public void run() {
            // Get the canvas to repaint itself.
            myCanvas.repaint();
        }
    }

    /**
     * Inner class for handling the canvas.
     */
    class JesterCanvas extends Canvas {
        Ex3D myTestlet;

        /**
         * Construct a new canvas.
         */
        JesterCanvas(Ex3D Testlet) { myTestlet = Testlet; }

        /**
         * Initialize self.
         */
        void init() { }

        /**
         * Clean up and destroy.
         */
        void destroy() { }

        /**
         * Ask myTestlet to paint itself.
         */
        protected void paint(Graphics g) { myTestlet.paint(g); }
    }
}

No Windows funciona blz, que raiva

Eu tentei pegar o .jar que tem aquelas classes de 3D e colocar no lib do WTK como no lib do projeto, ele até compila blz, mas dá o seguinte erro

java.lang.NoClassDefFoundError: javax/microedition/m3g/Loader: Cannot create class in system package at Ex3D.startApp(+13) at javax.microedition.midlet.MIDletProxy.startApp(+7) at com.sun.midp.midlet.Scheduler.schedule(+266) at com.sun.midp.main.Main.runLocalClass(+28) at com.sun.midp.main.Main.main(+116) Execution completed. alguém poderia me ajudar