本文整理汇总了C++中osg::NodeUnrecPtr类的典型用法代码示例。如果您正苦于以下问题:C++ NodeUnrecPtr类的具体用法?C++ NodeUnrecPtr怎么用?C++ NodeUnrecPtr使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了NodeUnrecPtr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: initFloor
void initFloor(void)
{
OSG::GeometryUnrecPtr floor = OSG::makePlaneGeo(2000.f, 2000.f, 10, 10);
OSG::NodeUnrecPtr floorN = OSG::makeNodeFor(floor);
OSG::TransformUnrecPtr xform = OSG::Transform::create();
OSG::NodeUnrecPtr xformN = OSG::makeNodeFor(xform);
OSG::ImageUnrecPtr img = OSG::ImageFileHandler::the()->read("sand1Tile.png");
OSG::TextureObjChunkUnrecPtr tex = OSG::TextureObjChunk::create();
tex->setImage(img);
OSG::ChunkMaterial *chunkMat = dynamic_cast<OSG::ChunkMaterial *>(floor->getMaterial());
if(chunkMat != NULL)
{
chunkMat->addChunk(tex);
}
OSG::Quaternion quat;
quat.setValueAsAxisDeg(OSG::Vec3f(1.f, 0.f, 0.f), -90.f);
xform->editMatrix().setRotate(quat);
xformN->addChild(floorN);
g->rootN->addChild(xformN);
}
示例2: build
OSG::NodeTransitPtr OSGSofaShadowGraph::build(
Node::SPtr root,
bool ignoreLights )
{
_scene = NULL;
_chunkOverrideGroup = NULL;
_shadowStage = NULL;
VisualParams* vparams = VisualParams::defaultInstance();
OSG::NodeUnrecPtr shadowStageNode;
_chunkOverrideGroup = OSG::ChunkOverrideGroup::create();
_scene = OSG::makeNodeFor(_chunkOverrideGroup);
sofa::simulation::OSGVisualUpdateVisitor vm_visitor( vparams);
vm_visitor.setChunkOverrideGroupNode(_scene);
// get lights
if (!ignoreLights)
{
if (!_shadowStage)
_shadowStage = OSG::ShadowStage::create();
_shadowStage->setMapSize(1024);
_shadowStage->setShadowSmoothness(0.5f);
_shadowStage->setShadowMode(OSG::ShadowStage::NO_SHADOW);
_shadowStage->setAutoSearchForLights(true);
shadowStageNode = OSG::makeNodeFor(_shadowStage);
sofa::simulation::OSGLightVisitor light_visitor( vparams);
//light_visitor.setTurnOffLights(ignoreLights);
light_visitor.setOSG2Parent(_scene);
light_visitor.setOSG2ShadowStage(_shadowStage);
light_visitor.setAttachNode(_scene);
root->execute(&light_visitor);
if (light_visitor.getAttachNode())
{
vm_visitor.setOSG2Parent(light_visitor.getAttachNode());
root->execute(&vm_visitor);
}
}
else
{
vm_visitor.setOSG2Parent(_scene);
root->execute(&vm_visitor);
}
if (shadowStageNode && !ignoreLights)
{
shadowStageNode->addChild(_scene);
return OSG::NodeTransitPtr(shadowStageNode);
}
return OSG::NodeTransitPtr(_scene);
}
示例3: createScene
OSG::NodeTransitPtr createScene(OSG::Window *win)
{
OSG::NodeRecPtr rootN = OSG::makeNodeFor(OSG::Group::create());
// Create ground:
OSG::NodeUnrecPtr groundN = OSG::makePlane(25,25,1,1);
OSG::Matrix m;
OSG::Quaternion q;
q.setValueAsAxisDeg(OSG::Vec3f(1,0,0), -90);
m.setRotate(q);
OSG::TransformUnrecPtr groundTransC = OSG::Transform::create();
groundTransC->setMatrix(m);
OSG::NodeUnrecPtr groundTransN = OSG::makeNodeFor(groundTransC);
groundTransN->addChild(groundN);
rootN->addChild(groundTransN);
// Set ground material:
OSG::SimpleMaterialUnrecPtr mat = OSG::SimpleMaterial::create();
mat->setDiffuse(OSG::Color3f(0.8,0.8,0.8));
dynamic_cast<OSG::Geometry*>(groundN->getCore())->setMaterial(mat);
// // Create figure:
// OSG::NodeUnrecPtr figure1N =
// OSG::SceneFileHandler::the()->read("../Models/Figure.obj");
// G.figure1TransC = OSG::Transform::create();
// OSG::NodeUnrecPtr trans1N = OSG::makeNodeFor(G.figure1TransC);
// trans1N->addChild(figure1N);
// rootN->addChild(trans1N);
OSG::NodeUnrecPtr figureModelA =
OSG::SceneFileHandler::the()->read("../assets/Figure.obj");
BoardGame::Figure* figureA = new BoardGame::Figure();
figureA->setModel(figureModelA);
rootN->addChild(figureA->getRoot());
OSG::NodeUnrecPtr figureModelB =
OSG::SceneFileHandler::the()->read("../assets/Figure.obj");
BoardGame::Figure* figureB = new BoardGame::Figure();
figureB->setModel(figureModelB);
rootN->addChild(figureB->getRoot());
G.selectedNode = figureModelA;
return(OSG::NodeTransitPtr(rootN));
}
示例4: start_name
TEST_FIXTURE(FileFixture, TestNameRetention)
{
std::string start_name("node");
OSG::NodeUnrecPtr n = OSG::Node::create();
OSG::setName(n, start_name);
n->setCore(OSG::Group::create());
CHECK(!bf::exists(test_file));
OSG::SceneFileHandler::the()->write(n, test_file.native_file_string().c_str());
CHECK(bf::exists(test_file));
OSG::NodeUnrecPtr new_n =
OSG::SceneFileHandler::the()->read(test_file.native_file_string().c_str());
CHECK(new_n != NULL);
CHECK(OSG::getName(new_n) != NULL);
std::string cur_name = std::string(OSG::getName(new_n));
CHECK(cur_name == start_name);
}
示例5: loadCharacter
void loadCharacter(void)
{
OSG::NodeUnrecPtr modelN = OSG::SceneFileHandler::the()->read("western.male01.mesh", NULL);
ObjectCollector()(modelN);
SkinnedGeoStore::iterator sIt = g->skinGeos.begin();
SkinnedGeoStore::iterator sEnd = g->skinGeos.end ();
for(; sIt != sEnd; ++sIt)
{
(*sIt)->setRenderMode(g->renderMode);
}
g->xform = OSG::Transform::create();
OSG::NodeUnrecPtr xformN = OSG::makeNodeFor(g->xform);
xformN->addChild(modelN);
g->rootN->addChild(xformN);
}
示例6: main
// Initialize GLUT & OpenSG and set up the scene
int main(int argc, char **argv)
{
printf("Usage: testCGShader <filename.vp> <filename.fp>\n");
if( argc < 3 )
return 0;
// OSG init
OSG::osgInit(argc,argv);
// GLUT init
int winid = setupGLUT(&argc, argv);
// the connection between GLUT and OpenSG
OSG::GLUTWindowUnrecPtr gwin= OSG::GLUTWindow::create();
gwin->setGlutId(winid);
gwin->setSize( 800, 800 );
gwin->init();
// Create the shader material
OSG::ChunkMaterialUnrecPtr cmat = OSG::ChunkMaterial::create();
OSG::MaterialChunkUnrecPtr matc = OSG::MaterialChunk::create();
matc->setAmbient(OSG::Color4f(0.1, 0.1, 0.1, 1.0));
matc->setDiffuse(OSG::Color4f(0.3, 0.3, 0.3, 1.0));
matc->setSpecular(OSG::Color4f(0.8, 0.8, 0.8, 1.0));
matc->setShininess(100);
matc->setLit(true);
OSG::SHLChunkUnrecPtr shl = OSG::SHLChunk::create();
shl->readVertexProgram(argv[1]);
shl->readFragmentProgram(argv[2]);
cmat->addChunk(shl);
// create root node
_scene = OSG::Node::create();
// create torus
OSG::GeometryUnrecPtr geo = OSG::makeTorusGeo(.8, 1.8, 128, 128);
geo->setMaterial(cmat);
OSG::NodeUnrecPtr torus = OSG::Node::create();
torus->setCore(geo);
// add torus to scene
OSG::GroupUnrecPtr group = OSG::Group::create();
_scene->setCore(group);
_scene->addChild(torus);
// create the SimpleSceneManager helper
_mgr = OSG::SimpleSceneManager::create();
// tell the manager what to manage
_mgr->setWindow(gwin );
_mgr->setRoot(_scene);
/*
// create point headlight
_mgr->turnHeadlightOff();
NodePtr headlight = _mgr->getHighlight();
PointLightPtr light = PointLight::create();
beginEditCP(light);
light->setAmbient (.3, .3, .3, 1);
light->setDiffuse ( 1, 1, 1, 1);
light->setSpecular ( 1, 1, 1, 1);
light->setBeacon (_mgr->getCamera()->getBeacon());
endEditCP(light);
beginEditCP(_scene);
_scene->setCore(light);
endEditCP(_scene);
*/
// show the whole scene
_mgr->showAll();
// GLUT main loop
glutMainLoop();
return 0;
}
示例7: init
int init(int argc, char **argv)
{
OSG::osgInit(argc,argv);
// GLUT init
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
int winid = glutCreateWindow("OpenSG");
glutKeyboardFunc(key);
glutVisibilityFunc(vis);
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutIdleFunc(display);
// OSG
OSG::SceneFileHandler::the()->print();
// create the graph
// beacon for camera and light
OSG::NodeUnrecPtr b1n = OSG::Node::create();
OSG::GroupUnrecPtr b1 = OSG::Group::create();
b1n->setCore(b1);
// transformation
OSG::NodeUnrecPtr t1n = OSG::Node::create();
OSG::TransformUnrecPtr t1 = OSG::Transform::create();
t1n->setCore (t1 );
t1n->addChild(b1n);
cam_trans = t1;
// light
OSG::NodeUnrecPtr dlight = OSG::Node::create();
OSG::DirectionalLightUnrecPtr dl = OSG::DirectionalLight::create();
dlight->setCore(dl);
dl->setAmbient (0.0, 0.0, 0.0, 1.0);
dl->setDiffuse (0.8, 0.8, 0.8, 1.0);
dl->setDirection(0.0, 0.0, 1.0 );
dl->setBeacon (b1n );
// root
OSG::NodeUnrecPtr root = OSG::Node::create();
OSG::GroupUnrecPtr gr1 = OSG::Group::create();
root->setCore (gr1 );
root->addChild(t1n );
root->addChild(dlight);
// Load the file
OSG::NodeUnrecPtr file = NULL;
if(argc > 1)
{
file = OSG::SceneFileHandler::the()->read(argv[1], NULL);
}
if(file == NULL)
{
std::cerr << "Couldn't load file, ignoring" << std::endl;
//file = OSG::makeSphere(4, 2.0);
file = OSG::Node::create();
OSG::AlgorithmStageUnrecPtr pStage = OSG::AlgorithmStage::create();
file->setCore(pStage);
pAlgo = OSG::GPUVolRTV2::create();
pStage->setAlgorithm(pAlgo);
// fix/freeze the node volume
file->editVolume().setStatic(true);
file->editVolume().setBounds( 0.f, 0.f, 0.f,
1.f, 1.f, 1.f);
}
OSG::commitChanges();
file->updateVolume();
OSG::Vec3f min,max;
file->getVolume().getBounds( min, max );
std::cout << "Volume: from " << min << " to " << max << std::endl;
//.........这里部分代码省略.........
示例8: initAnimSetup
// Setup the part of the scene rooted at animRoot
// This includes a file to animate, a beacon for a light,
// and a staged core to render this subtree from the position
// of the light.
void initAnimSetup(int argc, char **argv)
{
// beacon for light and stage camera
OSG::GroupNodeRefPtr beacon = OSG::GroupNodeRefPtr::create();
// transformation for beacon
cam_transScene = OSG::TransformNodeRefPtr::create();
cam_transScene.node()->addChild(beacon);
// light
OSG::DirectionalLightNodeRefPtr dlight =
OSG::DirectionalLightNodeRefPtr::create();
dlight->setAmbient (.3f, .3f, .3f, 1);
dlight->setDiffuse ( 1, 1, 1, 1);
dlight->setDirection( 0, 0, 1 );
dlight->setBeacon (beacon );
// animRoot
animRoot = OSG::GroupNodeRefPtr::create();
animRoot.node()->addChild(cam_transScene );
// Load the file and put it in the graph
// under the sceneXform node.
OSG::NodeUnrecPtr file = NULL;
if(argc > 1)
{ file = OSG::SceneFileHandler::the()->read(argv[1]); }
if(file == NULL)
{
std::cerr << "Couldn't load file, ignoring" << std::endl;
file = OSG::makeTorus(.5, 2, 16, 16);
}
OSG::Vec3f min,max;
OSG::commitChanges();
file->updateVolume();
file->dump();
file->getVolume().getBounds(min, max);
std::cout << "Volume: from " << min << " to " << max << std::endl;
sceneTrans.setValues(min[0] + ((max[0] - min[0]) * 0.5),
min[1] + ((max[1] - min[1]) * 0.5),
max[2] + ( max[2] - min[2]) * 4.5 );
sceneXform = OSG::TransformNodeRefPtr::create();
sceneXform.node()->addChild(file);
OSG::NodeUnrecPtr pBoxNode = OSG::makeBox(1, 1, 1, 5, 5, 5);
pBoxNode->setTravMask(pBoxNode->getTravMask() & 0x0001);
sceneXform.node()->addChild(pBoxNode);
dlight.node()->addChild(sceneXform);
// ---- STAGE RENDERING SETUP --- //
// Camera: setup camera to point from beacon (light pos)
// with a 90deg FOV to render the scene
OSG::PerspectiveCameraUnrecPtr stage_cam = OSG::PerspectiveCamera::create();
stage_cam->setBeacon(beacon);
stage_cam->setFov (OSG::osgDegree2Rad(90));
stage_cam->setNear (0.1f);
stage_cam->setFar (100000);
// Background
OSG::SolidBackgroundUnrecPtr bkgnd = OSG::SolidBackground::create();
bkgnd->setColor(OSG::Color3f(0,1,0));
// FBO setup
pFBO = OSG::FrameBufferObject::create();
pTexBuffer = OSG::TextureBuffer::create();
#ifdef USE_DEPTH_TEXTURE
OSG::TextureBufferUnrecPtr pDepthBuffer = OSG::TextureBuffer::create();
pDepthBuffer->setTexture(txDepth);
#else
OSG::RenderBufferUnrecPtr pDepthBuffer = OSG::RenderBuffer ::create();
pDepthBuffer->setInternalFormat(GL_DEPTH_COMPONENT24 );
#endif
pTexBuffer->setTexture (tx1o);
pTexBuffer->setReadBack(true);
pFBO->setSize(512, 512);
pFBO->setColorAttachment(pTexBuffer, 0);
pFBO->setDepthAttachment(pDepthBuffer );
pFBO->editMFDrawBuffers()->clear();
pFBO->editMFDrawBuffers()->push_back(GL_COLOR_ATTACHMENT0_EXT);
//.........这里部分代码省略.........
示例9: init
void init(int argc, char *argv[])
{
OSG::osgInit(argc, argv);
int glutWinId = setupGLUT(&argc, argv);
// the connection between GLUT and OpenSG
OSG::GLUTWindowUnrecPtr gwin= OSG::GLUTWindow::create();
gwin->setGlutId(glutWinId);
gwin->init();
// load the scene
root = OSG::ChunkOverrideGroup::create();
rootN = OSG::makeNodeFor(root);
if(argc < 2)
{
FWARNING(("No file given!\n"));
FWARNING(("Supported file formats:\n"));
OSG::SceneFileHandler::the()->print();
sceneN = OSG::makeTorus(.5, 2, 16, 16);
}
else
{
/*
All scene file loading is handled via the SceneFileHandler.
*/
sceneN = OSG::SceneFileHandler::the()->read(argv[1]);
}
OSG::TransformUnrecPtr xform = OSG::Transform::create();
OSG::NodeUnrecPtr xformN = OSG::makeNodeFor(xform);
// xform->editMatrix().setTranslate(OSG::Vec3f(100.f, 0.f, 0.f));
// xform->editMatrix().setRotate(OSG::Quaternion(OSG::Vec3f(0.f, 1.f, 0.f), 0.3f * OSG::Pi));
OSG::NodeUnrecPtr boxN = OSG::makeBox(1.f, 1.f, 5.f, 1, 1, 1);
xformN->addChild(sceneN);
rootN ->addChild(xformN);
rootN ->addChild(boxN );
OSG::commitChanges();
// collect geometries in the scene
collectGeometry(rootN);
// construct skin shader
vpSkin = OSG::ShaderProgram::createVertexShader ();
vpSkin->setProgram(vpCode);
fpSkin = OSG::ShaderProgram::createFragmentShader();
fpSkin->setProgram(fpCode);
shSkin = OSG::ShaderProgramChunk::create();
shSkin->addShader(vpSkin);
shSkin->addShader(fpSkin);
matSkin = OSG::ChunkMaterial::create();
matSkin->addChunk(shSkin);
// process animations
processAnim(sceneN);
// create the SimpleSceneManager helper
mgr = OSG::SimpleSceneManager::create();
// tell the manager what to manage
mgr->setWindow(gwin );
mgr->setRoot (rootN);
// show the whole scene
mgr->showAll();
}
示例10: init
void init(std::vector<std::string> &filenames)
{
size_t i;
OSG::DirectionalLightUnrecPtr dl;
OSG::Real32 x,y,z;
OSG::BoxVolume volume;
OSG::Vec3f min,max;
OSG::Vec3f size;
glEnable( GL_DEPTH_TEST );
glEnable( GL_LIGHTING );
glEnable( GL_LIGHT0 );
// GLint twoSide = 1;
// glLightModeliv(GL_LIGHT_MODEL_TWO_SIDE,&twoSide);
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
// create the graph
// beacon for camera and light
OSG::NodeUnrecPtr b1n = OSG::Node::create();
OSG::GroupUnrecPtr b1 = OSG::Group::create();
b1n->setCore( b1 );
// transformation
OSG::NodeUnrecPtr t1n = OSG::Node::create();
OSG::TransformUnrecPtr t1 = OSG::Transform::create();
t1n->setCore( t1 );
t1n->addChild( b1n );
cam_trans = t1;
// light
OSG::NodeUnrecPtr dlight = OSG::Node::create();
dl = OSG::DirectionalLight::create();
dlight->setCore( dl );
dl->setAmbient( .3f, .3f, .3f, 1 );
dl->setDiffuse( 1, 1, 1, 1 );
dl->setDirection(0,0,1);
dl->setBeacon( b1n);
// root
root = OSG::Node::create();
OSG::GroupUnrecPtr gr1 = OSG::Group::create();
root->setCore( gr1 );
root->addChild( t1n );
root->addChild( dlight );
// Load the file
OSG::NodeUnrecPtr scene = OSG::Node::create();
scene->setCore(OSG::Group::create());
OSG::NodeUnrecPtr file;
for(i=0;i<filenames.size();i++)
{
file = OSG::SceneFileHandler::the()->read(filenames[i].c_str(),0);
if(file != NULL)
scene->addChild(file);
else
std::cerr << "Couldn't load file, ignoring " << filenames[i] << std::endl;
}
if ( filenames.size()==0 )
{
file = OSG::makeTorus( .5, 2, 16, 16 );
scene->addChild(file);
// scene->addChild(makeBox(.6,.6,.6,5,5,5));
}
prepareSceneGraph(scene);
OSG::Thread::getCurrentChangeList()->commitChanges();
scene->invalidateVolume();
scene->updateVolume();
volume=scene->getVolume();
volume.getBounds(min,max);
size = max-min;
if(ca>0)
{
if(cb==-1)
cb=ca;
if(cc==-1)
cc=cb;
OSG::NodeUnrecPtr node;
OSG::NodeUnrecPtr geoNode;
OSG::TransformUnrecPtr trans;
for(x=-ca/2.0 ; x<ca/2.0 ; x++)
for(y=-cb/2.0 ; y<cb/2.0 ; y++)
for(z=-cc/2.0 ; z<cc/2.0 ; z++)
{
trans=OSG::Transform::create();
node=OSG::Node::create();
node->setCore(trans);
//.........这里部分代码省略.........
示例11: initVTK
OSG::NodeTransitPtr initVTK(void)
{
OSG::NodeUnrecPtr returnValue = NULL;
OSG::Char8 *szDataRoot = getenv("VTK_DATA_ROOT");
if(szDataRoot == NULL)
{
fprintf(stderr, "VTK_DATA_ROOT not set\n");
exit(0);
}
std::string szFilename;
szFilename.assign(szDataRoot);
szFilename += "/Data/office.binary.vtk";
vtkStructuredGridReader *reader = vtkStructuredGridReader::New();
reader->SetFileName(szFilename.c_str());
reader->Update();
#if 0
OSG::Real64 length = reader->GetOutput()->GetLength();
OSG::Real64 maxVelocity =
reader->GetOutput()->GetPointData()->GetVectors()->GetMaxNorm();
OSG::Real64 maxTime = 35.0 * length / maxVelocity;
#endif
returnValue = OSG::Node::create();
returnValue->setCore(OSG::Group::create());
// Create source for streamtubes
vtkPointSource *seeds = vtkPointSource::New();
seeds->SetRadius(0.15);
seeds->SetCenter(0.1, 2.1, 0.5);
seeds->SetNumberOfPoints(6);
vtkRungeKutta4 *integ = vtkRungeKutta4::New();
vtkStreamLine *streamer = vtkStreamLine::New();
streamer->SetInputConnection(reader->GetOutputPort());
#if VTK_MAJOR_VERSION >= 6
streamer->SetSourceData(seeds->GetOutput());
#else
streamer->SetSource(seeds->GetOutput());
#endif
streamer->SetMaximumPropagationTime(500);
streamer->SetStepLength(0.5);
streamer->SetIntegrationStepLength(0.05);
streamer->SetIntegrationDirectionToIntegrateBothDirections();
streamer->SetIntegrator(integ);
// The tube is wrapped around the generated streamline. By varying the
// radius by the inverse of vector magnitude, we are creating a tube
// whose radius is proportional to mass flux (in incompressible flow).
vtkTubeFilter *streamTube = vtkTubeFilter::New();
streamTube->SetInputConnection(streamer->GetOutputPort());
streamTube->SetRadius(0.02);
streamTube->SetNumberOfSides(12);
streamTube->SetVaryRadiusToVaryRadiusByVector();
vtkPolyDataMapper *mapStreamTube = vtkPolyDataMapper::New();
mapStreamTube->SetInputConnection(streamTube->GetOutputPort());
mapStreamTube->SetScalarRange(
reader->GetOutput()->GetPointData()->GetScalars()->GetRange());
vtkActor *streamTubeActor = vtkActor::New();
streamTubeActor->SetMapper(mapStreamTube);
streamTubeActor->GetProperty()->BackfaceCullingOn();
addActor(returnValue, streamTubeActor);
vtkStructuredGridGeometryFilter *table1 =
vtkStructuredGridGeometryFilter::New();
table1->SetInputConnection(reader->GetOutputPort());
table1->SetExtent(11, 15, 7, 9, 8, 8);
vtkPolyDataNormals *normTable1 = vtkPolyDataNormals::New();
normTable1->SetInputConnection(table1->GetOutputPort());
vtkPolyDataMapper *mapTable1 = vtkPolyDataMapper::New();
mapTable1->SetInputConnection(normTable1->GetOutputPort());
mapTable1->ScalarVisibilityOff();
vtkActor *table1Actor = vtkActor::New();
table1Actor->SetMapper(mapTable1);
table1Actor->GetProperty()->SetColor(.59, .427, .392);
addActor(returnValue, table1Actor);
vtkStructuredGridGeometryFilter *table2 =
vtkStructuredGridGeometryFilter::New();
table2->SetInputConnection(reader->GetOutputPort());
table2->SetExtent(11, 15, 10, 12, 8, 8);
//.........这里部分代码省略.........
示例12: doMain
//.........这里部分代码省略.........
OSG::TextureEnvChunkUnrecPtr tex_earth_night_env =
OSG::TextureEnvChunk::create();
tex_earth_night->setImage(earth_night_map_img);
tex_earth_night->setMinFilter(GL_LINEAR_MIPMAP_LINEAR);
tex_earth_night->setMagFilter(GL_LINEAR);
tex_earth_night->setWrapS(GL_REPEAT);
tex_earth_night->setWrapT(GL_REPEAT);
tex_earth_night_env->setEnvMode(GL_MODULATE);
// Read the image for the normal texture
OSG::ImageUnrecPtr earth_clouds_map_img = OSG::Image::create();
if(!earth_clouds_map_img->read("EarthClouds.jpg"))
{
fprintf(stderr, "Couldn't read texture 'EarthClouds.jpg'\n");
return 1;
}
OSG::TextureObjChunkUnrecPtr tex_earth_clouds =
OSG::TextureObjChunk::create();
OSG::TextureEnvChunkUnrecPtr tex_earth_clouds_env =
OSG::TextureEnvChunk::create();
tex_earth_clouds->setImage(earth_clouds_map_img);
tex_earth_clouds->setMinFilter(GL_LINEAR_MIPMAP_LINEAR);
tex_earth_clouds->setMagFilter(GL_LINEAR);
tex_earth_clouds->setWrapS(GL_REPEAT);
tex_earth_clouds->setWrapT(GL_REPEAT);
tex_earth_clouds_env->setEnvMode(GL_MODULATE);
_shl = OSG::ShaderProgramChunk::create();
_shl_vp = OSG::ShaderProgram::create();
_shl_fp = OSG::ShaderProgram::create();
if(!_shl_vp->readProgram("Earth.vp"))
fprintf(stderr, "Couldn't read vertex program 'Earth.vp'\n");
if(!_shl_fp->readProgram("Earth.fp"))
fprintf(stderr, "Couldn't read fragment program 'Earth.fp'\n");
_shl_vp->setShaderType(GL_VERTEX_SHADER);
_shl_fp->setShaderType(GL_FRAGMENT_SHADER);
_shl->addVertexShader (_shl_vp);
_shl->addFragmentShader(_shl_fp);
_shl_fp->addUniformVariable("EarthDay", 0);
_shl_fp->addUniformVariable("EarthNight", 1);
_shl_fp->addUniformVariable("EarthCloudGloss", 2);
_shl_vp->addUniformVariable("season", 0.0f);
_shl_vp->addUniformVariable("cos_time_0_2PI", -0.406652f);
_shl_vp->addUniformVariable("sin_time_0_2PI", -0.913583f);
// _shl->setUniformParameter("foo", -0.913583f);
cmat->addChunk(_shl);
cmat->addChunk(tex_earth);
cmat->addChunk(tex_earth_env);
cmat->addChunk(tex_earth_night);
cmat->addChunk(tex_earth_night_env);
cmat->addChunk(tex_earth_clouds);
cmat->addChunk(tex_earth_clouds_env);
// create root node
_scene = OSG::Node::create();
OSG::GeometryUnrecPtr geo = OSG::makeLatLongSphereGeo (100, 100, 1.0);
geo->setMaterial(cmat);
OSG::NodeUnrecPtr torus = OSG::Node::create();
torus->setCore(geo);
// add torus to scene
OSG::GroupUnrecPtr group = OSG::Group::create();
_scene->setCore(group);
_scene->addChild(torus);
// create the SimpleSceneManager helper
_mgr = OSG::SimpleSceneManager::create();
// tell the manager what to manage
_mgr->setWindow(gwin );
_mgr->setRoot(_scene);
// show the whole scene
_mgr->showAll();
return 0;
}
示例13: doMain
// Initialize GLUT & OpenSG and set up the scene
int doMain(int argc, char **argv)
{
// OSG init
OSG::osgInit(argc, argv);
// GLUT init
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
int winid = glutCreateWindow("OpenSG CGFX Shader");
// the connection between GLUT and OpenSG
_gwin = OSG::GLUTWindow::create();
_gwin->setGlutId(winid);
_gwin->setSize( 800, 800 );
_gwin->init();
// init callbacks
glutSetWindow(winid);
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutIdleFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
const char *effectFile = "blinn_bump_reflect.vinstruct.cgfx";
if(argc > 1)
{
effectFile = argv[1];
}
_cgfxmat = OSG::CgFXMaterial::create();
_cgfxmat->setEffectFile(effectFile);
// this multipass technique leads to a render bug,
// I have no idea what's wrong :-(
//_cgfxmat->setTechnique(1);
OSG::ChunkMaterialUnrecPtr mat2 = OSG::ChunkMaterial::create();
OSG::MaterialChunkUnrecPtr matc = OSG::MaterialChunk::create();
matc->setDiffuse(OSG::Color4f(1, 0, 0, 1));
mat2->addChunk(matc);
//mat2->addChunk(texc);
// create root node
_scene = OSG::Node::create();
OSG::GeometryUnrecPtr geo1 = OSG::makeLatLongSphereGeo(50, 50, 2.0f);
OSG::calcVertexTangents(geo1,
0,
OSG::Geometry::TexCoords6Index,
OSG::Geometry::TexCoords7Index);
geo1->setMaterial(_cgfxmat);
OSG::NodeUnrecPtr sphere1 = OSG::Node::create();
sphere1->setCore(geo1);
OSG::TransformUnrecPtr trans1 = OSG::Transform::create();
trans1->editMatrix().setTranslate(-2 , 0, 0);
OSG::NodeUnrecPtr transn1 = OSG::Node::create();
transn1->setCore(trans1);
transn1->addChild(sphere1);
//
OSG::GeometryUnrecPtr geo2 = OSG::makeLatLongSphereGeo(50, 50, 1.0f);
geo2->setMaterial(mat2);
OSG::NodeUnrecPtr sphere2 = OSG::Node::create();
sphere2->setCore(geo2);
OSG::TransformUnrecPtr trans2 = OSG::Transform::create();
trans2->editMatrix().setTranslate(2 , 0, 0);
OSG::NodeUnrecPtr transn2 = OSG::Node::create();
transn2->setCore(trans2);
transn2->addChild(sphere2);
_scene->setCore (OSG::Group::create());
_scene->addChild(transn1 );
_scene->addChild(transn2 );
// create the SimpleSceneManager
//.........这里部分代码省略.........
示例14: main
int main(int argc, char **argv)
{
OSG::osgInit(argc,argv);
OSG::PerfMonitor::the()->enable(true); // Enable performance monitoring
// GLUT init
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize(500, 500);
glutCreateWindow("PerfMonitor FG Test");
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutIdleFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
pwin=OSG::PassiveWindow::create();
pwin->init();
// create the scene
OSG::NodeUnrecPtr scene;
if(argc > 1)
{
scene = OSG::Node::create();
OSG::GroupUnrecPtr g = OSG::Group::create();
scene->setCore(g);
for(OSG::UInt16 i = 1; i < argc; ++i)
scene->addChild(OSG::SceneFileHandler::the()->read(argv[i]));
}
else
{
scene = OSG::makeTorus(.5, 3, 16, 16);
}
// create the SimpleSceneManager helper
mgr = OSG::SimpleSceneManager::create();
// create the window and initial camera/viewport
mgr->setWindow(pwin );
// tell the manager what to manage
mgr->setRoot (scene);
OSG::Thread::getCurrentChangeList()->commitChanges();
// show the whole scene
mgr->showAll();
// add the statistics forground
perfmon_fg = OSG::PerfMonitorForeground::create();
pwin->getPort(0)->addForeground(perfmon_fg);
//statfg->setMaxSize(25);
//statfg->setColor(Color4f(0,1,0,0.7));
act = OSG::RenderAction::create();
mgr->setAction(act);
// GLUT main loop
glutMainLoop();
return 0;
}
示例15: doMain
// Initialize GLUT & OpenSG and set up the scene
int doMain(int argc, char **argv)
{
// OSG init
OSG::osgInit(argc,argv);
// GLUT init
int winid = setupGLUT(&argc, argv);
// the connection between GLUT and OpenSG
OSG::GLUTWindowUnrecPtr gwin = OSG::GLUTWindow::create();
gwin->setGlutId(winid);
gwin->setSize( 800, 800 );
gwin->init();
// Create the shader material
OSG::ChunkMaterialUnrecPtr cmat = OSG::ChunkMaterial::create();
OSG::SHLChunkUnrecPtr shl = OSG::SHLChunk::create();
shl->setProgramParameter(GL_GEOMETRY_INPUT_TYPE_EXT,
GL_TRIANGLES);
shl->setProgramParameter(GL_GEOMETRY_OUTPUT_TYPE_EXT,
GL_TRIANGLE_STRIP);
shl->setProgramParameter(GL_GEOMETRY_VERTICES_OUT_EXT, 6);
shl->setVertexProgram(_vertex_shader);
shl->setFragmentProgram(_fragment_shader);
shl->setGeometryProgram(_geometry_shader);
cmat->addChunk(shl);
// create root node
_scene = OSG::Node::create();
// create torus
OSG::GeometryUnrecPtr geo = OSG::makeTorusGeo(.8, 1.8, 128, 128);
geo->setMaterial(cmat);
OSG::NodeUnrecPtr torus = OSG::Node::create();
torus->setCore(geo);
// add torus to scene
OSG::GroupUnrecPtr group = OSG::Group::create();
_scene->setCore(group);
_scene->addChild(torus);
// create the SimpleSceneManager helper
_mgr = OSG::SimpleSceneManager::create();
// tell the manager what to manage
_mgr->setWindow(gwin );
_mgr->setRoot(_scene);
// show the whole scene
_mgr->showAll();
return 0;
}