Пример #1
0
osg::Vec4 ConfigManager::getVec4(std::string attributeX, std::string attributeY,
        std::string attributeZ, std::string attributeW, std::string path,
        osg::Vec4 def, bool * found)
{
    bool hasEntry = false;
    bool isFound;

    osg::Vec4 result;
    result.x() = getFloat(attributeX,path,def.x(),&isFound);
    if(isFound)
    {
        hasEntry = true;
    }
    result.y() = getFloat(attributeY,path,def.y(),&isFound);
    if(isFound)
    {
        hasEntry = true;
    }
    result.z() = getFloat(attributeZ,path,def.z(),&isFound);
    if(isFound)
    {
        hasEntry = true;
    }
    result.w() = getFloat(attributeW,path,def.w(),&isFound);
    if(isFound)
    {
        hasEntry = true;
    }

    if(found)
    {
        *found = hasEntry;
    }
    return result;
}
    // rasterizes a geometry to color
    void rasterize(const Geometry* geometry, const osg::Vec4& color, RenderFrame& frame, 
                   agg::rasterizer& ras, agg::rendering_buffer& buffer)
    {
        unsigned a = (unsigned)(127.0f+(color.a()*255.0f)/2.0f); // scale alpha up
        agg::rgba8 fgColor = agg::rgba8( (unsigned)(color.r()*255.0f), (unsigned)(color.g()*255.0f), (unsigned)(color.b()*255.0f), a );
        
        ConstGeometryIterator gi( geometry );
        while( gi.hasMore() )
        {
            const Geometry* g = gi.next();

            for( Geometry::const_iterator p = g->begin(); p != g->end(); p++ )
            {
                const osg::Vec3d& p0 = *p;
                double x0 = frame.xf*(p0.x()-frame.xmin);
                double y0 = frame.yf*(p0.y()-frame.ymin);

                if ( p == g->begin() )
                    ras.move_to_d( x0, y0 );
                else
                    ras.line_to_d( x0, y0 );
            }
        }
        agg::renderer<agg::span_abgr32, agg::rgba8> ren(buffer);
        ras.render(ren, fgColor);

        ras.reset();
    }
Пример #3
0
void ConicSectionPlugin::drawPlane(osg::Vec4 eq)
{
    //if (showClipplane_->getState())
    //{
    //helper plane
    Vec3 normal = Vec3(eq.x(), eq.y(), eq.z());
    normal.normalize();
    Vec3 point = normal * -eq.w();
    point = point + normal * 0.003;
    helperPlane_->update(normal, point);
    Vec3 intersect[6];
    osg::BoundingBox bboxCompl = cover->getBBox(Cone_.get());
    int numIntersect = helperPlane_->getBoxIntersectionPoints(bboxCompl, intersect);

    if (numIntersect > 0)
    {
        for (int i = 0; i < numIntersect; i++)
        {
            (*polyCoords_)[i] = intersect[i];
        }
        for (int i = numIntersect; i < 6; i++)
        {

            (*polyCoords_)[i] = (*polyCoords_)[numIntersect - 1];
        }
    }

    (*polyNormal_)[0].set(normal[0], normal[1], normal[2]);

    plane_->dirtyBound();
    //}
}
Пример #4
0
	virtual void apply(osg::Geode& geode)
	{
		for (unsigned i=0; i<geode.getNumDrawables(); ++i)
		{
			osg::Geometry *geo = dynamic_cast<osg::Geometry *>(geode.getDrawable(i));
			if (!geo) continue;

			osg::StateSet *stateset = geo->getStateSet();
			if (!stateset) continue;

			osg::StateAttribute *state = stateset->getAttribute(osg::StateAttribute::MATERIAL);
			if (!state) continue;

			osg::Material *mat = dynamic_cast<osg::Material *>(state);
			if (!mat) continue;

			const osg::Vec4 v4 = mat->getDiffuse(FAB);
			if (v4.r() == 1.0f && v4.g() == 0.0f && v4.b() == 1.0f)
			{
				//VTLOG("oldmat rc %d, ", mat->referenceCount());

				osg::Material *newmat = (osg::Material *)mat->clone(osg::CopyOp::DEEP_COPY_ALL);
				newmat->setDiffuse(FAB, osg::Vec4(c.r*2/3,c.g*2/3,c.b*2/3,1));
				newmat->setAmbient(FAB, osg::Vec4(c.r*1/3,c.g*1/3,c.b*1/3,1));

				//VTLOG("newmat rc %d\n", newmat->referenceCount());

				stateset->setAttribute(newmat);
				//VTLOG(" -> %d %d\n", mat->referenceCount(), newmat->referenceCount());
			}
		}
		osg::NodeVisitor::apply(geode);
	}
void DataOutputStream::writeVec4(const osg::Vec4& v){
    writeFloat(v.x());
    writeFloat(v.y());
    writeFloat(v.z());
    writeFloat(v.w());

    if (_verboseOutput) std::cout<<"read/writeVec4() ["<<v<<"]"<<std::endl;
}
Пример #6
0
bool HeightFieldLayer::getValue(unsigned int i, unsigned int j, osg::Vec4& value) const
{
    value.x() = _heightField->getHeight(i,j);
    value.y() = _defaultValue.y();
    value.z() = _defaultValue.z();
    value.w() = _defaultValue.w();
    return true;
}
Пример #7
0
QColor OSGTextNode::color() const
{
    const osg::Vec4 osgColor = h->text->getColor();
    return QColor::fromRgbF(
                osgColor.r(),
                osgColor.g(),
                osgColor.b(),
                osgColor.a());
}
Пример #8
0
bool Uniform::getElement( unsigned int index, osg::Vec4& v4 ) const
{
    if( index>=getNumElements() || !isCompatibleType(FLOAT_VEC4) ) return false;
    unsigned int j = index * getTypeNumComponents(getType());
    v4.x() = (*_floatArray)[j];
    v4.y() = (*_floatArray)[j+1];
    v4.z() = (*_floatArray)[j+2];
    v4.w() = (*_floatArray)[j+3];
    return true;
}
Пример #9
0
//
//set the drop shadow color
//
void TextRegion::SetBackDropColor(const osg::Vec4 &color)
{
	_backdropColor.r() = color.r();
	_backdropColor.g() = color.g();
	_backdropColor.b() = color.b();
	_backdropColor.a() = this->GetAlpha()*0.5f;
    
	_text->setBackdropColor(_backdropColor);
    
    _dirtyRenderState = true;
}
Пример #10
0
void OrbitalBodyImposter::updateTint(osg::Vec4 const &color, double flare_alpha) {
	osg::Vec4Array *colors = dynamic_cast<osg::Vec4Array*>(m_CoreImposter->getColorArray());
	assert(colors);
	(*colors)[0] = color;
	m_CoreImposter->dirtyDisplayList();
	if (m_FlareImposter.valid()) {
		osg::Vec4Array *colors = dynamic_cast<osg::Vec4Array*>(m_FlareImposter->getColorArray());
		assert(colors);
		(*colors)[0] = osg::Vec4(color.x(), color.y(), color.z(), flare_alpha);
		m_FlareImposter->dirtyDisplayList();
	}
}
Пример #11
0
void StandardShadowMap::ViewData::aimShadowCastingCamera(
                                        const osg::BoundingSphere &bs,
                                        const osg::Light *light,
                                        const osg::Vec4 &lightPos,
                                        const osg::Vec3 &lightDir,
                                        const osg::Vec3 &lightUpVector
                                        /* by default = osg::Vec3( 0, 1 0 )*/ )
{
    osg::Matrixd & view = _camera->getViewMatrix();
    osg::Matrixd & projection = _camera->getProjectionMatrix();

    osg::Vec3 up = lightUpVector;
    if( up.length2() <= 0 )  up.set( 0,1,0 );

    osg::Vec3d position(lightPos.x(), lightPos.y(), lightPos.z());
    if (lightPos[3]==0.0)   // infinite directional light
    {
        // make an orthographic projection
        // set the position far away along the light direction
        position = bs.center() - lightDir * bs.radius() * 2;
    }

    float centerDistance = (position-bs.center()).length();
    float znear = centerDistance-bs.radius();
    float zfar  = centerDistance+bs.radius();
    float zNearRatio = 0.001f;
    if (znear<zfar*zNearRatio)
        znear = zfar*zNearRatio;

    if ( lightPos[3]!=0.0 ) {  // positional light
        if( light->getSpotCutoff() < 180.0f) // also needs znear zfar estimates
        {
            float spotAngle = light->getSpotCutoff();
            projection.makePerspective( spotAngle * 2, 1.0, znear, zfar);
            view.makeLookAt(position,position+lightDir,up);
        } else { // standard omnidirectional positional light
            float top   = (bs.radius()/centerDistance)*znear;
            float right = top;

            projection.makeFrustum(-right,right,-top,top,znear,zfar);
            view.makeLookAt(position,bs.center(),up );
        }
    }
    else    // directional light
    {
            float top   = bs.radius();
            float right = top;
            projection.makeOrtho(-right, right, -top, top, znear, zfar);
            view.makeLookAt(position,bs.center(),up);
    }
}
Пример #12
0
void DebugShadowMap::ViewData::setDebugPolytope
    ( const char * name, const ConvexPolyhedron & polytope, 
      osg::Vec4 colorOutline, osg::Vec4 colorInside )
{
    if( !getDebugDraw() ) return;

    if( &polytope == NULL ) { // delete        
        PolytopeGeometry & pg = _polytopeGeometryMap[ std::string( name ) ];
        for( unsigned int i = 0; i < VECTOR_LENGTH( pg._geometry ) ; i++ )
        {
            if( pg._geometry[i].valid() ) {
                if( _geode[i].valid() &&
                    _geode[i]->containsDrawable( pg._geometry[i].get() ) )
                        _geode[i]->removeDrawable( pg._geometry[i].get() );

                pg._geometry[i] = NULL;
            }
        }
        _polytopeGeometryMap.erase( std::string( name ) );
    } else { // update
        PolytopeGeometry & pg = _polytopeGeometryMap[ std::string( name ) ];

        pg._polytope = polytope;
        if( colorOutline.a() > 0 )
            pg._colorOutline = colorOutline;
        if( colorInside.a() > 0 )
            pg._colorInside = colorInside;

        for( unsigned int i = 0; i < VECTOR_LENGTH( pg._geometry ) ; i++ )
        {
            if( !pg._geometry[i].valid() ) {
                pg._geometry[i] = new osg::Geometry;
                pg._geometry[i]->setDataVariance( osg::Object::DYNAMIC );
                pg._geometry[i]->setUseDisplayList( false );
                pg._geometry[i]->setSupportsDisplayList( false );
            }

            if( _geode[i].valid() && 
                  !_geode[i]->containsDrawable( pg._geometry[i].get() ) ) {
                        osg::Geode::DrawableList & dl = 
                           const_cast< osg::Geode::DrawableList &>
                              ( _geode[i]->getDrawableList() );
                        dl.insert( dl.begin(), pg._geometry[i].get() );
            }            
        }       
    }
}
void Light::setPosition(const osg::Vec4 &position)
{
    _lightSource->getLight()->setPosition(position);
    if(position.w() == 0.0f)
        _isDirectional = true;
    else
        _isDirectional = false;
    updateViewableObject();
    refresh();
}
Пример #14
0
osg::Vec2 calcCoordReprojTrans(const osg::Vec3 &vert,const osg::Matrix &trans,const osg::Matrix &viewProj,const osg::Vec2 &size,const osg::Vec4 &ratio){
    osg::Vec4 v(vert.x(),vert.y(),vert.z(),1.0);
    v=v*trans;
    v=v*viewProj;
    v.x() /= v.w();
    v.y() /= v.w();
    v.z() /= v.w();
    v.w() /= v.w();
    //std::cout << "Pre shift " << v << std::endl;
    v.x() /= size.x();;
    v.y() /= size.y();


    v.x() -= (ratio.x()/size.x());
    v.y() -= (ratio.y()/size.y());
    //std::cout << "Post shift " << v << std::endl;


    //  std::cout << "PP shift " << v << std::endl;


    osg::Vec2 tc(v.x(),v.y());
    tc.x() *= ratio.z();
    tc.y() *=ratio.w();
    //tc.x()*=ratio.x();
    //tc.y()*=ratio.y();
    tc.x()/=(ratio.z());
    tc.y()/=(ratio.w());


    return tc;

}
Пример #15
0
//
//Set the color of the text
//
void TextRegion::SetTextColor(const osg::Vec4& color)
{
	_textColor.r() = color.x();
	_textColor.g() = color.y();
	_textColor.b() = color.z();
    _textColor.a() = this->GetAlpha();
	_text->setColor(_textColor);

    this->SetColor(osg::Vec3(color.x(),color.y(),color.z()));
    
    _dirtyRenderState = true;
}
Пример #16
0
btVector4
osgbCollision::asBtVector4( const osg::Vec4& v )
{
    return btVector4( v.x(), v.y(), v.z(), v.w() );
}
Пример #17
0
void Hsv::getHSVA(osg::Vec4& hhh) const
{
    hhh.set(hsv[HUE],hsv[SATURATION],hsv[VALUE],hsv[ALPHA]);
}
Пример #18
0
 bool operator()( const osg::Vec4& in, osg::Vec4& out ) {
     out = in;
     out.a() = 0.3333*(in.r() + in.g() + in.b());
     return true;
 }
Пример #19
0
/**
  * Calculate what the section is and return as string
  */
std::string ConicSectionPlugin::calculateSection(osg::Vec4 eq)
{
    double a, b, h;
    if (!isNull(eq.z()))
    {
        double z2 = eq.z() * eq.z();
        a = 1 - (eq.x() * eq.x() / z2);
        b = 1 - (eq.y() * eq.y() / z2);
        h = eq.x() * eq.y() / z2;
    }
    else if (!isNull(eq.y()))
    {
        double y2 = eq.y() * eq.y();
        a = 1 - (eq.x() * eq.x() / y2);
        b = 1 - (eq.z() * eq.z() / y2);
        h = eq.x() * eq.z() / y2;
    }
    else if (!isNull(eq.x()))
    {
        double x2 = eq.x() * eq.x();
        a = 1 - (eq.y() * eq.y() / x2);
        b = 1 - (eq.z() * eq.z() / x2);
        h = eq.y() * eq.z() / x2;
    }
    else
    {
        return coTranslator::coTranslate("Kegelschnitt: --- ");
    }

    double ab = a * b;
    double h2 = h * h;

    if (a == b && h == 0)
    {
        return coTranslator::coTranslate("Kegelschnitt: Kreis ");
    }
    if ((a == 0 && b != 0) || (a != 0 && b == 0))
    {
        return coTranslator::coTranslate("Kegelschnitt: Parabel / Hyperbel");
    }
    if (h2 < ab)
    {
        return coTranslator::coTranslate("Kegelschnitt: Ellipse");
    }
    if (h2 > ab)
    {
        // check if it only intersects one cone
        //       if (numIntersectTop <= 3 || numIntersectBottom <= 3)
        //          return "Section: Parabola";
        return coTranslator::coTranslate("Kegelschnitt: Parabel / Hyperbel");
    }

    return coTranslator::coTranslate("Kegelschnitt: --- ");
}
Пример #20
0
std::string ConicSectionPlugin::sectionString(osg::Vec4 eq)
{
    stringstream equation;
    equation << coTranslator::coTranslate("Gleichung: ");
    equation << std::fixed << std::setprecision(2);

    double ax, bx, cx, dx, ex, fx;

    if (!isNull(eq.z()))
    {
        double z2 = eq.z() * eq.z();
        ax = 1 - ((eq.x() * eq.x()) / z2);
        bx = 1 - (eq.y() * eq.y() / z2);
        cx = 2 * eq.x() * eq.y() / z2;
        dx = 2 * eq.x() * eq.w() / z2;
        ex = 2 * eq.y() * eq.w() / z2;
        fx = eq.w() * eq.w() / z2;

        if (!isNull(ax))
            equation << ax << "x^2 ";
        if (bx > 0)
            equation << "+" << bx << "y^2 ";
        else if (bx < 0)
            equation << bx << "y^2 ";
        if (cx > 0)
            equation << "+" << cx << "xy ";
        else if (cx < 0)
            equation << cx << "xy ";
        if (dx > 0)
            equation << "+" << dx << "x ";
        else if (dx < 0)
            equation << dx << "x ";
        if (ex > 0)
            equation << "+" << ex << "y ";
        else if (ex < 0)
            equation << ex << "y ";
        if (fx > 0)
            equation << "+" << fx << " = 0";
        else if (fx < 0)
            equation << fx << " = 0 ";
        else
            equation << " = 0 ";
    }
    else if (!isNull(eq.x()))
    {
        double a2 = eq.x() * eq.x();
        ax = 1 + ((eq.y() * eq.y()) / a2);
        bx = (eq.z() * eq.z() / a2) - 1;
        cx = 2 * eq.y() * eq.z() / a2;
        dx = 2 * eq.y() * eq.w() / a2;
        ex = 2 * eq.z() * eq.w() / a2;
        fx = eq.w() * eq.w() / a2;

        if (!isNull(ax))
            equation << ax << "y^2 ";
        if (bx > 0)
            equation << "+" << bx << "z^2 ";
        else if (bx < 0)
            equation << bx << "z^2 ";
        if (cx > 0)
            equation << "+" << cx << "yz ";
        else if (cx < 0)
            equation << cx << "yz ";
        if (dx > 0)
            equation << "+" << dx << "y ";
        else if (dx < 0)
            equation << dx << "y ";
        if (ex > 0)
            equation << "+" << ex << "z ";
        else if (ex < 0)
            equation << ex << "z ";
        if (fx > 0)
            equation << "+" << fx << " = 0";
        else if (fx < 0)
            equation << fx << " = 0 ";
        else
            equation << " = 0 ";
    }
    else if (!isNull(eq.y()))
    {
        double b2 = eq.y() * eq.y();
        ax = 1 + ((eq.x() * eq.x()) / b2);
        bx = (eq.z() * eq.z() / b2) - 1;
        cx = 2 * eq.x() * eq.z() / b2;
        dx = 2 * eq.x() * eq.w() / b2;
        ex = 2 * eq.z() * eq.w() / b2;
        fx = eq.w() * eq.w() / b2;

        if (!isNull(ax))
            equation << ax << "x^2 ";
        if (bx > 0)
            equation << "+" << bx << "z^2 ";
        else if (bx < 0)
            equation << bx << "z^2 ";
        if (cx > 0)
            equation << "+" << cx << "xz ";
        else if (cx < 0)
            equation << cx << "xz ";
        if (dx > 0)
            equation << "+" << dx << "x ";
        else if (dx < 0)
            equation << dx << "x ";
        if (ex > 0)
            equation << "+" << ex << "z ";
        else if (ex < 0)
            equation << ex << "z ";
        if (fx > 0)
            equation << "+" << fx << " = 0";
        else if (fx < 0)
            equation << fx << " = 0 ";
        else
            equation << " = 0 ";
    }

    return equation.str();
}
Пример #21
0
void CSulGeomTriangleList::setColor( const osg::Vec4& color )
{
	setColor( color.r(), color.g(), color.b(), color.a() );
}
Пример #22
0
 inline void rgba(float& r,float& g,float& b,float& a) const { a = (r*_colour.r()+g*_colour.g()+b*_colour.b()+a*_colour.a()); }
Пример #23
0
void FireActor::GetBoundaryPlane(osg::Vec4& dest, int index) const
{
   dest.set(mBoundaryPlanes[index][0],mBoundaryPlanes[index][1],mBoundaryPlanes[index][2],mBoundaryPlanes[index][3]);
}
Пример #24
0
void print(osg::Vec4 & v, std::string label)
{
    std::cerr << label << " x: " << v.x() << " y: " << v.y() << " z: " << v.z()
              << " w: " << v.w() << std::endl;
}
Пример #25
0
 Eigen::Vector4f toE(const osg::Vec4 &v) const {
     return Eigen::Vector4f(v.x(), v.y(), v.z(), v.w());
 }