本文整理汇总了C++中GeoPositions3fPtr::editFieldPtr方法的典型用法代码示例。如果您正苦于以下问题:C++ GeoPositions3fPtr::editFieldPtr方法的具体用法?C++ GeoPositions3fPtr::editFieldPtr怎么用?C++ GeoPositions3fPtr::editFieldPtr使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GeoPositions3fPtr
的用法示例。
在下文中一共展示了GeoPositions3fPtr::editFieldPtr方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: idle
// move the particles
void idle(void)
{
if(doMotion)
{
beginEditCP(pnts);
beginEditCP(secpnts);
MFPnt3f *p=pnts->editFieldPtr();
MFPnt3f *sp=secpnts->editFieldPtr();
for(UInt32 i=0; i<p->size(); ++i)
{
Pnt3f pos=(*p)[i];
pos+=velocities[i];
if(pos[0]<0 || pos[0]>1)
{
pos[0]-=velocities[i][0];
velocities[i][0]=-velocities[i][0];
}
if(pos[1]<0 || pos[1]>1)
{
pos[1]-=velocities[i][1];
velocities[i][1]=-velocities[i][1];
}
if(pos[2]<0 || pos[2]>1)
{
pos[2]-=velocities[i][2];
velocities[i][2]=-velocities[i][2];
}
(*sp)[i] = pos;
}
endEditCP(pnts);
endEditCP(secpnts);
beginEditCP(particles,
Particles::PositionsFieldMask|Particles::SecPositionsFieldMask);
particles->setPositions(secpnts);
particles->setSecPositions(pnts);
endEditCP (particles,
Particles::PositionsFieldMask|Particles::SecPositionsFieldMask);
std::swap(pnts,secpnts);
}
if(doIndices)
{
beginEditCP(particles, Particles::IndicesFieldMask);
indices->resize(pnts->getSize() / 2);
for(UInt32 i = 0; i < pnts->getSize() / 2; ++i)
{
(*indices)[i] = static_cast<UInt32>(osgrand() * 2 - 1) * pnts->getSize();
}
endEditCP (particles, Particles::IndicesFieldMask);
}
glutPostRedisplay();
}
示例2: main
int main(int argc, char **argv)
{
// enableFPE();
#ifdef __sgi
signal(SIGSEGV, (void (*)(int))sighand);
signal(SIGTRAP, (void (*)(int))sighand);
signal(SIGBUS, (void (*)(int))sighand);
#endif
// OSG init
osgInit(argc,argv);
if (argc > 1 && ! strcmp(argv[1],"-bench"))
{
runBench = true;
argc--;
argv++;
glutInitWindowPosition(0,0);
glutInitWindowSize(600,600);
}
if (argc > 1 && ! strcmp(argv[1],"-test"))
{
testSet = true;
doMotion = false;
argc--;
argv++;
}
// GLUT init
int winid = setupGLUT(&argc, argv);
// the connection between GLUT and OpenSG
GLUTWindowPtr gwin= GLUTWindow::create();
gwin->setId(winid);
gwin->init();
// create the scene
NodePtr scene = Node::create();
NodePtr pnode = Node::create();
ComponentTransformPtr trans = ComponentTransform::create();
beginEditCP(scene);
scene->setCore(trans);
scene->addChild(pnode);
endEditCP(scene);
beginEditCP(trans);
trans->setTranslation(Vec3f(2,0,0));
trans->setRotation(Quaternion(Vec3f(0,1,0),Pi/2));
trans->setScale(Vec3f(2,2,2));
endEditCP(trans);
particles = Particles::create();
beginEditCP(pnode);
pnode->setCore(particles);
endEditCP(pnode);
numParticles = 100;
if (argc > 1)
{
numParticles=atoi(argv[1]);
}
beginEditCP(particles);
pnts=GeoPositions3f::create();
secpnts=GeoPositions3f::create();
addRefCP(pnts);
addRefCP(secpnts);
GeoColors3fPtr cols = GeoColors3f::create();
GeoNormals3fPtr norms = GeoNormals3f::create();
MFPnt3f* p=pnts->editFieldPtr();
MFPnt3f* sp=secpnts->editFieldPtr();
MFVec3f *size=particles->editMFSizes();
indices = particles->editMFIndices();
velocities=new Vec3f [numParticles];
beginEditCP(pnts);
beginEditCP(secpnts);
beginEditCP(cols);
if(!testSet)
{
for(UInt32 i=0; i < numParticles; ++i)
{
Pnt3f pnt(osgrand(),osgrand(),osgrand());
indices->push_back(i);
p->push_back(pnt);
sp->push_back(pnt);
velocities[i].setValues(osgrand()/30.f/2, osgrand()/30.f/2, osgrand()/30.f/2);
cols->editFieldPtr()->push_back(
Color3f(osgrand()/2.f + .5f,osgrand()/2.f + .5f,osgrand()/2.f + .5f) );
//.........这里部分代码省略.........