本文整理汇总了C++中TextureChunkPtr类的典型用法代码示例。如果您正苦于以下问题:C++ TextureChunkPtr类的具体用法?C++ TextureChunkPtr怎么用?C++ TextureChunkPtr使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TextureChunkPtr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: finish
void VRMLAppearanceBinder::finish(VRMLToOSGAction *)
{
ChunkMaterialPtr pChunkMat =
ChunkMaterialPtr::dcast(_pFieldContainer);
TextureChunkPtr pTexChunk =
TextureChunkPtr::dcast(pChunkMat->find(TextureChunk::getClassType()));
MaterialChunkPtr pMatChunk =
MaterialChunkPtr::dcast(
pChunkMat->find(MaterialChunk::getClassType()));
if(pTexChunk != NullFC)
{
beginEditCP(pTexChunk, TextureChunk::EnvModeFieldMask);
{
if(pMatChunk == NullFC)
{
pTexChunk->setEnvMode(GL_REPLACE);
}
else
{
pTexChunk->setEnvMode(GL_MODULATE);
}
}
endEditCP (pTexChunk, TextureChunk::EnvModeFieldMask);
}
if(pChunkMat != NullFC && (pChunkMat->isTransparent() == true ||
_has_alpha))
{
BlendChunkPtr pBlendChunk = OSG::BlendChunk::create();
beginEditCP(pBlendChunk, BlendChunk::SrcFactorFieldMask |
BlendChunk::DestFactorFieldMask);
{
pBlendChunk->setSrcFactor (GL_SRC_ALPHA);
pBlendChunk->setDestFactor(GL_ONE_MINUS_SRC_ALPHA);
}
endEditCP (pBlendChunk, BlendChunk::SrcFactorFieldMask |
BlendChunk::DestFactorFieldMask);
beginEditCP(pChunkMat, ChunkMaterial::ChunksFieldMask);
{
pChunkMat->addChunk(pBlendChunk);
}
endEditCP (pChunkMat, ChunkMaterial::ChunksFieldMask);
}
}
示例2: setTexture
void VRMLAppearanceBinder::setTexture(TextureChunkPtr pTex)
{
if(pTex == NullFC)
return;
ChunkMaterialPtr pChunkMat =
ChunkMaterialPtr::dcast(_pFieldContainer);
if(pChunkMat != NullFC)
{
beginEditCP(pChunkMat, ChunkMaterial::ChunksFieldMask);
{
pChunkMat->addChunk(pTex);
}
endEditCP (pChunkMat, ChunkMaterial::ChunksFieldMask);
// check for alpha
ImagePtr img = pTex->getImage();
if(img != NullFC && img->getBpp() == 4)
_has_alpha = true;
}
}
示例3: updateScene
void updateScene()
{
statfg->editCollector().getElem(majorAlignDesc)->set(alignmentToString(layoutParam.majorAlignment));
statfg->editCollector().getElem(minorAlignDesc)->set(alignmentToString(layoutParam.minorAlignment));
statfg->editCollector().getElem(dirDesc)->set(layoutParam.horizontal ? "Horizontal" : "Vertical");
statfg->editCollector().getElem(horiDirDesc)->set(layoutParam.leftToRight ? "Left to right" : "Right to left");
statfg->editCollector().getElem(vertDirDesc)->set(layoutParam.topToBottom ? "Top to bottom" : "Bottom to top");
if(face == NULL)
return;
// Put it all together into a Geometry NodeCore.
TextLayoutResult layoutResult;
Real32 scale = 2.f;
face->layout(lines, layoutParam, layoutResult);
#if 0
GeometryPtr geo = Geometry::create();
face->fillGeo(geo, layoutResult, scale);
NodePtr textNode = Node::create();
beginEditCP(textNode, Node::CoreFieldMask);
{
textNode->setCore(geo);
}
endEditCP(textNode, Node::CoreFieldMask);
#else
NodePtr textNode = face->makeNode(layoutResult, scale);
GeometryPtr geo = GeometryPtr::dcast(textNode->getCore());
#endif
NodePtr transNodePtr = Node::create();
TransformPtr transPtr = Transform::create();
Matrix transMatrix;
transMatrix.setTranslate(0.f, 0.f, -0.03f);
beginEditCP(transPtr);
{
transPtr->setMatrix(transMatrix);
}
endEditCP(transPtr);
beginEditCP(transNodePtr, Node::CoreFieldMask | Node::ChildrenFieldMask);
{
transNodePtr->setCore(transPtr);
transNodePtr->addChild(textNode);
}
endEditCP(transNodePtr, Node::CoreFieldMask | Node::ChildrenFieldMask);
ImagePtr imagePtr = face->getTexture();
TextureChunkPtr texChunk = TextureChunk::create();
beginEditCP(texChunk);
{
texChunk->setImage(imagePtr);
texChunk->setWrapS(GL_CLAMP);
texChunk->setWrapT(GL_CLAMP);
texChunk->setMagFilter(GL_NEAREST);
texChunk->setMinFilter(GL_NEAREST);
texChunk->setEnvMode(GL_MODULATE);
}
endEditCP(texChunk);
MaterialChunkPtr matChunk = MaterialChunk::create();
beginEditCP(matChunk);
{
matChunk->setAmbient(Color4f(1.f, 1.f, 1.f, 1.f));
matChunk->setDiffuse(Color4f(1.f, 1.f, 1.f, 1.f));
matChunk->setEmission(Color4f(0.f, 0.f, 0.f, 1.f));
matChunk->setSpecular(Color4f(0.f, 0.f, 0.f, 1.f));
matChunk->setShininess(0);
}
endEditCP(matChunk);
BlendChunkPtr blendChunk = BlendChunk::create();
beginEditCP(blendChunk);
{
blendChunk->setSrcFactor(GL_SRC_ALPHA);
blendChunk->setDestFactor(GL_ONE_MINUS_SRC_ALPHA);
}
endEditCP(blendChunk);
ChunkMaterialPtr m = ChunkMaterial::create();
beginEditCP(m);
{
m->addChunk(texChunk);
m->addChunk(matChunk);
m->addChunk(blendChunk);
}
endEditCP(m);
beginEditCP(geo, Geometry::MaterialFieldMask);
{
geo->setMaterial(m);
}
endEditCP(geo, Geometry::MaterialFieldMask);
beginEditCP(scene, Node::ChildrenFieldMask);
{
scene->editMFChildren()->clear();
scene->addChild(createCoordinateCross());
scene->addChild(createMetrics(face, scale, layoutParam, layoutResult));
scene->addChild(transNodePtr);
}
endEditCP(scene, Node::ChildrenFieldMask);
//.........这里部分代码省略.........
示例4: main
//.........这里部分代码省略.........
{ Vec2f(0,0), Vec2f(1,0), Vec2f(1,.1), Vec2f(0,.1) },
{ Vec2f(1,-100), Vec2f(-2,-100), Vec2f(-2,-2), Vec2f(1,-2) },
{ Vec2f(-1000,-1000), Vec2f(0,0), Vec2f(0,0), Vec2f(0,0) }
};
bool normx[] = { true, true, false };
bool normy[] = { true, true, false };
for(UInt16 ind = 0; pos[ind][0][0] != -1000; ++ind)
{
PolygonForegroundPtr pg = PolygonForeground::create();
beginEditCP(pg);
pg->setMaterial(mat);
pg->editMFTexCoords()->push_back(Vec3f( 0.,0.,0.));
pg->editMFPositions()->push_back(pos[ind][0]);
pg->editMFTexCoords()->push_back(Vec3f( 1.,0.,0.));
pg->editMFPositions()->push_back(pos[ind][1]);
pg->editMFTexCoords()->push_back(Vec3f( 1.,1.,0.));
pg->editMFPositions()->push_back(pos[ind][2]);
pg->editMFTexCoords()->push_back(Vec3f( 0.,1.,0.));
pg->editMFPositions()->push_back(pos[ind][3]);
pg->setNormalizedX(normx[ind]);
pg->setNormalizedY(normy[ind]);
endEditCP(pg);
// take the viewport
ViewportPtr vp = gwin->getPort(0);
beginEditCP(vp);
vp->editMFForegrounds()->push_back(pg);
endEditCP (vp);
}
// Create the edgeblend foreground
const int blendpixel = 50;
UChar8 ebimgdata[] =
{ 0,0,0,0, 0,0,0,255 };
ImagePtr ebimg = Image::create();
beginEditCP(ebimg);
ebimg->set( Image::OSG_RGBA_PF, 2, 1, 1, 1, 1, 0, ebimgdata );
endEditCP(ebimg);
addRefCP(ebimg);
TextureChunkPtr tc = TextureChunk::create();
beginEditCP(tc);
tc->setImage(ebimg);
tc->setMinFilter(GL_NEAREST);
tc->setMagFilter(GL_LINEAR);
tc->setEnvMode(GL_REPLACE);
tc->setWrapS(GL_CLAMP);
endEditCP(tc);
BlendChunkPtr bl = BlendChunk::create();
beginEditCP(bl);
bl->setSrcFactor(GL_SRC_ALPHA);
bl->setDestFactor(GL_ONE_MINUS_SRC_ALPHA);
endEditCP(bl);
ChunkMaterialPtr ebmat = ChunkMaterial::create();
beginEditCP(ebmat);
ebmat->addChunk(tc);
ebmat->addChunk(bl);
endEditCP(ebmat);
PolygonForegroundPtr ebpg = PolygonForeground::create();
beginEditCP(ebpg);
ebpg->setMaterial(ebmat);
ebpg->editMFTexCoords()->push_back(Vec3f( 0.25,0.,0.));
ebpg->editMFTexCoords()->push_back(Vec3f( 0.75,0.,0.));
ebpg->editMFTexCoords()->push_back(Vec3f( 0.75,1.,0.));
ebpg->editMFTexCoords()->push_back(Vec3f( 0.25,1.,0.));
ebpg->editMFPositions()->push_back(Pnt2f(-blendpixel-1, 0));
ebpg->editMFPositions()->push_back(Pnt2f( -1, 0));
ebpg->editMFPositions()->push_back(Pnt2f( -1, 1));
ebpg->editMFPositions()->push_back(Pnt2f(-blendpixel-1, 1));
ebpg->setNormalizedX(false);
ebpg->setNormalizedY(true);
endEditCP(ebpg);
// take the viewport
ViewportPtr vp = gwin->getPort(0);
beginEditCP(vp);
vp->editMFForegrounds()->push_back(ebpg);
endEditCP (vp);
// show the whole scene
mgr->showAll();
// GLUT main loop
glutMainLoop();
return 0;
}
示例5: main
// Initialize GLUT & OpenSG and set up the scene
int main(int argc, char **argv)
{
// OSG init
osgInit(argc,argv);
// GLUT init
int winid = setupGLUT(&argc, argv);
gwin = GLUTWindow::create();
// create root
rootNode = makeCoredNode<Group>();
NodePtr scene = makeCoredNode<Group>();
// create lights
TransformPtr point1_trans;
NodePtr point1 = makeCoredNode<PointLight>(&_point1_core);
NodePtr point1_beacon = makeCoredNode<Transform>(&point1_trans);
beginEditCP(point1_trans);
point1_trans->editMatrix().setTranslate(0.0, 0.0, 25.0);
endEditCP(point1_trans);
beginEditCP(_point1_core);
_point1_core->setAmbient(0.15,0.15,0.15,1);
_point1_core->setDiffuse(0.4,0.4,0.4,1);
_point1_core->setSpecular(0.0,0.0,0.0,1);
_point1_core->setBeacon(point1_beacon);
_point1_core->setOn(true);
endEditCP(_point1_core);
TransformPtr point2_trans;
NodePtr point2 = makeCoredNode<PointLight>(&_point2_core);
NodePtr point2_beacon = makeCoredNode<Transform>(&point2_trans);
beginEditCP(point2_trans);
point2_trans->editMatrix().setTranslate(5.0, 5.0, 20.0);
endEditCP(point2_trans);
beginEditCP(_point2_core);
_point2_core->setAmbient(0.15,0.15,0.15,1);
_point2_core->setDiffuse(0.4,0.4,0.4,1);
_point2_core->setSpecular(0.0,0.0,0.0,1);
_point2_core->setBeacon(point2_beacon);
_point2_core->setOn(true);
endEditCP(_point2_core);
beginEditCP(point1);
point1->addChild(point2);
endEditCP(point1);
beginEditCP(point2);
point2->addChild(scene);
endEditCP(point2);
// create scene
// bottom
NodePtr plane = makePlane(25.0, 25.0, 128, 128);
int size = imageWinWidth*imageWinHeight*256;
ImagePtr plane_img = Image::create();
beginEditCP(plane_img);
plane_img->set(Image::OSG_RGBA_PF, imageWinWidth, imageWinHeight, 1, 1, 1, 0, NULL);
endEditCP(plane_img);
TextureChunkPtr plane_tex = TextureChunk::create();
beginEditCP(plane_tex);
plane_tex->setImage(plane_img);
plane_tex->setMinFilter(GL_LINEAR);
plane_tex->setMagFilter(GL_LINEAR);
plane_tex->setTarget(GL_TEXTURE_2D);
plane_tex->setInternalFormat(GL_RGBA16F_ARB);
endEditCP(plane_tex);
SHLChunkPtr shl = SHLChunk::create();
beginEditCP(shl);
shl->setVertexProgram(_vp_program);
shl->setFragmentProgram(_fp_program);
shl->setUniformParameter("tex0", 0);
endEditCP(shl);
SimpleMaterialPtr plane_mat = SimpleMaterial::create();
beginEditCP(plane_mat);
plane_mat->setAmbient(Color3f(0.3,0.3,0.3));
plane_mat->setDiffuse(Color3f(1.0,1.0,1.0));
plane_mat->addChunk(plane_tex);
plane_mat->addChunk(shl);
endEditCP(plane_mat);
GeometryPtr plane_geo = GeometryPtr::dcast(plane->getCore());
beginEditCP(plane_geo);
plane_geo->setMaterial(plane_mat);
beginEditCP(plane_geo);
// box
box_trans_node = makeCoredNode<Transform>(&_box_trans);
beginEditCP(_box_trans);
_box_trans->editMatrix().setTranslate(0.0, 0.0, 12.0);
endEditCP(_box_trans);
//.........这里部分代码省略.........
示例6: FDEBUG
//.........这里部分代码省略.........
matc->setBackAmbient(Color4f(r,g,b,0));
mat->getColor(PFMTL_DIFFUSE, &r, &g, &b);
matc->setBackDiffuse(Color4f(r,g,b,a));
mat->getColor(PFMTL_SPECULAR, &r, &g, &b);
matc->setBackSpecular(Color4f(r,g,b,0));
mat->getColor(PFMTL_EMISSION, &r, &g, &b);
matc->setBackEmission(Color4f(r,g,b,0));
matc->setBackShininess(mat->getShininess());
int cm = mat->getColorMode(PFMTL_FRONT);
UInt32 om = GL_NONE;
for (UInt16 i = 0; pcolormode[i] != -1; ++i)
if(pcolormode[i] == cm)
om = ocolormode[i];
matc->setBackColorMaterial(om);
}
endEditCP(matc);
}
mat->addChunk(matc);
}
if((inherit & (PFSTATE_TEXTURE | PFSTATE_TEXENV)) !=
(PFSTATE_TEXTURE | PFSTATE_TEXENV)
)
{
TextureChunkPtr texc;
for(int t = 0; t < PF_MAX_TEXTURES; ++t)
{
if(gstate->getMultiAttr(PFSTATE_TEXTURE, t) == NULL)
continue;
key.first = NULL;
if (!(inherit & PFSTATE_TEXTURE) &&
gstate->getMultiAttr(PFSTATE_TEXTURE, t))
key.first = gstate->getMultiAttr(PFSTATE_TEXTURE, t);
key.second = NULL;
if (!(inherit & PFSTATE_TEXENV) &&
gstate->getMultiAttr(PFSTATE_TEXENV, t))
key.second = gstate->getMultiAttr(PFSTATE_TEXENV, t);
if(_chunks.find(key) != _chunks.end())
{
texc = TextureChunkPtr::dcast(_chunks[key]);
}
else
{
texc = TextureChunk::create();
beginEditCP(texc);
if (!(inherit & PFSTATE_TEXTURE))
{
pfTexture *tex =
(pfTexture*)gstate->getMultiAttr(PFSTATE_TEXTURE, t);
unsigned int* pdata;
int pf, w, h, d, type, comp, sides;
示例7: main
int main (int argc, char **argv)
{
// GLUT init
osgInit(argc, argv);
osgLog().setLogLevel ( OSG::LOG_DEBUG );
FieldContainerPtr pProto = Geometry::getClassType().getPrototype();
GeometryPtr pGeoProto = GeometryPtr::dcast(pProto);
if(pGeoProto != NullFC)
{
pGeoProto->setDlistCache(true);
}
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
UInt32 id = glutCreateWindow("OpenSG");
glutKeyboardFunc(key);
glutReshapeFunc(resize);
glutDisplayFunc(display);
// glutMouseFunc(mouse);
// glutMotionFunc(motion);
glutIdleFunc(display);
// create a material (need that to test textures)
ChunkMaterialPtr mat;
beginEditCP(mat);
mat = ChunkMaterial::create();
MaterialChunkPtr mc = MaterialChunk::create();
beginEditCP(mc);
mc->setDiffuse( Color4f( 1,.8,.8,1 ) );
mc->setAmbient( Color4f( 0.1,0.1,0.1,1 ) );
mc->setSpecular( Color4f( 1,1,1,1 ) );
mc->setShininess( 20 );
mc->setBackMaterial(true);
mc->setBackColorMaterial(GL_DIFFUSE);
mc->setBackDiffuse( Color4f( 1,0,0,1 ) );
mc->setBackAmbient( Color4f( 0.1,0.1,0.1,1 ) );
mc->setBackSpecular( Color4f( 0,1,0,1 ) );
mc->setBackShininess( 10 );
mc->setLit(true);
endEditCP(mc);
mat->addChunk(mc);
// Texture chunk
UChar8 imgdata[] =
{ 255,0,0,128, 0,255,0,128, 0,0,255,255, 255,255,255,255 };
ImagePtr pImage = Image::create();
pImage->set( Image::OSG_RGBA_PF, 2, 2, 1, 1, 1, 0, imgdata );
if ( argc > 1 )
pImage->read( argv[1] );
TextureChunkPtr xchunk;
xchunk = TextureChunk::create();
xchunk->setImage( pImage );
xchunk->setMinFilter( GL_NEAREST );
xchunk->setMagFilter( GL_NEAREST );
xchunk->setWrapS( GL_REPEAT );
xchunk->setWrapT( GL_REPEAT );
xchunk->setEnvMode( GL_MODULATE );
mat->addChunk( xchunk );
endEditCP(mat);
objects[0] = makePolygon(ccwSquare,
sizeof(ccwSquare)/sizeof(double[3]));
objects[1] = makePolygon(ccwSquare,
sizeof(ccwSquare)/sizeof(double[3]));
objects[2] = makePolygon(star,
sizeof(star)/sizeof(double[3]));
objects[3] = makePolygon(star,
sizeof(star)/sizeof(double[3]));
objects[4] = makePolygon(cwSquare,
sizeof(cwSquare)/sizeof(double[3]));
objects[5] = makePolygon(cwSquare,
sizeof(cwSquare)/sizeof(double[3]));
objects[6] = makePolygon(doubleEight,
sizeof(doubleEight)/sizeof(double[3]));
objects[7] = makePolygon(doubleEight,
sizeof(doubleEight)/sizeof(double[3]));
//tesselate every second object
//.........这里部分代码省略.........
示例8: main
int main(int argc, char **argv)
{
// OSG init
osgInit(argc,argv);
// Set up Window
TutorialWindowEventProducer = createDefaultWindowEventProducer();
WindowPtr MainWindow = TutorialWindowEventProducer->initWindow();
TutorialWindowEventProducer->setDisplayCallback(display);
TutorialWindowEventProducer->setReshapeCallback(reshape);
TutorialKeyListener TheKeyListener;
TutorialWindowEventProducer->addKeyListener(&TheKeyListener);
// Create the SimpleSceneManager helper
mgr = new SimpleSceneManager;
// Tell the Manager what to manage
mgr->setWindow(MainWindow);
// Make Torus Node (creates Torus in background of scene)
NodePtr TorusGeometryNode = makeTorus(.5, 2, 16, 16);
// Make Main Scene Node and add the Torus
NodePtr scene = osg::Node::create();
beginEditCP(scene, Node::CoreFieldMask | Node::ChildrenFieldMask);
scene->setCore(osg::Group::create());
scene->addChild(TorusGeometryNode);
endEditCP(scene, Node::CoreFieldMask | Node::ChildrenFieldMask);
//Create the Image
Path ImagePath("./Data/TutorialImage.jpg");
ImagePtr TheImage = ImageFileHandler::the().read(ImagePath.string().c_str());
//Create the texture
TextureChunkPtr TheTextureChunk = TextureChunk::create();
beginEditCP(TheTextureChunk);
TheTextureChunk->setImage(TheImage);
TheTextureChunk->setMinFilter(GL_NEAREST);
TheTextureChunk->setMagFilter(GL_NEAREST);
TheTextureChunk->setWrapS(GL_CLAMP_TO_EDGE);
TheTextureChunk->setWrapR(GL_CLAMP_TO_EDGE);
TheTextureChunk->setScale(false);
TheTextureChunk->setNPOTMatrixScale(true);
TheTextureChunk->setEnvMode(GL_REPLACE);
endEditCP(TheTextureChunk);
//Create a Texture Source
TextureSourceTextureFilterPtr TutorialTextureSourceTextureFilter = TextureSourceTextureFilter::create();
beginEditCP(TutorialTextureSourceTextureFilter, TextureSourceTextureFilter::TextureFieldMask);
TutorialTextureSourceTextureFilter->setTexture(TheTextureChunk);
endEditCP(TutorialTextureSourceTextureFilter, TextureSourceTextureFilter::TextureFieldMask);
//Create a Grayscale filter
std::string GrayScaleFragProg = "uniform sampler2D Slot0Texture; void main() { gl_FragColor = vec4(vec3( dot(vec3(0.3,0.59,0.11), texture2D(Slot0Texture,gl_TexCoord[0].st).rgb)), 1.0); }";
//Create a shader Filter
ShaderTextureFilterPtr GrayscaleTextureFilter = ShaderTextureFilter::create();
GrayscaleTextureFilter->attachSource(TutorialTextureSourceTextureFilter, 0, 0);
GrayscaleTextureFilter->setFragmentSource(GrayScaleFragProg);
//Create a Color Mult filter
std::string ColorMultFragProg = "uniform sampler2D Slot0Texture; void main() { gl_FragColor = vec4(vec3(1.0,0.0,0.0) * texture2D(Slot0Texture,gl_TexCoord[0].st).rgb, 1.0); }";
//Create a shader Filter
ShaderTextureFilterPtr ColorMultTextureFilter = ShaderTextureFilter::create();
ColorMultTextureFilter->attachSource(GrayscaleTextureFilter,0,0);
ColorMultTextureFilter->setFragmentSource(ColorMultFragProg);
////Create a Blur filter
//std::string BlurFragProg = "";
//BlurFragProg +=
//"uniform sampler2D Slot0Texture;"
//"void main()"
//"{"
//" vec2 offsets[9];"
//" offsets[0] = vec2(-0.000625,0.00111111111);"
//" offsets[1] = vec2(0.0,0.00111111111);"
//" offsets[2] = vec2(0.000625,0.00111111111);"
//" offsets[3] = vec2(-0.000625,0.0);"
//" offsets[4] = vec2(0.0,0.0);"
//" offsets[5] = vec2(0.0,0.0);"
//" offsets[6] = vec2(-0.000625,-0.00111111111);"
//" offsets[7] = vec2(0.0,-0.00111111111);"
//" offsets[8] = vec2(0.000625,-0.00111111111);"
//" vec4 kernel[9];"
////" kernel[0] = vec4(0.0);"
////" kernel[1] = vec4(0.0);"
////" kernel[2] = vec4(0.0);"
////" kernel[3] = vec4(0.0);"
////" kernel[4] = vec4(1.0);"
////" kernel[5] = vec4(0.0);"
////" kernel[6] = vec4(0.0);"
//.........这里部分代码省略.........
示例9: CreateTexture
TextureChunkPtr vtkOsgConverter::CreateTexture(vtkTexture* vtkTexture)
{
if(_verbose)
std::cout << "Calling CreateTexture()" << std::endl;
// if(! m_bTextureHasChanged)
// {
// if (_verbose)
// {
// std::cout << " ... nothing to do" << std::endl;
// std::cout << " End CreateTexture()" << std::endl;
// }
// //can we check if the actual image has been updated, even if the texture is the same?
// return;
// }
// else if(m_pvtkTexture == NULL)
// {
// if (_verbose)
// {
// std::cout << " ... texture is (still ?) NULL" << std::endl;
// std::cout << " EndCreateTexture()" << std::endl;
// }
// //the texture has changed but it is NULL now. We should remove the texture from the material
// return;
// }
// m_bTextureHasChanged = false;
vtkImageData* imgData = vtkTexture->GetInput();
int iImgDims[3];
imgData->GetDimensions(iImgDims);
vtkPointData* imgPointData = imgData->GetPointData();
vtkCellData* imgCellData = imgData->GetCellData();
vtkDataArray* data = NULL;
if (imgPointData != NULL)
if (NULL != imgPointData->GetScalars())
{
data = imgPointData->GetScalars();
if (_verbose)
std::cout << " Found texture data in point data" << std::endl;
}
if (imgCellData != NULL)
if (NULL != imgCellData->GetScalars())
{
data = imgCellData->GetScalars();
if (_verbose)
std::cout << " Found texture data in cell data" << std::endl;
}
if (data == NULL)
{
std::cout << " could not load texture data" << std::endl;
return NullFC;
}
int iImgComps = data->GetNumberOfComponents();
int iImgPixels = data->GetNumberOfTuples();
if (iImgPixels != (iImgDims[0] * iImgDims[1] * iImgDims[2]))
{
std::cout << "Number of pixels in data array seems to be wrong!" << std::endl;
return NullFC;
}
UInt8* newImageData = new UInt8[iImgDims[0] * iImgDims[1] * iImgDims[2] * iImgComps];
vtkUnsignedCharArray* oldImageUChar = NULL;
oldImageUChar = dynamic_cast<vtkUnsignedCharArray*>(data);
int ucharCounter = 0;
if (oldImageUChar != NULL)
for (int i = 0; i < iImgPixels; i++)
{
unsigned char pixel[4];
oldImageUChar->GetTupleValue(i, pixel);
for (int j = 0; j < iImgComps; j++)
newImageData[ucharCounter + j] = pixel[j];
ucharCounter += iImgComps;
}
else
std::cout << "Pixel data come in unsupported vtk type" << std::endl;
ImagePtr osgImage = Image::create();
beginEditCP(osgImage);
{
osgImage->setWidth(iImgDims[0]);
osgImage->setHeight(iImgDims[1]);
osgImage->setDepth(iImgDims[2]);
osgImage->setDataType(Image::OSG_UINT8_IMAGEDATA);
if (iImgComps == 1)
osgImage->setPixelFormat(Image::OSG_L_PF);
else if (iImgComps == 2)
osgImage->setPixelFormat(Image::OSG_LA_PF);
else if (iImgComps == 3)
osgImage->setPixelFormat(Image::OSG_RGB_PF);
else if (iImgComps == 4)
osgImage->setPixelFormat(Image::OSG_RGBA_PF);
else
{
std::cout << "Unsupported image type!" << std::endl;
//.........这里部分代码省略.........
示例10: CreateMaterial
//.........这里部分代码省略.........
ambientColor[1] << " " << ambientColor[2] << std::endl;
std::cout << " specular " << specular << " * " << specularColor[0] << " " <<
specularColor[1] << " " << specularColor[2] << std::endl;
}
PolygonChunkPtr polygonChunk = PolygonChunk::create();
beginEditCP(polygonChunk);
{
if (representation == VTK_SURFACE)
{
polygonChunk->setFrontMode(GL_FILL);
polygonChunk->setBackMode(GL_FILL);
}
else if (representation == VTK_WIREFRAME)
{
polygonChunk->setFrontMode(GL_LINE);
polygonChunk->setBackMode(GL_LINE);
}
else
{
polygonChunk->setFrontMode(GL_POINT);
polygonChunk->setBackMode(GL_POINT);
}
} endEditCP(polygonChunk);
MaterialChunkPtr osgMaterialChunk = MaterialChunk::create();
beginEditCP(osgMaterialChunk);
{
osgMaterialChunk->setDiffuse(Color4f(diffuseColor[0] * diffuse, diffuseColor[1] *
diffuse, diffuseColor[2] * diffuse, opacity));
osgMaterialChunk->setSpecular(Color4f(specularColor[0] * specular,
specularColor[1] * specular,
specularColor[2] * specular, 1.0));
osgMaterialChunk->setAmbient(Color4f(ambientColor[0] * ambient, ambientColor[1] *
ambient, ambientColor[2] * ambient, opacity));
osgMaterialChunk->setShininess(specularPower);
//if(opacity < 1.0)
//{
// osgMaterialChunk->setColorMaterial(GL_AMBIENT); // HACK: Opacity does not work with GL_AMBIENT_AND_DIFFUSE
//osgMaterialChunk->setTransparency(1.0f - opacity);
//}
//else
osgMaterialChunk->setColorMaterial(GL_AMBIENT_AND_DIFFUSE);
// On objects consisting only of points or lines, dont lit
if(!lit)
osgMaterialChunk->setLit(false);
} endEditCP(osgMaterialChunk);
ChunkMaterialPtr osgChunkMaterial = ChunkMaterial::create();
beginEditCP(osgChunkMaterial);
{
osgChunkMaterial->addChunk(osgMaterialChunk);
osgChunkMaterial->addChunk(TwoSidedLightingChunk::create());
osgChunkMaterial->addChunk(polygonChunk);
if(pointSize > 1.0f)
{
PointChunkPtr pointChunk = PointChunk::create();
pointChunk->setSize(pointSize);
osgChunkMaterial->addChunk(pointChunk);
}
if(lineWidth > 1.0f)
{
LineChunkPtr lineChunk = LineChunk::create();
lineChunk->setWidth(lineWidth);
osgChunkMaterial->addChunk(lineChunk);
}
// TEXTURE
if (hasTexCoords)
{
vtkTexture* vtkTexture = _actor->GetTexture();
if (vtkTexture)
{
TextureChunkPtr osgTextureChunk = NullFC;
osgTextureChunk = CreateTexture(vtkTexture);
if(osgTextureChunk != NullFC)
{
if (_verbose)
std::cout << " Add TextureChunk" << std::endl;
osgChunkMaterial->addChunk(osgTextureChunk);
}
// Per default EnvMode is set to GL_REPLACE which does not lit the surface
beginEditCP(osgTextureChunk);
osgTextureChunk->setEnvMode(GL_MODULATE);
endEditCP(osgTextureChunk);
}
}
} endEditCP(osgChunkMaterial);
if (_verbose)
std::cout << "End CreateMaterial()" << std::endl;
return osgChunkMaterial;
}
示例11: createSceneFBO
FBOViewportPtr createSceneFBO(void)
{
//Create Camera Beacon
Matrix CameraMat;
CameraMat.setTranslate(0.0f,0.0f,4.0f);
TransformPtr CameraBeconCore = Transform::create();
beginEditCP(CameraBeconCore, Transform::MatrixFieldMask);
CameraBeconCore->setMatrix(CameraMat);
endEditCP(CameraBeconCore, Transform::MatrixFieldMask);
NodePtr CameraBeconNode = Node::create();
beginEditCP(CameraBeconNode, Node::CoreFieldMask);
CameraBeconNode->setCore(CameraBeconCore);
endEditCP(CameraBeconNode, Node::CoreFieldMask);
//Create Camera
PerspectiveCameraPtr TheCamera = PerspectiveCamera::create();
beginEditCP(TheCamera);
TheCamera->setFov(deg2rad(60.0f));
TheCamera->setAspect(1.0f);
TheCamera->setNear(0.1f);
TheCamera->setFar(100.0f);
TheCamera->setBeacon(CameraBeconNode);
endEditCP(TheCamera);
//Make the Material
BlinnMaterialPtr TheMaterial = BlinnMaterial::create();
beginEditCP(TheMaterial);
TheMaterial->setDiffuse(0.8);
TheMaterial->setColor(Color3f(1.0,1.0,1.0));
TheMaterial->setAmbientColor(Color3f(1.0,1.0,1.0));
TheMaterial->setNumLights(1);
endEditCP(TheMaterial);
// Make Torus Node (creates Torus in background of scene)
NodePtr TorusGeometryNode = makeTorus(.5, 2, 24, 48);
beginEditCP(TorusGeometryNode->getCore());
GeometryPtr::dcast(TorusGeometryNode->getCore())->setMaterial(TheMaterial);
endEditCP(TorusGeometryNode->getCore());
calcVertexNormals(GeometryPtr::dcast(TorusGeometryNode->getCore()));
calcVertexTangents(GeometryPtr::dcast(TorusGeometryNode->getCore()),0,Geometry::TexCoords7FieldId, Geometry::TexCoords6FieldId);
RootTransformCore = Transform::create();
NodePtr TorusTransformNode = Node::create();
beginEditCP(TorusTransformNode, Node::CoreFieldMask);
TorusTransformNode->setCore(RootTransformCore);
TorusTransformNode->addChild(TorusGeometryNode);
endEditCP(TorusTransformNode, Node::CoreFieldMask);
//Create Light Beacon
Matrix LightMat;
LightMat.setTranslate(0.0f,10.0f,1.0f);
TransformPtr LightBeconCore = Transform::create();
beginEditCP(LightBeconCore, Transform::MatrixFieldMask);
LightBeconCore->setMatrix(LightMat);
endEditCP(LightBeconCore, Transform::MatrixFieldMask);
NodePtr LightBeconNode = Node::create();
beginEditCP(LightBeconNode, Node::CoreFieldMask);
LightBeconNode->setCore(LightBeconCore);
endEditCP(LightBeconNode, Node::CoreFieldMask);
//Create Light
TheLight = PointLight::create();
beginEditCP(TheLight);
TheLight->setBeacon(LightBeconNode);
endEditCP(TheLight);
NodePtr LightNode = Node::create();
beginEditCP(LightNode, Node::CoreFieldMask);
LightNode->setCore(TheLight);
LightNode->addChild(TorusTransformNode);
endEditCP(LightNode, Node::CoreFieldMask);
//Create Root
NodePtr TheRoot = Node::create();
beginEditCP(TheRoot);
TheRoot->setCore(Group::create());
TheRoot->addChild(CameraBeconNode);
TheRoot->addChild(LightNode);
TheRoot->addChild(LightBeconNode);
endEditCP(TheRoot);
//Create Background
SolidBackgroundPtr TheBackground = SolidBackground::create();
TheBackground->setColor(Color3f(1.0,0.0,0.0));
//DepthClearBackgroundPtr TheBackground = DepthClearBackground::create();
//Create the Image
ImagePtr TheColorImage = Image::create();
TheColorImage->set(Image::OSG_RGB_PF,2,2,1,1,1,0.0f,0,Image::OSG_FLOAT16_IMAGEDATA);
//Create the texture
TextureChunkPtr TheColorTextureChunk = TextureChunk::create();
//.........这里部分代码省略.........
示例12: getMaterials
void CharacterModel::convertMaterials(std::string configfile)
{
getMaterials().clear();
UInt32 mcnt = 0;
PathHandler ph;
ph.setBaseFile(configfile.c_str());
for(int mid = 0; mid < _coreModel->getCoreMaterialCount(); mid++)
{
CalCoreMaterial *coremat = _coreModel->getCoreMaterial(mid);
SimpleMaterialPtr mat = SimpleMaterial::create();
beginEditCP(mat);
CalCoreMaterial::Color &calamb = coremat->getAmbientColor();
CalCoreMaterial::Color &caldif = coremat->getDiffuseColor();
CalCoreMaterial::Color &calspec = coremat->getSpecularColor();
mat->setAmbient(Color3f(calamb.red / 255.0f, calamb.green / 255.0f, calamb.blue / 255.0f));
mat->setDiffuse(Color3f(caldif.red / 255.0f, caldif.green / 255.0f, caldif.blue / 255.0f));
mat->setSpecular(Color3f(calspec.red / 255.0f, calspec.green / 255.0f, calspec.blue / 255.0f));
mat->setShininess(coremat->getShininess() * 100.f);
mat->setLit(true);
mat->setColorMaterial(GL_NONE);
for(int mapId = 0; mapId < coremat->getMapCount(); mapId++)
{
std::string file = coremat->getMapFilename(mapId);
std::string pfile = ph.findFile(file.c_str());
SINFO << "Loading texture '" << pfile << "'..." << endLog;
ImagePtr img = Image::create();
if(!img->read(pfile.c_str()))
{
SWARNING << "CharacterModel::convertMaterials: error "
<< "loading image " << file << endLog;
}
else
{
// amz with my test scene paladin.cfg all textures were
// upside down so I disabled the vertical flipping perhaps
// they fixed the bug in Cal3D?
#if 0
beginEditCP(img);
{
// For some reason Cal3D expects textures upside down ???
UInt32 bpl = img->getBpp() * img->getWidth();
UChar8 *t = img->getData(),
*b = t + (img->getHeight() - 1) * bpl,
dum;
for(UInt32 y = img->getHeight() / 2; y > 0; --y)
{
for(UInt32 x = bpl; x > 0; --x, ++t, ++b)
{
dum = *t;
*t = *b;
*b = dum;
}
b -= bpl * 2;
}
}
endEditCP(img);
#endif
TextureChunkPtr tex = TextureChunk::create();
beginEditCP(tex);
tex->setImage(img);
tex->setEnvMode(GL_MODULATE);
endEditCP(tex);
mat->addChunk(tex);
}
}
endEditCP(mat);
coremat->setUserData((Cal::UserData)mcnt);
getMaterials().push_back(mat);
mcnt ++;
}
}
示例13: main
// Initialize GLUT & OpenSG and set up the scene
int main(int argc, char **argv)
{
// OSG init
osgInit(argc,argv);
// Set up Window
TutorialWindowEventProducer = createDefaultWindowEventProducer();
WindowPtr MainWindow = TutorialWindowEventProducer->initWindow();
TutorialWindowEventProducer->setDisplayCallback(display);
TutorialWindowEventProducer->setReshapeCallback(reshape);
//Add Window Listener
TutorialKeyListener TheKeyListener;
TutorialWindowEventProducer->addKeyListener(&TheKeyListener);
TutorialMouseListener TheTutorialMouseListener;
TutorialMouseMotionListener TheTutorialMouseMotionListener;
TutorialWindowEventProducer->addMouseListener(&TheTutorialMouseListener);
TutorialWindowEventProducer->addMouseMotionListener(&TheTutorialMouseMotionListener);
// Create the SimpleSceneManager helper
mgr = new SimpleSceneManager;
// Tell the Manager what to manage
mgr->setWindow(TutorialWindowEventProducer->getWindow());
//Make a SphereNode for the point light
LambertMaterialPtr TheLightMat = LambertMaterial::create();
beginEditCP(TheLightMat, LambertMaterial::IncandescenceFieldMask);
TheLightMat->setIncandescence(Color3f(1.0,1.0,1.0));
endEditCP(TheLightMat, LambertMaterial::IncandescenceFieldMask);
GeometryPtr LightSphereGeo = makeSphereGeo(2,2.0);
beginEditCP(LightSphereGeo, Geometry::MaterialFieldMask);
LightSphereGeo->setMaterial(TheLightMat);
endEditCP (LightSphereGeo, Geometry::MaterialFieldMask);
NodePtr LightSphereNode = Node::create();
beginEditCP(LightSphereNode, Node::CoreFieldMask);
LightSphereNode->setCore(LightSphereGeo);
endEditCP (LightSphereNode, Node::CoreFieldMask);
//Create the beacon for the Point Light
Matrix ThePointLightMat;
ThePointLightMat.setTranslate(Vec3f(0.0,100.0,0.0));
ThePointLightBeaconTransform = Transform::create();
beginEditCP(ThePointLightBeaconTransform);
ThePointLightBeaconTransform->setMatrix(ThePointLightMat);
endEditCP(ThePointLightBeaconTransform);
NodePtr ThePointLightBeaconNode = Node::create();
beginEditCP(ThePointLightBeaconNode);
ThePointLightBeaconNode->setCore(ThePointLightBeaconTransform);
ThePointLightBeaconNode->addChild(LightSphereNode);
endEditCP(ThePointLightBeaconNode);
//Set the light properties desired
PointLightPtr ThePointLight = PointLight::create();
beginEditCP(ThePointLight);
ThePointLight->setAmbient(0.3,0.3,0.3,0.3);
ThePointLight->setDiffuse(1.0,1.0,1.0,1.0);
ThePointLight->setSpecular(1.0,1.0,1.0,1.0);
ThePointLight->setBeacon(ThePointLightBeaconNode);
endEditCP(ThePointLight);
NodePtr ThePointLightNode = Node::create();
beginEditCP(ThePointLightNode);
ThePointLightNode->setCore(ThePointLight);
endEditCP(ThePointLightNode);
//Set the light properties desired
SpotLightPtr TheSpotLight = SpotLight::create();
beginEditCP(TheSpotLight);
TheSpotLight->setAmbient(0.3,0.3,0.3,0.3);
TheSpotLight->setDiffuse(1.0,1.0,1.0,1.0);
TheSpotLight->setSpecular(1.0,1.0,1.0,1.0);
TheSpotLight->setBeacon(ThePointLightBeaconNode);
TheSpotLight->setDirection(Vec3f(0.0,-1.0,0.0));
TheSpotLight->setSpotExponent(5.0);
TheSpotLight->setSpotCutOff(1.1);
endEditCP(TheSpotLight);
NodePtr TheSpotLightNode = Node::create();
beginEditCP(TheSpotLightNode);
TheSpotLightNode->setCore(TheSpotLight);
endEditCP(TheSpotLightNode);
//Load in the Heightmap Image
ImagePtr PerlinNoiseImage = createPerlinImage(Vec2s(256,256), Vec2f(10.0f,10.0f),0.5f,1.0f,Vec2f(0.0f,0.0f),0.25f,6,PERLIN_INTERPOLATE_COSINE,false,Image::OSG_L_PF, Image::OSG_UINT8_IMAGEDATA);
TextureChunkPtr TheTextureChunk = TextureChunk::create();
beginEditCP(TheTextureChunk);
TheTextureChunk->setImage(PerlinNoiseImage);
endEditCP(TheTextureChunk);
//Lambert Material
LambertMaterialPtr TheLambertMat = LambertMaterial::create();
//.........这里部分代码省略.........
示例14: glutGet
void
display(void)
{
float t = glutGet( GLUT_ELAPSED_TIME );
win->frameInit();
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
Matrix m;
Quaternion q;
q.setValueAsAxisDeg( 0,1,0, -t/20 );
m.setRotate( q );
tchunk1->setMatrix( m );
tchunk1->activate( dact );
mchunk1->activate( dact );
glCallList( dlid );
m.setIdentity();
m.setTranslate( cos(t/1000), 0, sin(t/1000) );
tchunk2->setMatrix( m );
tchunk2->changeFrom( dact, get_pointer(tchunk1));
mchunk2->changeFrom( dact, get_pointer(mchunk1));
blchunk->activate( dact );
blchunk->activate( dact );
cchunk1->activate( dact );
gchunk1->activate( dact );
glCallList( dlid );
tchunk2->deactivate( dact );
mchunk2->deactivate( dact );
blchunk->deactivate( dact );
cchunk1->deactivate( dact );
gchunk1->deactivate( dact );
xchunk1->activate( dact );
txchunk->activate( dact );
glCallList( dlid2 );
xchunk1->deactivate( dact );
txchunk->deactivate( dact );
win->frameExit();
glutSwapBuffers();
}
示例15: key
void key(unsigned char key, int , int)
{
switch ( key )
{
case 27: exit(0);
case 'a': UChar8 imgdata[32];
for ( int i = 0; i < 32; i++ )
imgdata[i] = static_cast<UChar8>(rand());
pImage->set( Image::OSG_RGB_PF, 2, 2, 2, 1, 1, 0, imgdata );
xchunk1->imageContentChanged();
break;
case 'b': {
UChar8 imgdata[16];
for ( int i = 0; i < 16; i++ )
imgdata[i] = static_cast<UChar8>(rand());
pImage->set( Image::OSG_RGBA_PF, 2, 2, 1, 1, 1, 0, imgdata );
beginEditCP( xchunk1 );
xchunk1->setImage( pImage );
endEditCP( xchunk1 );
}
break;
case 'c': {
beginEditCP( xchunk1 );
xchunk1->setMinFilter( GL_LINEAR_MIPMAP_LINEAR );
xchunk1->setMagFilter( GL_LINEAR );
endEditCP( xchunk1 );
}
break;
case 'd': {
beginEditCP( xchunk1 );
xchunk1->setMinFilter( GL_NEAREST );
xchunk1->setMagFilter( GL_NEAREST );
endEditCP( xchunk1 );
}
break;
case 'e': {
UChar8 imgdata[16];
for ( int i = 0; i < 16; i++ )
imgdata[i] = static_cast<UChar8>(rand());
pImage->set( Image::OSG_RGBA_PF, 2, 2, 1, 1, 1, 0, imgdata );
xchunk1->imageContentChanged(1,1,1,1);
}
break;
case 'f': {
UChar8 imgdata[16];
for ( int i = 0; i < 16; i++ )
imgdata[i] = static_cast<UChar8>(rand());
pImage->set( Image::OSG_RGBA_PF, 2, 2, 1, 1, 1, 0, imgdata );
xchunk1->imageContentChanged(0,1,0,0);
}
break;
}
}