File tree Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Original file line number Diff line number Diff line change @@ -89,3 +89,13 @@ add_custom_command(
89
89
$< TARGET_FILE_DIR:tests> /Duck.glb
90
90
COMMENT "Copying $<TARGET_FILE_DIR:tests>/Duck.glb"
91
91
)
92
+
93
+ add_executable (textractor src/textractor/main.cpp )
94
+ target_link_libraries (textractor PRIVATE common glm::glm )
95
+ add_custom_command (
96
+ TARGET textractor POST_BUILD
97
+ COMMAND ${CMAKE_COMMAND} -E copy
98
+ ${CMAKE_SOURCE_DIR} /assets/Duck.glb
99
+ $< TARGET_FILE_DIR:textractor> /Duck.glb
100
+ COMMENT "Copying $<TARGET_FILE_DIR:textractor>/Duck.glb"
101
+ )
Original file line number Diff line number Diff line change
1
+ #include < common/gltf_model.hpp>
2
+ #include < common/texture.hpp>
3
+
4
+ #include < cassert>
5
+ #include < fstream>
6
+
7
+ int main ()
8
+ {
9
+ const pt::GltfModel model (" Duck.glb" );
10
+
11
+ const auto baseColorTextures = model.baseColorTextures ();
12
+ for (std::size_t i = 0 ; i < baseColorTextures.size (); ++i)
13
+ {
14
+ const pt::Texture& texture = baseColorTextures[i];
15
+ const auto dimensions = texture.dimensions ();
16
+ const auto pixels = texture.pixels ();
17
+
18
+ const std::string filename = " base_color_texture_" + std::to_string (i) + " .ppm" ;
19
+ std::ofstream file (filename, std::ios::out | std::ios::binary);
20
+ assert (file.is_open ());
21
+ // Outputs binary PPM image format, https://netpbm.sourceforge.net/doc/ppm.html
22
+ file << " P6\n " ;
23
+ file << dimensions.width << ' ' << dimensions.height << ' \n ' ;
24
+ file << " 255\n " ;
25
+ for (std::uint32_t i = 0 ; i < dimensions.height ; ++i)
26
+ {
27
+ for (std::uint32_t j = 0 ; j < dimensions.width ; ++j)
28
+ {
29
+ const std::size_t idx = i * dimensions.width + j;
30
+ const auto pixel = pixels[idx];
31
+
32
+ const auto r = static_cast <std::uint8_t >(pixel.r * 255 .0f );
33
+ const auto g = static_cast <std::uint8_t >(pixel.g * 255 .0f );
34
+ const auto b = static_cast <std::uint8_t >(pixel.b * 255 .0f );
35
+
36
+ file << r << g << b;
37
+ }
38
+ }
39
+ }
40
+
41
+ return 0 ;
42
+ }
You can’t perform that action at this time.
0 commit comments