Example #1
0
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() ) );
}
Example #2
0
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);
}
Example #3
0
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() ) );
}
Example #4
0
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() ) );
}
Example #5
0
/**
 * @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 );
}