Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> J2ME 3D(aka JSR 184) 
:(
    Опции темы
Gobbs
Дата 18.7.2007, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 4.9.2006

Репутация: нет
Всего: нет



Начал изучать JSR 184. Доки только на английском и то учебника не нашёл, только отрывки кода с пояснением, справочники. Вощем убицца можно  smile 

Кто и как изучал эту область программирования ? Есть ли вообще учебники по JSR184 ? 

Научился рендерить сцену, зугруженную в m3g файл, на дисплей. Но никак не могу разобраться, как вращать камеру в зависимости от нажатия клавиши(джойстика). Помогите пионеру  smile Примеры WTK я смотрел, но нифига понять не могу чё за параметры выставлются в спецификации методов и зачем они нужны  smile 
Вот код основного класса
Код

package newm3g;

import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.m3g.*;


public class mainer extends MIDlet {
  static mainer M;

  public mainer() {
    M = this;
  }

  public void startApp() {
  PlayerCanvas canvas=new PlayerCanvas(true);
  Display.getDisplay(this).setCurrent(canvas);
  try{
    canvas.run();
  }catch(Exception e){}
  notifyDestroyed();

  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }

  public static void quitApp() {
    M.destroyApp(true);
    M.notifyDestroyed();
    M = null;
  }

}



Класс PlayerCanvas
Код

package newm3g;

import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.m3g.*;


public class PlayerCanvas extends GameCanvas {
  public PlayerCanvas(boolean suppress) {
    super(suppress);   
  }

  public void run() throws Exception
  {
    Graphics3D g3D=Graphics3D.getInstance();
    World w=(World)Loader.load("/skaterboy.m3g")[0];

    long start,elapsed,time=0;

    while(getKeyStates()==0){
      start=System.currentTimeMillis();
      g3D.bindTarget(getGraphics());

      try{
        w.animate((int)time);
        g3D.render(w);

        }finally{g3D.releaseTarget();}
       
        flushGraphics();

       elapsed=System.currentTimeMillis()-start;
       time+=(elapsed<100)?100:(int)elapsed;
      if(elapsed<100)Thread.sleep(100-elapsed);
    }

  }


}



Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  skaterboy.m3g 41,86 Kb
PM MAIL   Вверх
DimLord
Дата 19.7.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 6.10.2005
Где: Пенза

Репутация: 3
Всего: 3



Вот подправил твои классы, теперь можно вращать камеру клавишами влево и вправо, для выхода из программы необходимо нажать FIRE.

Код главного класса:

Код

package newm3g;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Display;

public class Mainer extends MIDlet
{
    static Mainer m_mainer;

    public Mainer()
    {
        m_mainer = this;
    }

    public void startApp()
    {
        PlayerCanvas canvas = new PlayerCanvas(true);
        Display.getDisplay(this).setCurrent(canvas);

        try
        {
            canvas.run();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        notifyDestroyed();
    }
    public void pauseApp()
    {
    }

    public void destroyApp(boolean unconditional)
    {
    }

    public static void quitApp()
    {
        m_mainer.destroyApp(true);
        m_mainer.notifyDestroyed();
        m_mainer = null;
    }
}


Класс PlayerCanvas:

Код

package newm3g;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.m3g.*;

public class PlayerCanvas extends GameCanvas
{
    static final int POGOROO_MOVE_GROUP_TRANSFORM_ID    = 554921620;
    static final int CAMERA_GROUP_TRANSFORM_ID            = 769302310;

    private float    m_fDirRoo    = 0.0f;
    private float    m_fDirCam    = 0.0f;

    public PlayerCanvas(boolean bSuppress)
    {
        super(bSuppress);
    }

    public void run() throws Exception
    {
        World    wMyWorld;
        Group    grTRoo;
        Group    grTCams;

        Graphics3D    g3D    = Graphics3D.getInstance();

        /** load the world from the M3D file */
        wMyWorld        = (World)Loader.load("/skaterboy.m3g")[0];
        grTRoo            = (Group) wMyWorld.find(POGOROO_MOVE_GROUP_TRANSFORM_ID);
        grTCams            = (Group) wMyWorld.find(CAMERA_GROUP_TRANSFORM_ID);

        long lStart, lElapsed, lTime = 0;

        while(true)
        {
            lStart = System.currentTimeMillis();
            g3D.bindTarget(getGraphics());

            try
            {
                wMyWorld.animate((int)lTime);
                g3D.render(wMyWorld);
            }
            finally
            {
                g3D.releaseTarget();
            }

            flushGraphics();
            lElapsed    =    System.currentTimeMillis() - lStart;
            lTime        +=    (lElapsed < 100) ? 100 : (int)lElapsed;

            if(lElapsed < 100) Thread.sleep(100 - lElapsed);

            switch(getKeyStates())
            {
                /** поворот камеры на лево... */
                case GameCanvas.LEFT_PRESSED:

                    m_fDirRoo += 5f;
                    m_fDirCam -= 5f;
                    grTRoo.setOrientation(m_fDirRoo, 0, 0, 1);
                    grTCams.setOrientation(m_fDirCam, 0, 0, 1);

                    break;

                /** поворот камеры на право... */
                case GameCanvas.RIGHT_PRESSED:

                    m_fDirRoo -= 5f;
                    m_fDirCam += 5f;
                    grTRoo.setOrientation(m_fDirRoo, 0, 0, 1);
                    grTCams.setOrientation(m_fDirCam, 0, 0, 1);

                    break;

                case GameCanvas.FIRE_PRESSED:
                    /** выходим из цикла и из программы соответственно... */
                    return;

                default:
                    if (m_fDirCam > 4.9f)
                    {
                        m_fDirCam -= 5.0f;
                    }
                    else
                    {
                        if (m_fDirCam < -4.9f)
                        {
                            m_fDirCam += 5.0f;
                        }
                        else
                        {
                            m_fDirCam = 0.0f;
                        }
                    }

                    grTCams.setOrientation(m_fDirCam, 0, 0, 1);
            }
        }
    }
}


На всякий случай прикрепил проект.

P.S. имена классов пишутся с большой буквы.

Это сообщение отредактировал(а) DimLord - 19.7.2007, 09:36

Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  mainer.zip 94,84 Kb
PM MAIL   Вверх
Gobbs
Дата 19.7.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 4.9.2006

Репутация: нет
Всего: нет



DimLord, спасибо.  smile 

Я так понимаю ID объектов задаются моделером в процессе проектирования, их можно как-то узнать? 
Код

static final int POGOROO_MOVE_GROUP_TRANSFORM_ID    = 554921620;
static final int CAMERA_GROUP_TRANSFORM_ID            = 769302310;


И всё-таки хотелось бы получить ответ на вопрос 
Цитата

Кто и как изучал эту область программирования ? Есть ли вообще учебники по JSR184 ?

P.S. сразу скажу, что J2SE изучил, работаю на нём около года  smile 

Это сообщение отредактировал(а) Gobbs - 19.7.2007, 11:56
PM MAIL   Вверх
W0LF
Дата 19.7.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Цитата

Я так понимаю ID объектов задаются моделером в процессе проектирования, их можно как-то узнать? 

Да, можно. Когда в 3Дстудии создается объект, к нему создается html со всеми айдишниками ко всем объектам(костям скелета например)
Почитай здесь - 
Compliments of Redikod
неплохо все описано

Это сообщение отредактировал(а) W0LF - 19.7.2007, 13:05


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Gobbs
Дата 19.7.2007, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 4.9.2006

Репутация: нет
Всего: нет



Цитата(W0LF @ 19.7.2007,  13:05)
Почитай здесь - 
Compliments of Redikod
неплохо все описано

Прочитал, узнал много нового   smile 
Можете ещё интересных ссылок подкинуть ?

Нашёл подобное описание JSR184 на сайте Nokia, но написано как справочник и на начальных этапах освоения нечитаемо.

Хотел спросить, если мы отобразили сцену из m3g файла, как на дисплей добавить текст поверх этой сцены и можно ли его масштабировать/менять цвет ? В Graphics3D подобного метода не обнаружил.
PM MAIL   Вверх
W0LF
Дата 20.7.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Цитата(Gobbs @  19.7.2007,  19:42 Найти цитируемый пост)

Хотел спросить, если мы отобразили сцену из m3g файла, как на дисплей добавить текст поверх этой сцены и можно ли его масштабировать/менять цвет ? В Graphics3D подобного метода не обнаружил. 

Чет мне кажется, что плохо ты Редикод прочитал.. там на самом деле много уроков.
Код

g3d.bindTarget(g, true, RENDERING_HINTS);

Это мы привязались к нашему Graphics, на котром все и рисуем
потом идут манипуляции с g3d
g3d.render например и т.п.
Код

g3d.releaseTarget();

освобождаем Graphics.
и теперь можно сделать 
Код

g.drawString(...)



--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Gobbs
Дата 27.7.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 4.9.2006

Репутация: нет
Всего: нет



Есть 2 вопроса :
1) Как узнать ID объектов в m3g-файле. Пробовал через M3GViewer4.0E, но при поиске по этим значениям камеры 
Group CAM=(Group)Test.find(215);
происходит ошибка выполнения 
java.lang.ClassCastException
Слышал про java4ever M3GToolKit 0.5.0, но найти в сети так и не смог.

2) 2-ой вопрос. Если у нас есть m3g-файл, причём он анимированный, и весь цикл анимации занимает 10 секунд. Так вот, как проигрывать только определённый промежуток этой анимации. Например, загрузился m3g файл, анимация началась проигрываться с 3-ей секунды, дошла до 7-ми секунд и опять возвращается к 3-ей секунде и так по циклу.
PM MAIL   Вверх
W0LF
Дата 27.7.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Модератор: соблюдайте пожалуйста правила форума!
Цитата

10. Запрещается создание сообщения с несколькими вопросами. На каждый вопрос должна создаваться отдельная тема. В случае возникновения таких тем администрация форума оставляет за собой право изменить текст сообщения, удалить его или закрыть тему.


Цитата

Group CAM=(Group)Test.find(215);
происходит ошибка выполнения 
java.lang.ClassCastException

тут уже много способов..
первый я уже писал - 
Цитата(W0LF @  19.7.2007,  13:05 Найти цитируемый пост)
Да, можно. Когда в 3Дстудии создается объект, к нему создается html со всеми айдишниками ко всем объектам(костям скелета например)

и первый считается самым правильным
а насчет именно камеры.. вроде так - 
Код

private void loadCamera() {
        if (world == null)
            return;
        cam = world.getActiveCamera();
    }

Второй вопрос - 
извини, пока времени мало, позже отвечу, если успею сегодня

Добавлено через 4 минуты и 14 секунд
где 
Код

Сamera cam;



--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Gobbs
Дата 27.7.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 4.9.2006

Репутация: нет
Всего: нет



Цитата(W0LF @  19.7.2007,  13:05 Найти цитируемый пост)
Да, можно. Когда в 3Дстудии создается объект, к нему создается html со всеми айдишниками ко всем объектам(костям скелета например)

Я пытался поставить нес-ко камер в сцену и каждой задать ID, но почему-то ни одна не находится вышеописанным способом, а происходит 
Цитата

Group CAM=(Group)Test.find(215);
происходит ошибка выполнения 
java.lang.ClassCastException


Код

private void loadCamera() {
        if (world == null)
            return;
        cam = world.getActiveCamera();
    }

с этим-то проблем нету, айди колбасят  smile

Цитата

Второй вопрос - 
извини, пока времени мало, позже отвечу, если успею сегодня

спасибо  smile 

Это сообщение отредактировал(а) Gobbs - 27.7.2007, 14:57
PM MAIL   Вверх
Gobbs
Дата 28.7.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 4.9.2006

Репутация: нет
Всего: нет



Цитата

Если у нас есть m3g-файл, причём он анимированный, и весь цикл анимации занимает 10 секунд. Так вот, как проигрывать только определённый промежуток этой анимации. Например, загрузился m3g файл, анимация началась проигрываться с 3-ей секунды, дошла до 7-ми секунд и опять возвращается к 3-ей секунде и так по циклу.

Выяснил, что это связано с работой AnimationController, у к-го туча параметров.
ts = the computed sequence time
tw = the given world time
tsref = the reference sequence time
twref = the reference world time
s = the speed; sequence time per world time
Кароче пока  smile 
PM MAIL   Вверх
Gobbs
Дата 29.7.2007, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 4.9.2006

Репутация: нет
Всего: нет



Сделал так, но анимация повторется всего один раз и всё. В чём проблема ?  smile 
Код

AnimationController animController = (AnimationController)Test.find(89);
int animPosition=0;
float animSpeed=1.0f;
int animLength=1000;
long startTime=System.currentTimeMillis();
animController.setActiveInterval(3000,7000); //---установка активного интервала для текущего AnimationController'a
while(true)
{
if(animController.getActiveIntervalEnd()>=3000+time()){
            animController.setPosition(3000,3000+(int)time());
            //animController.setSpeed(animSpeed,3000+(int)time());
        }else startTime=System.currentTimeMillis();
g3D.bindTarget(getGraphics());  //---графический контент
        try{
          Test.animate((int)time); //--World
          g3D.render(Test);          
        } catch(Exception e){e.printStackTrace();}
        finally{g3D.releaseTarget();}

}
private float time()   //---отсчёт времени от начала анимации
   {
      return (float)(System.currentTimeMillis() - startTime);
   }

PM MAIL   Вверх
W0LF
Дата 31.7.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



А ты не пробовал продебажить?


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Gobbs
Дата 31.7.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 4.9.2006

Репутация: нет
Всего: нет



Цитата(W0LF @ 31.7.2007,  10:28)
А ты не пробовал продебажить?

Пробовал. Или это тонкий намёк на логическую ошибку в коде?
PM MAIL   Вверх
Nokia3720c
Дата 10.8.2012, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.8.2012

Репутация: нет
Всего: нет



Дайте html этого кенгуру. Хочу глянуть ID объектов. Зарание спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1926 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.