MQO file viewer

ForumにMQOの表示方法の質問があったので、スケッチ書きました。MQOファイルをHiroマーカの上に表示します。

Source code

MqoView.java


import javax.media.opengl.*;

import jp.nyatla.kGLModel.KGLException;
import jp.nyatla.kGLModel.KGLExtensionCheck;
import jp.nyatla.kGLModel.KGLModelData;
import jp.nyatla.kGLModel.contentprovider.LocalContentProvider;
import jp.nyatla.nyartoolkit.core.NyARException;
import jp.nyatla.nyartoolkit.jmf.utils.*;
import jp.nyatla.nyartoolkit.jogl.sketch.GlSketch;
import jp.nyatla.nyartoolkit.jogl.utils.*;
import jp.nyatla.nyartoolkit.markersystem.NyARMarkerSystemConfig;
/**
 * This program shows a Mqo model.
 */
public class MqoView extends GlSketch
{
  private NyARJmfCamera camera;
  private NyARGlMarkerSystem nyar;
  private NyARGlRender render;
  private KGLModelData model_data; // kei add
  public void setup(GL gl)throws NyARException
  {
    this.size(640,480);
    NyARMarkerSystemConfig config = new NyARMarkerSystemConfig(640,480);
    JmfCaptureDeviceList devlist = new JmfCaptureDeviceList();
    JmfCaptureDevice d = devlist.getDevice(0);
    d.setCaptureFormat(config.getScreenSize(),30.0f);
    this.camera=new NyARJmfCamera(d);//create sensor system
    this.nyar=new NyARGlMarkerSystem(config);   //create MarkerSystem
    this.render=new NyARGlRender(this.nyar);

    this.id=this.nyar.addARMarker("data/patt.hiro",16,25,80);
    try {
      LocalContentProvider content_provider=new LocalContentProvider("data/miku_xx08/miku.mqo");
      model_data = KGLModelData.createGLModel(gl,null,content_provider,0.015f, KGLExtensionCheck.IsExtensionSupported(gl,"GL_ARB_vertex_buffer_object"));
    } catch (KGLException e) {
      e.printStackTrace();
      throw new NyARException(e);
    }
    gl.glEnable(GL.GL_DEPTH_TEST);
    this.camera.start();
  }
  private int id;

  public void draw(GL gl)
  {
    synchronized(this.camera){
      try {
        this.render.drawBackground(gl, this.camera.getSourceImage());
        this.render.loadARProjectionMatrix(gl);
        this.nyar.update(this.camera);
        if(this.nyar.isExistMarker(this.id)){
          // Viewing transformation.
          gl.glLoadIdentity();
          this.render.loadMarkerMatrix(gl,this.id);
          gl.glTranslatef(0.0f,0.0f,0.0f) ;//position
          gl.glRotatef(90.0f,1.0f, 0.0f, 0.0f); //OpenGL座標系→ARToolkit座標系
          gl.glEnable(GL.GL_CULL_FACE);
          gl.glCullFace(GL.GL_FRONT);
          model_data.enables(10.0f);
          model_data.draw() ;
          model_data.disables() ;
        }
        Thread.sleep(1);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
  public static void main(String[] args)
  {
    try {
      new MqoView();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return;
  }
}

解説

MQOの表示には、keiさん作のKGLを若干改変したものを使用しています。
スケッチの重要な部分は2箇所です。

setupでは、MQOファイルを読み込みます。

  LocalContentProvider content_provider=new LocalContentProvider("data/miku_xx08/miku.mqo");
  model_data = KGLModelData.createGLModel(gl,null,content_provider,0.015f, KGLExtensionCheck.IsExtensionSupported(gl,"GL_ARB_vertex_buffer_object"));

drawでは、読み込んだモデルを表示しています。

        if(this.nyar.isExistMarker(this.id)){
          // Viewing transformation.
          gl.glLoadIdentity();
          this.render.loadMarkerMatrix(gl,this.id);
          gl.glTranslatef(0.0f,0.0f,0.0f) ;//position
          gl.glRotatef(90.0f,1.0f, 0.0f, 0.0f); //OpenGL座標系→ARToolkit座標系
          gl.glEnable(GL.GL_CULL_FACE);
          gl.glCullFace(GL.GL_FRONT);
          model_data.enables(10.0f);
          model_data.draw() ;
          model_data.disables() ;
        }

Setup

projectファイルは MqoModel-20120326.zip からダウンロードできます。実効には、JMF、JOGL、NyARToolkit version 4.xが必要です。あらかじめセットアップして置いてください。

Hiroマーカを撮影すると、プリセットされているミクさんのモデルが表示されます。

3D modelについて

プリセットされている3Dmodelは、三次元CG@七葉 nh0072.zipを編集して使用しています。

English

This sketch shows MQO-model above  “Hiro” marker.

Source code

Main program is MqoView.java

Description of source code

MQO library is KGL by kei-san.
The changed parts are below.

  • setup –  MQO loader codes.
  • draw – MQO drawing codes.

Setup

The eclipse project is MqoModel-20120326.zip . The project requires external libraries, JMF ,JOGL, NyARToolkit version 4.x.  Please set up these libraries.