📄 dataoutputstream.cpp
字号:
writeDouble(v.w()); if (_verboseOutput) std::cout<<"read/writeVec4d() ["<<v<<"]"<<std::endl;}void DataOutputStream::writePlane(const osg::Plane& v){ writeDouble(v[0]); writeDouble(v[1]); writeDouble(v[2]); writeDouble(v[3]); if (_verboseOutput) std::cout<<"read/writePlane() ["<<v<<"]"<<std::endl;}void DataOutputStream::writeVec4ub(const osg::Vec4ub& v){ writeChar(v.r()); writeChar(v.g()); writeChar(v.b()); writeChar(v.a()); if (_verboseOutput) std::cout<<"read/writeVec4ub() ["<<v<<"]"<<std::endl;}void DataOutputStream::writeVec2b(const osg::Vec2b& v){ writeChar(v.r()); writeChar(v.g()); if (_verboseOutput) std::cout<<"read/writeVec2b() ["<<v<<"]"<<std::endl;}void DataOutputStream::writeVec3b(const osg::Vec3b& v){ writeChar(v.r()); writeChar(v.g()); writeChar(v.b()); if (_verboseOutput) std::cout<<"read/writeVec3b() ["<<v<<"]"<<std::endl;}void DataOutputStream::writeVec4b(const osg::Vec4b& v){ writeChar(v.r()); writeChar(v.g()); writeChar(v.b()); writeChar(v.a()); if (_verboseOutput) std::cout<<"read/writeVec4b() ["<<v<<"]"<<std::endl;}void DataOutputStream::writeQuat(const osg::Quat& q){ writeFloat(q.x()); writeFloat(q.y()); writeFloat(q.z()); writeFloat(q.w()); if (_verboseOutput) std::cout<<"read/writeQuat() ["<<q<<"]"<<std::endl;}void DataOutputStream::writeBinding(osg::Geometry::AttributeBinding b){ switch(b){ case osg::Geometry::BIND_OFF: writeChar((char) 0); break; case osg::Geometry::BIND_OVERALL: writeChar((char) 1); break; case osg::Geometry::BIND_PER_PRIMITIVE: writeChar((char) 2); break; case osg::Geometry::BIND_PER_PRIMITIVE_SET: writeChar((char) 3); break; case osg::Geometry::BIND_PER_VERTEX: writeChar((char) 4); break; default: throw Exception("Unknown binding in DataOutputStream::writeBinding()"); } if (_verboseOutput) std::cout<<"read/writeBinding() ["<<b<<"]"<<std::endl;}void DataOutputStream::writeArray(const osg::Array* a){ switch(a->getType()){ case osg::Array::IntArrayType: writeChar((char)0); writeIntArray(static_cast<const osg::IntArray*>(a)); break; case osg::Array::UByteArrayType: writeChar((char)1); writeUByteArray(static_cast<const osg::UByteArray*>(a)); break; case osg::Array::UShortArrayType: writeChar((char)2); writeUShortArray(static_cast<const osg::UShortArray*>(a)); break; case osg::Array::UIntArrayType: writeChar((char)3); writeUIntArray(static_cast<const osg::UIntArray*>(a)); break; case osg::Array::Vec4ubArrayType: writeChar((char)4); writeVec4ubArray(static_cast<const osg::Vec4ubArray*>(a)); break; case osg::Array::FloatArrayType: writeChar((char)5); writeFloatArray(static_cast<const osg::FloatArray*>(a)); break; case osg::Array::Vec2ArrayType: writeChar((char)6); writeVec2Array(static_cast<const osg::Vec2Array*>(a)); break; case osg::Array::Vec3ArrayType: writeChar((char)7); writeVec3Array(static_cast<const osg::Vec3Array*>(a)); break; case osg::Array::Vec4ArrayType: writeChar((char)8); writeVec4Array(static_cast<const osg::Vec4Array*>(a)); break; case osg::Array::Vec2sArrayType: writeChar((char)9); writeVec2sArray(static_cast<const osg::Vec2sArray*>(a)); break; case osg::Array::Vec3sArrayType: writeChar((char)10); writeVec3sArray(static_cast<const osg::Vec3sArray*>(a)); break; case osg::Array::Vec4sArrayType: writeChar((char)11); writeVec4sArray(static_cast<const osg::Vec4sArray*>(a)); break; case osg::Array::Vec2bArrayType: writeChar((char)12); writeVec2bArray(static_cast<const osg::Vec2bArray*>(a)); break; case osg::Array::Vec3bArrayType: writeChar((char)13); writeVec3bArray(static_cast<const osg::Vec3bArray*>(a)); break; case osg::Array::Vec4bArrayType: writeChar((char)14); writeVec4bArray(static_cast<const osg::Vec4bArray*>(a)); break; case osg::Array::Vec2dArrayType: writeChar((char)15); writeVec2dArray(static_cast<const osg::Vec2dArray*>(a)); break; case osg::Array::Vec3dArrayType: writeChar((char)16); writeVec3dArray(static_cast<const osg::Vec3dArray*>(a)); break; case osg::Array::Vec4dArrayType: writeChar((char)17); writeVec4dArray(static_cast<const osg::Vec4dArray*>(a)); break; default: throw Exception("Unknown array type in DataOutputStream::writeArray()"); }}void DataOutputStream::writeIntArray(const osg::IntArray* a){ int size = a->getNumElements(); writeInt(size); for(int i =0; i<size ;i++){ writeInt(a->index(i)); } if (_verboseOutput) std::cout<<"read/writeIntArray() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeUByteArray(const osg::UByteArray* a){ int size = a->getNumElements(); writeInt(size); for(int i =0; i<size ;i++){ writeChar((*a)[i]); } if (_verboseOutput) std::cout<<"read/writeUByteArray() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeUShortArray(const osg::UShortArray* a){ int size = a->getNumElements(); writeInt(size); for(int i =0; i<size ;i++){ writeUShort((*a)[i]); } if (_verboseOutput) std::cout<<"read/writeUShortArray() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeUIntArray(const osg::UIntArray* a){ int size = a->getNumElements(); writeInt(size); for(int i =0; i<size ;i++){ writeInt((*a)[i]); } if (_verboseOutput) std::cout<<"read/writeUIntArray() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeVec4ubArray(const osg::Vec4ubArray* a){ int size = a->getNumElements(); writeInt(size); for(int i =0; i<size ;i++){ writeVec4ub((*a)[i]); } if (_verboseOutput) std::cout<<"read/writeVec4ubArray() ["<<size<<"]"<<std::endl;}void DataOutputStream::writePackedFloatArray(const osg::FloatArray* a, float maxError){ int size = a->getNumElements(); writeInt(size); if (size==0) return; float minValue = (*a)[0]; float maxValue = minValue; for(int i=1; i<size; ++i) { if ((*a)[i]<minValue) minValue = (*a)[i]; if ((*a)[i]>maxValue) maxValue = (*a)[i]; } if (minValue==maxValue) { osg::notify(osg::DEBUG_INFO)<<"Writing out "<<size<<" same values "<<minValue<<std::endl; writeBool(true); writeFloat(minValue); return; } writeBool(false); int packingSize = 4; if (maxError>0.0f) { float byteError = 0.0f; float byteMultiplier = 255.0f/(maxValue-minValue); float byteInvMultiplier = 1.0f/byteMultiplier; float shortError = 0.0f; float shortMultiplier = 65535.0f/(maxValue-minValue); float shortInvMultiplier = 1.0f/shortMultiplier; float max_error_byte = 0.0f; float max_error_short = 0.0f; for(int i=0; i<size; ++i) { float value = (*a)[i]; unsigned char byteValue = (unsigned char)((value-minValue)*byteMultiplier); unsigned short shortValue = (unsigned short)((value-minValue)*shortMultiplier); float value_byte = minValue + float(byteValue)*byteInvMultiplier; float value_short = minValue + float(shortValue)*shortInvMultiplier; float error_byte = fabsf(value_byte - value); float error_short = fabsf(value_short - value); if (error_byte>max_error_byte) max_error_byte = error_byte; if (error_short>max_error_short) max_error_short = error_short; } osg::notify(osg::DEBUG_INFO)<<"maxError "<<maxError<<std::endl; osg::notify(osg::DEBUG_INFO)<<"Values to write "<<size<<" max_error_byte = "<<max_error_byte<<" max_error_short="<<max_error_short<<std::endl; if (max_error_byte < maxError) packingSize = 1; else if (max_error_short < maxError) packingSize = 2; osg::notify(osg::DEBUG_INFO)<<"packingSize "<<packingSize<<std::endl; } if (packingSize==1) { writeInt(1); writeFloat(minValue); writeFloat(maxValue); float byteMultiplier = 255.0f/(maxValue-minValue); for(int i=0; i<size; ++i) { unsigned char currentValue = (unsigned char)(((*a)[i]-minValue)*byteMultiplier); writeUChar(currentValue); } } else if (packingSize==2) { writeInt(2); writeFloat(minValue); writeFloat(maxValue); float shortMultiplier = 65535.0f/(maxValue-minValue); for(int i=0; i<size; ++i) { unsigned short currentValue = (unsigned short)(((*a)[i]-minValue)*shortMultiplier); writeUShort(currentValue); } } else { writeInt(4); for(int i=0; i<size; ++i) { writeFloat((*a)[i]); } } if (_verboseOutput) std::cout<<"read/writePackedFloatArray() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeFloatArray(const osg::FloatArray* a){ int size = a->getNumElements(); writeInt(size); for(int i =0; i<size ;i++){ writeFloat((*a)[i]); } if (_verboseOutput) std::cout<<"read/writeFloatArray() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeVec2Array(const osg::Vec2Array* a){ int size = a->size(); writeInt(size); for(int i=0;i<size;i++){ writeVec2((*a)[i]); } if (_verboseOutput) std::cout<<"read/writeVec2Array() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeVec3Array(const osg::Vec3Array* a){ int size = a->size(); writeInt(size); for(int i = 0; i < size; i++){ writeVec3((*a)[i]); } if (_verboseOutput) std::cout<<"read/writeVec3Array() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeVec4Array(const osg::Vec4Array* a){ int size = a->size(); writeInt(size); for(int i=0;i<size;i++){ writeVec4((*a)[i]); } if (_verboseOutput) std::cout<<"read/writeVec4Array() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeVec2sArray(const osg::Vec2sArray* a){ int size = a->getNumElements(); writeInt(size); for(int i =0; i<size ;i++){ writeShort((*a)[i].x()); writeShort((*a)[i].y()); } if (_verboseOutput) std::cout<<"read/writeVec2sArray() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeVec3sArray(const osg::Vec3sArray* a){ int size = a->getNumElements(); writeInt(size); for(int i =0; i<size ;i++){ writeShort((*a)[i].x()); writeShort((*a)[i].y()); writeShort((*a)[i].z()); } if (_verboseOutput) std::cout<<"read/writeVec3sArray() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeVec4sArray(const osg::Vec4sArray* a){ int size = a->getNumElements(); writeInt(size); for(int i =0; i<size ;i++){ writeShort((*a)[i].x()); writeShort((*a)[i].y()); writeShort((*a)[i].z()); writeShort((*a)[i].w()); } if (_verboseOutput) std::cout<<"read/writeVec4sArray() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeVec2bArray(const osg::Vec2bArray* a){ int size = a->getNumElements(); writeInt(size); for(int i =0; i<size ;i++){ writeVec2b((*a)[i]); } if (_verboseOutput) std::cout<<"read/writeVec2bArray() ["<<size<<"]"<<std::endl;}void DataOutputStream::writeVec3bArray(const osg::Vec3bArray* a){ int size = a->getNumElements(); writeInt(size); for(int i =0; i<size ;i++){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -