1
1
use std:: io:: Write ;
2
2
3
- use crate :: sink:: cesiumtiles:: metadata:: make_dummy_metadata;
4
-
5
- use super :: material;
3
+ use super :: { material, metadata:: MetadataEncoder } ;
6
4
use ahash:: { HashMap , HashSet } ;
7
5
use byteorder:: { ByteOrder , LittleEndian } ;
8
6
use indexmap:: IndexSet ;
@@ -16,13 +14,13 @@ pub struct PrimitiveInfo {
16
14
17
15
pub type Primitives = HashMap < material:: Material , PrimitiveInfo > ;
18
16
19
- /// とりいそぎの実装
20
17
pub fn write_gltf_glb < W : Write > (
21
18
writer : W ,
22
19
translation : [ f64 ; 3 ] ,
23
20
vertices : impl IntoIterator < Item = [ u32 ; 9 ] > ,
24
21
primitives : Primitives ,
25
22
num_features : usize ,
23
+ metadata_encoder : MetadataEncoder ,
26
24
) -> std:: io:: Result < ( ) > {
27
25
use nusamai_gltf_json:: * ;
28
26
@@ -62,6 +60,7 @@ pub fn write_gltf_glb<W: Write>(
62
60
let len_vertices = bin_content. len ( ) - buffer_offset;
63
61
if len_vertices > 0 {
64
62
gltf_buffer_views. push ( BufferView {
63
+ name : Some ( "vertices" . to_string ( ) ) ,
65
64
byte_offset : buffer_offset as u32 ,
66
65
byte_length : len_vertices as u32 ,
67
66
byte_stride : Some ( VERTEX_BYTE_STRIDE as u8 ) ,
@@ -71,6 +70,7 @@ pub fn write_gltf_glb<W: Write>(
71
70
72
71
// accessor (positions)
73
72
gltf_accessors. push ( Accessor {
73
+ name : Some ( "positions" . to_string ( ) ) ,
74
74
buffer_view : Some ( gltf_buffer_views. len ( ) as u32 - 1 ) ,
75
75
component_type : ComponentType :: Float ,
76
76
count : vertices_count,
@@ -82,6 +82,7 @@ pub fn write_gltf_glb<W: Write>(
82
82
83
83
// accessor (normal)
84
84
gltf_accessors. push ( Accessor {
85
+ name : Some ( "normals" . to_string ( ) ) ,
85
86
buffer_view : Some ( gltf_buffer_views. len ( ) as u32 - 1 ) ,
86
87
byte_offset : 4 * 3 ,
87
88
component_type : ComponentType :: Float ,
@@ -92,6 +93,7 @@ pub fn write_gltf_glb<W: Write>(
92
93
93
94
// accessor (texcoords)
94
95
gltf_accessors. push ( Accessor {
96
+ name : Some ( "texcoords" . to_string ( ) ) ,
95
97
buffer_view : Some ( gltf_buffer_views. len ( ) as u32 - 1 ) ,
96
98
byte_offset : 4 * 6 ,
97
99
component_type : ComponentType :: Float ,
@@ -102,6 +104,7 @@ pub fn write_gltf_glb<W: Write>(
102
104
103
105
// accessor (feature_id)
104
106
gltf_accessors. push ( Accessor {
107
+ name : Some ( "_feature_ids" . to_string ( ) ) ,
105
108
buffer_view : Some ( gltf_buffer_views. len ( ) as u32 - 1 ) ,
106
109
byte_offset : 4 * 8 ,
107
110
component_type : ComponentType :: Float ,
@@ -114,6 +117,9 @@ pub fn write_gltf_glb<W: Write>(
114
117
115
118
let mut gltf_primitives = vec ! [ ] ;
116
119
120
+ let structural_metadata =
121
+ metadata_encoder. into_metadata ( & mut bin_content, & mut gltf_buffer_views) ;
122
+
117
123
// indices
118
124
{
119
125
let indices_offset = bin_content. len ( ) ;
@@ -127,6 +133,7 @@ pub fn write_gltf_glb<W: Write>(
127
133
}
128
134
129
135
gltf_accessors. push ( Accessor {
136
+ name : Some ( "indices" . to_string ( ) ) ,
130
137
buffer_view : Some ( gltf_buffer_views. len ( ) as u32 ) ,
131
138
byte_offset,
132
139
component_type : ComponentType :: UnsignedInt ,
@@ -170,6 +177,7 @@ pub fn write_gltf_glb<W: Write>(
170
177
let indices_len = bin_content. len ( ) - indices_offset;
171
178
if indices_len > 0 {
172
179
gltf_buffer_views. push ( BufferView {
180
+ name : Some ( "indices" . to_string ( ) ) ,
173
181
byte_offset : indices_offset as u32 ,
174
182
byte_length : indices_len as u32 ,
175
183
target : Some ( BufferViewTarget :: ElementArrayBuffer ) ,
@@ -205,9 +213,6 @@ pub fn write_gltf_glb<W: Write>(
205
213
} ) ;
206
214
}
207
215
208
- let ext_structural_metadata =
209
- make_dummy_metadata ( num_features, & mut bin_content, & mut gltf_buffer_views) ;
210
-
211
216
let gltf_buffers = {
212
217
let mut buffers = vec ! [ ] ;
213
218
if !bin_content. is_empty ( ) {
@@ -238,7 +243,7 @@ pub fn write_gltf_glb<W: Write>(
238
243
buffer_views : gltf_buffer_views,
239
244
buffers : gltf_buffers,
240
245
extensions : nusamai_gltf_json:: extensions:: gltf:: Gltf {
241
- ext_structural_metadata,
246
+ ext_structural_metadata : structural_metadata ,
242
247
..Default :: default ( )
243
248
}
244
249
. into ( ) ,
0 commit comments