osgUtil.ConvertVec是OpenSceneGraph中用于转换向量(Vec3)类型的实用工具类。它提供了一些方法来执行不同的向量表示之间的转换。
osg::Vec3 ConvertVec::fromVec4(const osg::Vec4& vec4)
从Vec4类型的向量中提取前三个分量,并返回一个新的Vec3类型的向量。
osg::Vec4 ConvertVec::toVec4(const osg::Vec3& vec3, float w = 1.0f)
将给定的Vec3类型的向量转换为Vec4类型的向量,并将第四个分量设置为指定的值。
osg::ref_ptr<osg::Vec3> ConvertVec::toRefPtr(osg::Vec3* vec)
将给定的Vec3类型的指针转换为osg::ref_ptr。这可以用于将一个Vec3类型的指针存储在osg::Node的用户数据中。
bool ConvertVec::fromXmlString(osg::Vec3& vec, const std::string& str)
解析xml格式字符串,将其转换为Vec3类型的向量,并将结果存储在给定的vec中。如果解析失败,则返回false。
std::string ConvertVec::toXmlString(const osg::Vec3& vec)
将给定的Vec3类型的向量转换为xml格式的字符串,并返回字符串表示。
osg::Vec4 vec4(1.0f, 2.0f, 3.0f, 4.0f);
osg::Vec3 vec3 = osgUtil::ConvertVec::fromVec4(vec4);
std::cout << "Vec3: " << vec3 << std::endl;
osg::Vec3 vec3_2(5.0f, 6.0f, 7.0f);
osg::Vec4 vec4_2 = osgUtil::ConvertVec::toVec4(vec3_2, 0.5f);
std::cout << "Vec4: " << vec4_2 << std::endl;
osg::ref_ptr<osg::Vec3> vec_ptr = new osg::Vec3(8.0f, 9.0f, 10.0f);
osg::ref_ptr<osg::Vec3> vec_ptr_2 = osgUtil::ConvertVec::toRefPtr(vec_ptr);
std::cout << "Ref ptr: " << *vec_ptr_2 << std::endl;
std::string xml_str = "<Vec3 x=\"1.0\" y=\"2.0\" z=\"3.0\"/>";
osg::Vec3 vec_from_xml;
if (osgUtil::ConvertVec::fromXmlString(vec_from_xml, xml_str))
std::cout << "Vec from xml: " << vec_from_xml << std::endl;
std::string xml_str_2 = osgUtil::ConvertVec::toXmlString(vec3_2);
std::cout << "Xml string: " << xml_str_2 << std::endl;
以上示例演示了osgUtil.ConvertVec的各种方法。它们分别将Vec4转换为Vec3,将Vec3转换为Vec4,将Vec3指针转换为osg::ref_ptr,将xml格式的字符串转换为Vec3,以及将Vec3转换为xml格式的字符串。