int main (int argc, char **argv) { //Initialize GLUT initGlut( argc, argv ); Kernel kernel; kernel.enableVerticalSync( false ); printf( "Kernel loaded\n" ); //Setup camera cam3D.setCenter( center ); cam3D.translate( 0,0,200 ); cam3D.orbitV( Util::DegToRad( -20 ), true ); cam3D.orbitH( Util::DegToRad( +45 ), true ); cam3D.setNearClipPlane( 10.0f ); cam3D.setFarClipPlane( 1000.0f ); //VertColorMaterial mat; //StandardMaterial mat; PhongMaterial mat; mat.setSpecularity( 0.5 ); //StandardMaterial mat; //mat.setCullBack( false ); //mat.setUseLighting( false ); /* polyActor = new SPolyActor; polyActor->setMaterial( &mat ); polyActor->setMesh( polyMesh ); triActor = new TriMeshActor; triActor->setMaterial( &mat ); triActor->setMesh( triMesh ); */ lblFps.setLocation( Vector2( 0.0f, (Float)resY )); lblFps.setColor( Vector3( 1.0f, 1.0f, 1.0f )); //Find model center findCenter(); cam3D.setCenter( center ); //Run application atexit( cleanup ); glutMainLoop(); cleanup(); return EXIT_SUCCESS; }
void drag3D(int x, int y) { if (down3D) { //printf ("Eye1:"); printVector (cam3D.getEye()); //printf ("Look:"); printVector (cam3D.getLook()); //printf ("Side:"); printVector (cam3D.getSide()); //printf ("\n"); //printf ("------------------------\n"); //printMatrix (cam3D.getMatrix()); Vector2 diff = Vector2((Float)x,(Float)y) - lastMouse3D; float eyeDist = (cam3D.getEye() - center).norm(); Float angleH = diff.x * (2*PI) / 400; Float angleV = diff.y * (2*PI) / 400; Float panH = -diff.x * ( eyeDist * 0.002f ); Float panV = diff.y * ( eyeDist * 0.002f ); Float zoom = -diff.y * ( eyeDist * 0.01f ); lastMouse3D.set( (Float)x, (Float)y ); switch (cameraMode) { case CAMERA_MODE_ZOOM: cam3D.zoom (zoom); break; case CAMERA_MODE_ORBIT: cam3D.setCenter (center); cam3D.orbitH (angleH, true); cam3D.orbitV (angleV, true); break; case CAMERA_MODE_PAN: cam3D.panH (panH); cam3D.panV (panV); break; } postRedisplay (); } }
int main (int argc, char **argv) { //Initialize GLUT initGlut( argc, argv ); Kernel kernel; kernel.enableVerticalSync( false ); renderer = kernel.getRenderer(); printf( "Kernel loaded\n" ); StandardMaterial matRedLogo; matRedLogo.setSpecularity( 0.5 ); matRedLogo.setDiffuseColor( Vector3(1,0,0) ); matRedLogo.setAmbientColor( matRedLogo.getDiffuseColor() * .8f ); StandardMaterial matWhiteLogo; matWhiteLogo.setSpecularity( 0.5 ); matWhiteLogo.setAmbientColor( matWhiteLogo.getDiffuseColor() * .8f ); StandardMaterial matWhite; matWhite.setSpecularity( 0.5 ); StandardMaterial matBlue; matBlue.setSpecularity( 0.5 ); matBlue.setDiffuseColor( Vector3(0,0.5,1) ); StandardMaterial matGreen; matGreen.setSpecularity( 0.5 ); matGreen.setDiffuseColor( Vector3(0,0.6,0) ); StandardMaterial matYellow; matYellow.setSpecularity( 0.5 ); matYellow.setDiffuseColor( Vector3(1,1,0.7) ); StandardMaterial matBlack; matBlack.setSpecularity( 0.5 ); matBlack.setDiffuseColor( Vector3(0.2,0.2,0.2) ); MultiMaterial mm; mm.setNumSubMaterials( 5 ); mm.setSubMaterial( 0, &matBlue ); mm.setSubMaterial( 1, &matYellow ); mm.setSubMaterial( 2, &matWhite ); mm.setSubMaterial( 3, &matBlack ); mm.setSubMaterial( 4, &matBlue ); MultiMaterial mm2; mm2.setNumSubMaterials( 5 ); mm2.setSubMaterial( 0, &matGreen ); mm2.setSubMaterial( 1, &matYellow ); mm2.setSubMaterial( 2, &matWhite ); mm2.setSubMaterial( 3, &matBlack ); mm2.setSubMaterial( 4, &matGreen ); MultiMaterial mmLogo; mmLogo.setNumSubMaterials( 2 ); mmLogo.setSubMaterial( 0, &matWhiteLogo ); mmLogo.setSubMaterial( 1, &matRedLogo ); //Setup Logo scene sceneLogo = new Scene; loadLogo( "logo.pak" ); actLogo = new TriMeshActor; actLogo->setMesh( mshLogo ); actLogo->translate( 200, 0, 0 ); actLogo->setMaterial( &mmLogo ); sceneLogo->addChild( actLogo ); camLogo = new Camera3D; camLogo->translate( 0,0,-600 ); camLogo->setNearClipPlane( 1.0f ); camLogo->setFarClipPlane( 3000.0f ); lightLogo = new SpotLight( Vector3(0,0,-500), Vector3(0,0,1), 60, 50 ); lightLogo->setCastShadows( true ); sceneLogo->addChild( lightLogo ); //Setup Bub scene loadPackage( "bub.pak" ); scene = new Scene; skinActor = new SkinMeshActor; skinActor->setMaterial( &mm ); skinActor->setMesh( character ); skinActor->translate( 60, 0, 0 ); scene->addChild( skinActor ); skinActor2 = new SkinMeshActor; skinActor2->setMaterial( &mm2 ); skinActor2->setMesh( character ); skinActor2->translate( -60, 0, 0 ); scene->addChild( skinActor2 ); TriMesh *cubeMesh = new CubeMesh; TriMeshActor *cube = new TriMeshActor; cube->setMaterial( &matWhiteLogo ); cube->setMesh( cubeMesh ); cube->scale( 300, 10, 300 ); cube->translate( 0, -70, 0 ); scene->addChild( cube ); StandardMaterial axesMat; axesMat.setUseLighting( false ); AxisActor *axes = new AxisActor; axes->scale( 100 ); axes->setMaterial( &axesMat ); //scene->addChild( axes ); cam3D.setCenter( center ); cam3D.translate( 0,0,-400 ); cam3D.orbitV( Util::DegToRad( 20 ), true ); cam3D.orbitH( Util::DegToRad( 30 ), true ); cam3D.setNearClipPlane( 1.0f ); cam3D.setFarClipPlane( 3000.0f ); light = new SpotLight( Vector3(-200,200,-200), Vector3(1,-1,1), 60, 59 ); light->setCastShadows( true ); //light->setDiffuseColor( Vector3( 1,.2,.2 ) ); scene->addChild( light ); Light* l = new SpotLight( Vector3(200,200,-200), Vector3(-1,-1,1), 60, 0 ); l->setCastShadows( true ); //l->setDiffuseColor( Vector3( .2,.2,1 ) ); scene->addChild( l ); //Start with Logo scene sceneRender = sceneLogo; lightRender = lightLogo; camRender = camLogo; //sceneRender = scene; //lightRender = light; //camRender = &cam3D; /////////////////////////////////////// //Test triangulation PolyMesh p; int numVerts = 6; ArrayList< PolyMesh::Vertex* > verts; for (int v=0; v<numVerts; ++v) verts.pushBack( p.addVertex() ); p.addFace( verts.buffer(), numVerts ); verts[0]->point.set( 0,0,0 ); verts[1]->point.set( 1,0,0 ); verts[2]->point.set( 1,1,0 ); verts[3]->point.set( 2,1,0 ); verts[4]->point.set( 2,2,0 ); verts[5]->point.set( 0,2,0 ); p.triangulate(); PolyMeshActor *pa = new PolyMeshActor; pa->setMesh( &p ); pa->scale( 100, 100, 100 ); //scene->addChild( pa ); ///////////////////////////////// lblFps.setLocation( Vector2( 0.0f, (Float)resY )); lblFps.setColor( Vector3( 1.0f, 1.0f, 1.0f )); //Find model center findCenter(); cam3D.setCenter( center ); //Run application atexit( cleanup ); glutMainLoop(); cleanup(); return EXIT_SUCCESS; }