import javax.media.opengl.*; import processing.opengl.*; import jp.nyatla.nyar4psg.*; import processing.video.*; import jp.nyatla.kGLModel.contentprovider.*; Capture cam; MultiMarker ar; int id1,id2,id3; KGLModelData model_data; ContentProvider content_provider,content_provider1,content_provider2; void setup() { size(640,480,OPENGL); cam = new Capture(this,width,height); ar = new MultiMarker(this, width, height, "camera_para.dat", NyAR4PsgConfig.CONFIG_PSG); id1 = ar.addARMarker("cat.pat", 90); id2 = ar.addARMarker("danzemi.pat", 90); id3 = ar.addARMarker("pine.pat", 90); //MQOモデルの準備 //content_provider = new HttpContentProvider(this, "http://kougaku-navi.net/ninja/mqo/ninja.mqo"); content_provider = new LocalContentProvider(this,dataPath("pineko.mqo")); //content_provider1 = new LocalContentProvider(this,dataPath("eye.bmp")); // content_provider2 = new LocalContentProvider(this,dataPath("体.bmp")); PGraphicsOpenGL pgl = (PGraphicsOpenGL) g; GL gl = pgl.beginGL(); model_data = KGLModelData.createGLModelPs( this, gl, null, this.content_provider,0.1, KGLExtensionCheck.IsExtensionSupported( gl, "GL_ARB_vertex_buffer_object"), true ); pgl.endGL(); } void draw() { if(cam.available()==false) return; cam.read(); background(0); ar.drawBackground(cam); ar.detect(cam); //猫 if ( ar.isExistMarker(id1) ){ ar.beginTransform(id1); PGraphicsOpenGL pgl = (PGraphicsOpenGL) g; GL gl = pgl.beginGL(); //テクスチャとポリゴンの描画に関する設定 gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE); gl.glEnable(GL.GL_CULL_FACE); gl.glCullFace(GL.GL_FRONT); //光源の設定 mySetLight(gl, 0,-100,100); gl.glRotatef(90,1,180,0); gl.glRotatef(90,0,1,0); model_data.draw(); pgl.endGL(); ar.endTransform(); } //パインちゃん if ( ar.isExistMarker(id3) ){ ar.beginTransform(id3); PGraphicsOpenGL pgl = (PGraphicsOpenGL) g; GL gl = pgl.beginGL(); gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE); gl.glEnable(GL.GL_CULL_FACE); gl.glCullFace(GL.GL_FRONT); mySetLight(gl, 0,-100,100); gl.glRotatef(0,1,180,0); gl.glRotatef(90,0,1,0); model_data.draw(); pgl.endGL(); ar.endTransform(); } //danzemi if ( ar.isExistMarker(id2) ){ ar.beginTransform(id2); PGraphicsOpenGL pgl = (PGraphicsOpenGL) g; GL gl = pgl.beginGL(); gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE); gl.glEnable(GL.GL_CULL_FACE); gl.glCullFace(GL.GL_FRONT); mySetLight(gl, 0,-100,100); gl.glRotatef(90,1,180,0); gl.glRotatef(90,0,1,0); model_data.draw(); pgl.endGL(); ar.endTransform(); } } //光源の設定を行う関数 void mySetLight(GL gl, float x, float y, float z){ float[] light_diffuse = { 1.7, 1.5, 1.5, 1.5 }; float[] light_specular = { 1.5, 1.2, 1.2, 0.0 }; float[] light_ambient = { 1.2, 1.0, 1.0, 1.0 }; float[] light_position = { x, y, z, 0.0 }; //光源のパラメータの設定 gl.glLightfv( gl.GL_LIGHT0, gl.GL_DIFFUSE, light_diffuse, 0); gl.glLightfv( gl.GL_LIGHT0, gl.GL_SPECULAR, light_specular, 0); gl.glLightfv( gl.GL_LIGHT0, gl.GL_AMBIENT, light_ambient, 0); gl.glLightfv( gl.GL_LIGHT0, gl.GL_POSITION, light_position, 0); gl.glShadeModel( gl.GL_SMOOTH ); gl.glEnable( gl.GL_LIGHT0 ); gl.glEnable( gl.GL_LIGHTING ); }