osgToy::OctoStrip::OctoStrip() { osg::Vec3Array* vAry = dynamic_cast<osg::Vec3Array*>( getVertexArray() ); osg::Vec3Array* nAry = dynamic_cast<osg::Vec3Array*>( getNormalArray() ); setNormalBinding( osg::Geometry::BIND_PER_VERTEX ); osg::Vec4Array* cAry = dynamic_cast<osg::Vec4Array*>( getColorArray() ); setColorBinding( osg::Geometry::BIND_PER_VERTEX ); osg::Vec3 xp( 1, 0, 0); osg::Vec4 red(1,0,0,1); osg::Vec3 xn(-1, 0, 0); osg::Vec4 cyan(0,1,1,1); osg::Vec3 yp( 0, 1, 0); osg::Vec4 green(0,1,0,1); osg::Vec3 yn( 0,-1, 0); osg::Vec4 magenta(1,0,1,1); osg::Vec3 zp( 0, 0, 1); osg::Vec4 blue(0,0,1,1); osg::Vec3 zn( 0, 0,-1); osg::Vec4 yellow(1,1,0,1); vAry->push_back(zp); nAry->push_back(zp); cAry->push_back(blue); vAry->push_back(yp); nAry->push_back(yp); cAry->push_back(green); vAry->push_back(xn); nAry->push_back(xn); cAry->push_back(cyan); vAry->push_back(zn); nAry->push_back(zn); cAry->push_back(yellow); vAry->push_back(yn); nAry->push_back(yn); cAry->push_back(magenta); vAry->push_back(xp); nAry->push_back(xp); cAry->push_back(red); vAry->push_back(zp); nAry->push_back(zp); cAry->push_back(blue); vAry->push_back(yp); nAry->push_back(yp); cAry->push_back(green); addPrimitiveSet( new osg::DrawArrays( GL_TRIANGLE_STRIP, 0, vAry->size() ) ); }
Widget::Widget(const std::string& name, point_type w, point_type h): _parent (0), _index (0), _layer (LAYER_LOW), _padLeft (0.0f), _padRight (0.0f), _padTop (0.0f), _padBottom (0.0f), _valign (VA_CENTER), _halign (HA_CENTER), _coordMode (CM_ABSOLUTE), _canFill (false), _canClone (true), _isManaged (false), _isStyled (false), _minWidth (0.0f), _minHeight (0.0f) { _name = name.size() ? name : generateRandomName("Widget"); if(!_norms.valid()) { _norms = new PointArray(1); (*_norms)[0].set(0.0f, 0.0f, 1.0f); (*_norms)[0].normalize(); } TexCoordArray* texs = new TexCoordArray(4); // Fill our texture coordinates with null stuff for now, since we aren't using them // until an Image is set at some later point. std::fill(texs->begin(), texs->end(), osg::Vec2(0.0f, 0.0f)); setUseDisplayList(false); setDataVariance(osg::Object::DYNAMIC); setVertexArray(new PointArray(4)); setColorArray(new ColorArray(4)); setNormalArray(_norms.get()); setTexCoordArray(0, texs); setNormalBinding(osg::Geometry::BIND_OVERALL); setColorBinding(osg::Geometry::BIND_PER_VERTEX); addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, 4)); setDimensions(0.0f, 0.0f, w, h); setColor(1.0f, 1.0f, 1.0f, 1.0f); }
osgToy::ColorOriginTetra::ColorOriginTetra() { osg::Vec3 o(0,0,0); osg::Vec3 x(1,0,0); osg::Vec3 y(0,1,0); osg::Vec3 z(0,0,1); addTriangle( o, y, x ); addTriangle( o, z, y ); addTriangle( o, x, z ); addTriangle( x, y, z ); setNormalBinding( osg::Geometry::BIND_PER_PRIMITIVE ); setColorBinding( osg::Geometry::BIND_PER_VERTEX ); osg::Vec3Array* vAry = dynamic_cast<osg::Vec3Array*>( getVertexArray() ); addPrimitiveSet( new osg::DrawArrays( GL_TRIANGLES, 0, vAry->size() ) ); }
osgToy::TetraStrip::TetraStrip() { osg::Vec3Array* vAry = dynamic_cast<osg::Vec3Array*>( getVertexArray() ); osg::Vec3Array* nAry = dynamic_cast<osg::Vec3Array*>( getNormalArray() ); setNormalBinding( osg::Geometry::BIND_PER_VERTEX ); osg::Vec4Array* cAry = dynamic_cast<osg::Vec4Array*>( getColorArray() ); setColorBinding( osg::Geometry::BIND_PER_VERTEX ); osg::Vec3 ppp( 1, 1, 1); osg::Vec4 white(1,1,1,1); osg::Vec3 nnp( -1, -1, 1); osg::Vec4 blue(0,0,1,1); osg::Vec3 pnn( 1, -1, -1); osg::Vec4 red(1,0,0,1); osg::Vec3 npn( -1, 1, -1); osg::Vec4 green(0,1,0,1); osg::Vec3 ppn( 1, 1, -1); osg::Vec4 yellow(1,1,0,1); osg::Vec3 pnp( 1, -1, 1); osg::Vec4 magenta(1,0,1,1); osg::Vec3 nnn( -1, -1, -1); osg::Vec4 black(0,0,0,1); osg::Vec3 npp( -1, 1, 1); osg::Vec4 cyan(0,1,1,1); #if 1 vAry->push_back(ppp); nAry->push_back(ppp); cAry->push_back(white); vAry->push_back(nnp); nAry->push_back(nnp); cAry->push_back(blue); vAry->push_back(pnn); nAry->push_back(pnn); cAry->push_back(red); vAry->push_back(npn); nAry->push_back(npn); cAry->push_back(green); vAry->push_back(ppp); nAry->push_back(ppp); cAry->push_back(white); vAry->push_back(nnp); nAry->push_back(nnp); cAry->push_back(blue); #else vAry->push_back(ppn); nAry->push_back(ppn); cAry->push_back(yellow); vAry->push_back(pnp); nAry->push_back(pnp); cAry->push_back(magenta); vAry->push_back(nnn); nAry->push_back(nnn); cAry->push_back(black); vAry->push_back(npp); nAry->push_back(npp); cAry->push_back(cyan); vAry->push_back(ppn); nAry->push_back(ppn); cAry->push_back(yellow); vAry->push_back(pnp); nAry->push_back(pnp); cAry->push_back(magenta); #endif addPrimitiveSet( new osg::DrawArrays( GL_TRIANGLE_STRIP, 0, vAry->size() ) ); }
/** * @todo Minimize VertexIndex.size() => use QUADS_STRIP */ void Box::initializeGeometry() { // Initialize geometry. // VERTEX vgd::field::EditorRW< vgd::field::MFVec3f > vertex = getVertexRW(); const float fSize= 0.5f; vertex->clear(); vertex->reserve( 24 ); // front vertex->push_back( vgm::Vec3f(-fSize, -fSize, fSize) ); vertex->push_back( vgm::Vec3f(fSize, -fSize, fSize) ); vertex->push_back( vgm::Vec3f(fSize, fSize, fSize) ); vertex->push_back( vgm::Vec3f(-fSize, fSize, fSize) ); // back vertex->push_back( vgm::Vec3f(-fSize, -fSize, -fSize) ); vertex->push_back( vgm::Vec3f(fSize, -fSize, -fSize) ); vertex->push_back( vgm::Vec3f(fSize, fSize, -fSize) ); vertex->push_back( vgm::Vec3f(-fSize, fSize, -fSize) ); // right vertex->push_back( vgm::Vec3f(fSize, -fSize, fSize) ); vertex->push_back( vgm::Vec3f(fSize, -fSize, -fSize) ); vertex->push_back( vgm::Vec3f(fSize, fSize, -fSize) ); vertex->push_back( vgm::Vec3f(fSize, fSize, fSize) ); // left vertex->push_back( vgm::Vec3f(-fSize, -fSize, fSize) ); vertex->push_back( vgm::Vec3f(-fSize, -fSize, -fSize) ); vertex->push_back( vgm::Vec3f(-fSize, fSize, -fSize) ); vertex->push_back( vgm::Vec3f(-fSize, fSize, fSize) ); // up vertex->push_back( vgm::Vec3f(fSize, fSize, fSize) ); vertex->push_back( vgm::Vec3f(fSize, fSize, -fSize) ); vertex->push_back( vgm::Vec3f(-fSize, fSize, -fSize) ); vertex->push_back( vgm::Vec3f(-fSize, fSize, fSize) ); // down vertex->push_back( vgm::Vec3f(fSize, -fSize, fSize) ); vertex->push_back( vgm::Vec3f(fSize, -fSize, -fSize) ); vertex->push_back( vgm::Vec3f(-fSize, -fSize, -fSize) ); vertex->push_back( vgm::Vec3f(-fSize, -fSize, fSize) ); // VERTEX INDEX vgd::field::EditorRW< vgd::field::MFUInt > vertexIndex = getVertexIndexRW(); vertexIndex->clear(); vertexIndex->reserve( 24 ); // front vertexIndex->push_back(0); vertexIndex->push_back(1); vertexIndex->push_back(2); vertexIndex->push_back(3); // back vertexIndex->push_back(4); vertexIndex->push_back(5); vertexIndex->push_back(6); vertexIndex->push_back(7); // right vertexIndex->push_back(8); vertexIndex->push_back(9); vertexIndex->push_back(10); vertexIndex->push_back(11); // left vertexIndex->push_back(12); vertexIndex->push_back(13); vertexIndex->push_back(14); vertexIndex->push_back(15); // up vertexIndex->push_back(16); vertexIndex->push_back(17); vertexIndex->push_back(18); vertexIndex->push_back(19); // down vertexIndex->push_back(20); vertexIndex->push_back(21); vertexIndex->push_back(22); vertexIndex->push_back(23); // PRIMITIVE vgd::field::EditorRW< vgd::field::MFPrimitive > primitive = getPrimitiveRW(); vgd::node::Primitive prim( vgd::node::Primitive::QUADS, 0, vertexIndex->size() ); primitive->clear(); primitive->push_back( prim ); vertex.release(); vertexIndex.release(); primitive.release(); // NORMAL vgd::field::EditorRW< vgd::field::MFVec3f > normal = getNormalRW(); normal->clear(); normal->reserve(24); // front normal->push_back( vgm::Vec3f(0.f, 0.f, 1.f ) ); normal->push_back( vgm::Vec3f(0.f, 0.f, 1.f ) ); normal->push_back( vgm::Vec3f(0.f, 0.f, 1.f ) ); normal->push_back( vgm::Vec3f(0.f, 0.f, 1.f ) ); // back normal->push_back( vgm::Vec3f(0.f, 0.f, -1.f ) ); normal->push_back( vgm::Vec3f(0.f, 0.f, -1.f ) ); normal->push_back( vgm::Vec3f(0.f, 0.f, -1.f ) ); normal->push_back( vgm::Vec3f(0.f, 0.f, -1.f ) ); // right normal->push_back( vgm::Vec3f(1.f, 0.f, 0.f ) ); normal->push_back( vgm::Vec3f(1.f, 0.f, 0.f ) ); normal->push_back( vgm::Vec3f(1.f, 0.f, 0.f ) ); normal->push_back( vgm::Vec3f(1.f, 0.f, 0.f ) ); // left normal->push_back( vgm::Vec3f(-1.f, 0.f, 0.f ) ); normal->push_back( vgm::Vec3f(-1.f, 0.f, 0.f ) ); normal->push_back( vgm::Vec3f(-1.f, 0.f, 0.f ) ); normal->push_back( vgm::Vec3f(-1.f, 0.f, 0.f ) ); // up normal->push_back( vgm::Vec3f(0.f, 1.f, 0.f ) ); normal->push_back( vgm::Vec3f(0.f, 1.f, 0.f ) ); normal->push_back( vgm::Vec3f(0.f, 1.f, 0.f ) ); normal->push_back( vgm::Vec3f(0.f, 1.f, 0.f ) ); //down normal->push_back( vgm::Vec3f(0.f, -1.f, 0.f ) ); normal->push_back( vgm::Vec3f(0.f, -1.f, 0.f ) ); normal->push_back( vgm::Vec3f(0.f, -1.f, 0.f ) ); normal->push_back( vgm::Vec3f(0.f, -1.f, 0.f ) ); setNormalBinding( vgd::node::BIND_PER_VERTEX ); }