
图形学3D渲染【免费下载链接】dracoDraco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics.项目地址https://gitcode.com/gh_mirrors/draco1/draco点击查看免费下载本指南基于仓库内 Draco 3D 位流规范Bitstream Specification文档体系中的核心参考篇 variable.descriptions.md系统梳理 Draco 压缩位流中所有**常量Constants与变量Variables**的命名、取值与语义。读者读完本文后将能对照位流逐字段理解 Draco 文件的 Header、Metadata、顺序/EdgeBreaker 连通性编码、属性编码与遍历过程可作为阅读解码器源码、调试.drc文件或实现自定义位流解析器时的速查索引。文档定位规范中的字典篇docs/spec/目录是 Draco 3D 几何压缩位流格式的规范文档集由 Markdown 分节文件经 Jekyll 构建见 docs/spec/README.md。与 draco.decoder.md解码流程、edgebreaker.decoder.mdEdgeBreaker 连通性解码、attributes.decoder.md属性解码等按流程组织的文档不同variable.descriptions.md 是按词汇表组织的参考篇它把散落在各流程文档中的位流字段集中列出并给出常量取值与变量含义是整套规范的字典。值得强调的是本文档中的常量与 Draco 源码中的枚举定义一一对应例如 src/draco/compression/config/compression_shared.h 中明确定义了这些枚举的取值并注释their values should not be changed取值不应变更因为它们是位流格式的稳定契约一旦改动会导致新旧文件无法互解。常量速查表位流中的魔法数字网格编码方法Mesh Encoding Methods定义于MeshEncoderMethod枚举compression_shared.h值常量名说明0MESH_SEQUENTIAL_ENCODING顺序编码顶点按顺序存储索引直接编码1MESH_EDGEBREAKER_ENCODINGEdgeBreaker 编码基于拓扑遍历的连通性压缩encoder_method字段即取此值解码器据此分流MESH_SEQUENTIAL_ENCODING走DecodeSequentialConnectivityData()MESH_EDGEBREAKER_ENCODING走DecodeEdgebreakerConnectivityData()见 connectivity.decoder.md。元数据常量Metadata Constants值常量名说明32768METADATA_FLAG_MASK头部flags字段中的元数据标志位二进制0x8000源码中的定义完全一致#define METADATA_FLAG_MASK 0x8000compression_shared.h。在 draco.decoder.md 的Decode()流程中解码器用if (flags METADATA_FLAG_MASK)判断位流中是否存在元数据块存在则调用DecodeMetadata()。该标志位占据flagsUI16的最高位。顺序属性编码方法Sequential Attribute Encoding Methods定义于SequentialAttributeEncoderType枚举compression_shared.h值常量名说明0SEQUENTIAL_ATTRIBUTE_ENCODER_GENERIC通用属性编码器默认1SEQUENTIAL_ATTRIBUTE_ENCODER_INTEGER整数属性编码器2SEQUENTIAL_ATTRIBUTE_ENCODER_QUANTIZATION量化属性编码器3SEQUENTIAL_ATTRIBUTE_ENCODER_NORMALS法线属性编码器对应位流变量seq_att_dec_decoder_type。其中量化编码器配合quantized_data_*变量实现浮点坐标定点化法线编码器则与八面体法线变换PREDICTION_TRANSFORM_NORMAL_OCTAHEDRON_CANONICALIZED配合详见 sequential.quantization.attribute.decoder.md 与 sequential.normal.attribute.decoder.md。顺序索引编码方法Sequential Indices Encoding Methods值常量名说明0SEQUENTIAL_COMPRESSED_INDICES压缩索引对连续索引做差值后熵编码1SEQUENTIAL_UNCOMPRESSED_INDICES非压缩索引按原始值直接写入顺序编码模式下三角形索引或点索引可选择是否压缩压缩模式下利用顶点访问顺序的局部性获得更高压缩比。预测编码方法Prediction Encoding Methods定义于PredictionSchemeMethod枚举compression_shared.h值常量名说明-2PREDICTION_NONE不使用预测方案0PREDICTION_DIFFERENCE差分预测残差即当前值与预测值之差1MESH_PREDICTION_PARALLELOGRAM平行四边形预测4MESH_PREDICTION_CONSTRAINED_MULTI_PARALLELOGRAM受限多平行四边形预测5MESH_PREDICTION_TEX_COORDS_PORTABLE可移植纹理坐标预测6MESH_PREDICTION_GEOMETRIC_NORMAL几何法线预测注意枚举中还保留了两个已废弃的取值MESH_PREDICTION_MULTI_PARALLELOGRAM 2与MESH_PREDICTION_TEX_COORDS_DEPRECATED 3-1 为PREDICTION_UNDEFINED。编码器在 encode_base.h 的CheckPredictionScheme()中会拒绝这些废弃值并校验方案与属性类型的匹配关系MESH_PREDICTION_TEX_COORDS_PORTABLE只允许用于 TEX_COORD 属性MESH_PREDICTION_GEOMETRIC_NORMAL只允许用于 NORMAL 属性NORMAL 属性只接受PREDICTION_DIFFERENCE或MESH_PREDICTION_GEOMETRIC_NORMAL。对应位流变量为seq_att_dec_prediction_scheme。预测方案变换方法Prediction Scheme Transform Methods定义于PredictionSchemeTransformType枚举compression_shared.h值常量名说明1PREDICTION_TRANSFORM_WRAP环绕变换将差值折叠到固定区间以降低熵3PREDICTION_TRANSFORM_NORMAL_OCTAHEDRON_CANONICALIZED规范化八面体法线变换倒置瓦片对应位流变量seq_att_dec_prediction_transform_type。环绕变换的钳制区间由位流中的pred_trasnform_wrap_min/pred_trasnform_wrap_max变量携带法线变换则依赖pred_trasnform_normal_max_q_val最大量化值与pred_transform_normal_flip_normal_bits翻转标志详见 prediction.wrap.transform.md 与 prediction.normal.transform.md。网格遍历方法Mesh Traversal Methods定义于MeshTraversalMethod枚举compression_shared.h值常量名说明0MESH_TRAVERSAL_DEPTH_FIRST深度优先遍历1MESH_TRAVERSAL_PREDICTION_DEGREE预测度prediction degree遍历对应位流变量att_dec_traversal_method。预测度遍历按顶点当前预测度排序处理属性条目配合prediction_degree_、best_priority_等变量参考 edgebreaker.traversal.prediction.degree.md。网格属性编码方法Mesh Attribute Encoding Methods值常量名说明0MESH_VERTEX_ATTRIBUTE顶点属性每个顶点一个值1MESH_CORNER_ATTRIBUTE角属性每个角一个值允许沿接缝分裂对应位流变量att_dec_decoder_type。源码中枚举定义于 src/draco/mesh/mesh.h并在 mesh_edgebreaker_encoder_impl.cc 中按类型写入字节流。角属性用于纹理坐标等需要沿 UV 接缝重复的顶点数据。EdgeBreaker 编码方法EdgeBreaker Encoding Methods定义于MeshEdgebreakerConnectivityEncodingMethod枚举compression_shared.h值常量名说明0STANDARD_EDGEBREAKER标准 EdgeBreaker2VALENCE_EDGEBREAKER价valenceEdgeBreaker注意取值 1MESH_EDGEBREAKER_PREDICTIVE_ENCODING已废弃。对应位流变量edgebreaker_traversal_type。EdgeBreaker 常量值常量名说明-1kInvalidCornerIndex无效角索引哨兵值0LEFT_FACE_EDGE左面边1RIGHT_FACE_EDGE右面边2kTexCoordsNumComponents纹理坐标分量数4kMaxNumParallelograms最大平行四边形数量3kMaxPriority最大优先级kInvalidCornerIndex在 src/draco/attributes/geometry_indices.h 中定义遍历与预测算法如受限多平行四边形预测用它判断角遍历是否终止例如 mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h 中的while (corner_id ! kInvalidCornerIndex)。左右边类型对应变量source_edge_bit。EdgeBreaker 位模式常量Bit Pattern Constants值常量名说明0TOPOLOGY_CC 操作新顶点无需分裂1TOPOLOGY_SS 操作分裂3TOPOLOGY_LL 操作左转5TOPOLOGY_RR 操作右转7TOPOLOGY_EE 操作结束这些是 EdgeBreaker 的拓扑符号经算术编码ANS压缩后写入eb_symbol_buffer解码端由edge_breaker_symbol_to_topology_id变量将符号映射回拓扑操作见 edgebreaker.decoder.md 与 rans.decoding.md。Valence EdgeBreaker 常量值常量名说明2MIN_VALENCE最小价7MAX_VALENCE最大价6NUM_UNIQUE_VALENCES唯一价数量价编码把顶点按价连接的边数2–7分入 6 个上下文对应变量ebv_context_counters、ebv_context_symbols与active_context_、vertex_valences_参考 edgebreaker.traversal.valence.md。ANSRange Asymmetric Numeral System常量值常量名说明256rabs_ans_p8_precision8 位精度 ANS 的精度基数1024rabs_ans_p10_precision10 位精度 ANS 的精度基数4096rabs_l_baseANS 低值基数256IO_BASE输入输出基数4096L_RANS_BASErANS 低值基数16384TAGGED_RANS_BASE带标签 rANS 基数4096TAGGED_RANS_PRECISION带标签 rANS 精度这些常量决定熵编码器的位宽与吞吐。Draco 的预测残差、EdgeBreaker 符号等数据均通过 ANS 编码详见 rans.decoding.md。符号编码方法Symbol Encoding Methods定义于SymbolCodingMethod枚举compression_shared.h值常量名说明0TAGGED_SYMBOLS带标签符号编码1RAW_SYMBOLS原始符号编码变量详解按位流区段组织的字段字典Header头部DecodeHeader()见 draco.decoder.md依次读取以下字段其结构与源码中DracoHeader结构体完全对应compression_shared.h变量类型说明draco_stringUI8[5]魔数必须等于DRACO含结尾共 5 字节major_versionUI8位流主版本号minor_versionUI8位流次版本号encoder_typeUI80POINT_CLOUD1TRIANGULAR_MESHencoder_methodUI80MESH_SEQUENTIAL_ENCODING1MESH_EDGEBREAKER_ENCODINGflagsUI16标志位含METADATA_FLAG_MASK当前仓库对应的位流版本点云为 2.3kDracoPointCloudBitstreamVersionMajor 2minor 3三角网格为 2.2compression_shared.h。Metadata元数据变量说明num_att_metadata属性元数据条数att_metadata_id属性元数据 id 数组att_metadata属性元数据数组file_metadata全局文件级元数据当flags METADATA_FLAG_MASK为真时解码器调用DecodeMetadata()读取这些字段参考 metadata.decoder.md。Sequential Encoding顺序编码区段变量说明num_points编码的点数connectivity_method连通性编码方式顺序编码流程详见 sequential.decoder.md。EdgeBreaker EncodingEdgeBreaker 编码区段变量说明edgebreaker_traversal_type0MeshEdgeBreakerTraversalDecoder1MeshEdgeBreakerTraversalPredictiveDecoder2MeshEdgeBreakerTraversalValenceDecodernum_new_vertices新顶点数num_encoded_vertices编码顶点数num_faces编码面数num_attribute_data编码属性数num_encoded_symbols编码的 EdgeBreaker 符号数num_encoded_split_symbols编码的 EdgeBreaker 分裂符号数encoded_connectivity_size编码连通性数据的字节数num_topology_splits拓扑分裂次数source_id_delta差值编码的源符号 id 数组split_id_delta差值编码的分裂符号 id 数组source_edge_bit源边类型数组0 LEFT_FACE_EDGE1 RIGHT_FACE_EDGEsource_symbol_id源符号 id 数组split_symbol_id分裂符号 id 数组last_symbol_解码的最后一个 EdgeBreaker 符号last_vert_added最后解码的顶点 idactive_corner_stackEdgeBreaker 解码过程中当前工作角数组edge_breaker_symbol_to_topology_idEdgeBreaker 符号数组0–4 对应TOPOLOGY_C/S/L/R/Etopology_split_id拓扑分裂时遇到的解码器分裂 id 列表split_active_corners拓扑分裂时遇到的角列表该区段对应 edgebreaker.decoder.md 的连通性解码主流程active_corner_stack与分裂相关变量共同维护遍历栈。EdgeBreaker TraversalEdgeBreaker 遍历区段变量说明eb_symbol_buffer_size符号缓冲大小eb_symbol_buffer标准 EdgeBreaker 编码符号数据eb_start_face_buffer_prob_zero起始面配置的编码概率eb_start_face_buffer_size起始面缓冲大小eb_start_face_bufferEdgeBreaker 编码的面配置数据attribute_connectivity_decoders_prob_zero属性连通性编码概率数组attribute_connectivity_decoders_size属性连通性大小数组attribute_connectivity_decoders_buffer属性连通性数据数组EdgeBreaker Valence Traversal价遍历区段变量说明ebv_context_counters各上下文符号数数组ebv_context_symbols编码的上下文符号数据数组active_context_当前价上下文索引vertex_valences_当前各顶点价数组Attribute Encoding属性编码区段变量说明num_attributes_decoders属性解码器数量att_dec_data_id属性解码器 id 数组att_dec_decoder_type属性解码器类型0 MESH_VERTEX_ATTRIBUTE1 MESH_CORNER_ATTRIBUTEatt_dec_traversal_method属性遍历方法0 MESH_TRAVERSAL_DEPTH_FIRST1 MESH_TRAVERSAL_PREDICTION_DEGREEatt_dec_num_values_to_decode每个属性需解码的数值个数att_dec_num_attributes每类属性的属性数量数组att_dec_att_type属性类型att_dec_data_type属性数据类型att_dec_num_components属性分量数att_dec_normalized属性是否归一化att_dec_unique_id属性的唯一编码 idseq_att_dec_decoder_type属性编码类型数组0–3对应顺序属性编码方法seq_att_dec_prediction_scheme属性预测方案数组-2/0/1/4/5/6对应预测编码方法seq_att_dec_prediction_transform_type属性预测变换数组1/3对应预测方案变换方法seq_int_att_dec_compressed整数属性是否压缩pred_cons_multi_is_cease_edge多平行四边形预测中标记边是否为最后一条边的数组pred_tex_coords_orientations纹理坐标预测方向数组pred_trasnform_wrap_min环绕变换最小钳制值数组pred_trasnform_wrap_max环绕变换最大钳制值数组pred_trasnform_normal_max_q_val法线变换最大量化值数组pred_transform_normal_flip_normal_bits法线变换翻转标志数组seq_int_att_dec_decoded_values属性解码符号数组seq_int_att_dec_symbols_to_signed_ints解码符号转有符号整数数组seq_int_att_dec_original_values属性的原始量化值数组seq_int_att_dec_dequantized_values属性的原始反量化值数组quantized_data_min_values最小量化值数组quantized_data_max_value_df量化范围数组quantized_data_quantization_bits量化位数数组注文档中pred_trasnform_wrap_min等标识符的拼写为规范原文写法trasnform引用位流时请以规范为准。Attribute Traversal属性遍历区段变量说明curr_att_dec当前属性解码器类型curr_att解码器类型内的当前属性vertex_visited_point_ids每属性最后访问的顶点数组att_connectivity_seam_opp接缝对角数据att_connectivity_seam_src接缝源数据att_connectivity_seam_dest接缝目标数据corner_to_point_map角到点映射is_edge_on_seam_布尔数组标记角的对边是否在接缝上encoded_attribute_value_index_to_corner_map按属性条目编码顺序存储的角 id 数组vertex_to_encoded_attribute_value_index_map每个顶点属性条目的编码顺序数组indices_map_索引映射prediction_rans_prob_zero当前 rANS 零概率prediction_rans_data_size当前 rANS 编码数据大小prediction_rans_data_buffer某属性的 ANS 编码预测数据tex_coords_num_orientations编码纹理数据的当前方向数traversal_stacks_可用角数组best_priority_当前最优可用优先级prediction_degree_每个顶点的当前度预测数组constrained_multi_num_flags受限多平行四边形标志数这些变量支撑两类属性遍历深度优先配合traversal_stacks_与预测度遍历配合best_priority_、prediction_degree_接缝相关变量用于正确处理角属性沿 UV 接缝的重复顶点见 boundary.decoder.md。在源码中的印证本文档的取值并非孤立的文档约定而是与源码枚举严格一致编码方法族MeshEncoderMethod、SequentialAttributeEncoderType、PredictionSchemeMethod、PredictionSchemeTransformType、MeshTraversalMethod、MeshEdgebreakerConnectivityEncodingMethod、SymbolCodingMethod全部定义于 src/draco/compression/config/compression_shared.h并带有取值不应变更的注释头部布局DracoHeader结构体draco_string[5] 4 个 UI8 UI16 flags与本文 Header 变量一一对应属性类型MESH_VERTEX_ATTRIBUTE 0、MESH_CORNER_ATTRIBUTE定义于 src/draco/mesh/mesh.h编码器在 mesh_edgebreaker_encoder_impl.cc 中将该值写入位流预测方案校验encode_base.h 的CheckPredictionScheme()实现废弃方案拒绝与属性类型匹配校验解释了为何位流中只出现文档列出的 -2/0/1/4/5/6 六个有效值无效角哨兵kInvalidCornerIndex定义于 src/draco/attributes/geometry_indices.h贯穿全部基于角的遍历与预测算法。使用建议阅读解码器时以本文档为索引遇到位流字段名即可对照其含义与取值再回到 draco.decoder.md 了解字段读取的整体调用顺序ParseHeader → DecodeMetadata → DecodeConnectivityData → DecodeAttributeData。解读.drc文件时先用 Header 的encoder_type判断是点云0还是三角网格1再用encoder_method分流顺序 / EdgeBreaker 解码路径最后按属性区段变量逐属性还原数据。二次开发时若需自定义编码器务必遵守本文档的取值契约——新增枚举值只能向后追加不可修改既有编号否则破坏位流兼容性。配套阅读连通性解码见 connectivity.decoder.md、edgebreaker.decoder.md属性解码见 attributes.decoder.md、prediction.decoder.md熵解码见 rans.decoding.md。赞分享图形学3D渲染【免费下载链接】dracoDraco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics.项目地址https://gitcode.com/gh_mirrors/draco1/draco点击查看免费下载相关推荐英雄联盟国服免费换肤终极指南R3nzSkin完整使用教程英雄联盟国服免费换肤终极指南R3nzSkin完整使用教程 还在为英雄联盟国服昂贵的皮肤而烦恼吗想要免费体验所有英雄皮肤、防御塔外观和小兵模型吗今天我要为你图形学3D渲染Draco 位流规范深度解析EdgeBreaker 遍历Traversal解码全流程Draco 位流规范深度解析EdgeBreaker 遍历Traversal解码全流程 本文以 docs/spec/edgebreaker.traversa图形学3D渲染IPTV源检测终极指南告别失效频道3分钟搭建智能检测系统IPTV源检测终极指南告别失效频道3分钟搭建智能检测系统 还在为IPTV播放源频繁失效而烦恼吗面对成百上千个频道列表手动测试不仅耗时耗力还常常错过重要后端任务调度音视频上一篇2026终极指南JetBrains IDE试用期重置插件完整使用教程下一篇JetBrains IDE试用期重置终极指南5分钟掌握无限试用技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考