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.