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(); }
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(); //} }
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; }
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; }
QColor OSGTextNode::color() const { const osg::Vec4 osgColor = h->text->getColor(); return QColor::fromRgbF( osgColor.r(), osgColor.g(), osgColor.b(), osgColor.a()); }
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; }
// //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; }
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(); } }
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); } }
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(); }
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; }
// //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; }
btVector4 osgbCollision::asBtVector4( const osg::Vec4& v ) { return btVector4( v.x(), v.y(), v.z(), v.w() ); }
void Hsv::getHSVA(osg::Vec4& hhh) const { hhh.set(hsv[HUE],hsv[SATURATION],hsv[VALUE],hsv[ALPHA]); }
bool operator()( const osg::Vec4& in, osg::Vec4& out ) { out = in; out.a() = 0.3333*(in.r() + in.g() + in.b()); return true; }
/** * 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: --- "); }
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(); }
void CSulGeomTriangleList::setColor( const osg::Vec4& color ) { setColor( color.r(), color.g(), color.b(), color.a() ); }
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()); }
void FireActor::GetBoundaryPlane(osg::Vec4& dest, int index) const { dest.set(mBoundaryPlanes[index][0],mBoundaryPlanes[index][1],mBoundaryPlanes[index][2],mBoundaryPlanes[index][3]); }
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; }
Eigen::Vector4f toE(const osg::Vec4 &v) const { return Eigen::Vector4f(v.x(), v.y(), v.z(), v.w()); }