mirror of
https://git.mirrors.martin98.com/https://github.com/google/draco
synced 2025-08-01 10:52:00 +08:00
commit
401b73cfae
212
README
212
README
@ -1,212 +0,0 @@
|
|||||||
Description:
|
|
||||||
============
|
|
||||||
Draco is used to compress and decompress 3d geometry data and point clouds.
|
|
||||||
Draco was designed and built for compression efficiency and speed. The code
|
|
||||||
supports compressing points, connectivity information, texture coordinates,
|
|
||||||
color information, normals, and any other generic attributes associated with
|
|
||||||
geometry.
|
|
||||||
|
|
||||||
|
|
||||||
Draco is released as C++ source code that can compress and decompress 3d
|
|
||||||
geometry data and point clouds. The package also contains Javascript decoders
|
|
||||||
for the encoded data.
|
|
||||||
|
|
||||||
|
|
||||||
Note: This is not an official Google product.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Building:
|
|
||||||
=========
|
|
||||||
For all the platforms first you need to generate the project files, then you
|
|
||||||
need to compile the examples.
|
|
||||||
|
|
||||||
|
|
||||||
CMake Basics
|
|
||||||
------------
|
|
||||||
|
|
||||||
To generate project/make files for the default toolchain on your system simply
|
|
||||||
run cmake in the root of the Draco repo:
|
|
||||||
|
|
||||||
$ cmake .
|
|
||||||
|
|
||||||
On Windows the above command will produce Visual Studio project files for the
|
|
||||||
newest Visual Studio detected on the system. On Mac OS X and Linux systems, the
|
|
||||||
above command will produce a makefile.
|
|
||||||
|
|
||||||
To control what types of projects are generated the -G parameter is added to the
|
|
||||||
cmake command line. This argument must be followed by the name of a generator.
|
|
||||||
Running cmake with the --help argument will list the available generators for
|
|
||||||
your system.
|
|
||||||
|
|
||||||
On Mac OS X you would run the following command to generate Xcode projects:
|
|
||||||
|
|
||||||
$ cmake . -G Xcode
|
|
||||||
|
|
||||||
On a Windows box you would run the following command to generate Visual Studio
|
|
||||||
2015 projects:
|
|
||||||
|
|
||||||
$ cmake . -G "Visual Studio 14 2015"
|
|
||||||
|
|
||||||
To generate 64-bit Windows Visual Studio 2015 projects:
|
|
||||||
|
|
||||||
$ cmake . "Visual Studio 14 2015 Win64"
|
|
||||||
|
|
||||||
|
|
||||||
CMake Makefiles: Debugging and Optimization
|
|
||||||
-------------------------------------------
|
|
||||||
Unlike Visual Studio and Xcode projects, the build configuration for make builds
|
|
||||||
is controlled when you run cmake. The following examples demonstrate various
|
|
||||||
build configurations.
|
|
||||||
|
|
||||||
Omitting the build type produces makefiles that use build flags containing
|
|
||||||
neither optimization nor debug flags:
|
|
||||||
$ cmake .
|
|
||||||
|
|
||||||
A makefile using release (optimized) flags is produced like this:
|
|
||||||
$ cmake . -DCMAKE_BUILD_TYPE=release
|
|
||||||
|
|
||||||
A release build with debug info can be produced as well:
|
|
||||||
$ cmake . -DCMAKE_BUILD_TYPE=relwithdebinfo
|
|
||||||
|
|
||||||
And your standard debug build will be produced using:
|
|
||||||
$ cmake . -DCMAKE_BUILD_TYPE=debug
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Android Studio Project Integration
|
|
||||||
----------------------------------
|
|
||||||
To include Draco in an existing or new Android Studio project it simply needs
|
|
||||||
to be referenced from the cmake file of an existing native project that has a
|
|
||||||
minimum SDK version of 18 or higher. To add Draco to your project:
|
|
||||||
|
|
||||||
1) Add the following somewhere within the CMakeLists.txt for your project before
|
|
||||||
the add_library() for your project's native-lib:
|
|
||||||
|
|
||||||
# Note "/path/to/draco" must be changed to the path where you have cloned the
|
|
||||||
# Draco sources.
|
|
||||||
add_subdirectory(/path/to/draco
|
|
||||||
${CMAKE_BINARY_DIR}/draco_build)
|
|
||||||
include_directories("${CMAKE_BINARY_DIR}" /path/to/draco)
|
|
||||||
|
|
||||||
2) Add the library target "draco" to the target_link_libraries() call for your
|
|
||||||
project's native-lib. The target_link_libraries() call for an empty activity
|
|
||||||
native project looks like this after the addition of Draco:
|
|
||||||
|
|
||||||
target_link_libraries( # Specifies the target library.
|
|
||||||
native-lib
|
|
||||||
|
|
||||||
# Tells cmake this build depends on libdraco.
|
|
||||||
draco
|
|
||||||
|
|
||||||
# Links the target library to the log library
|
|
||||||
# included in the NDK.
|
|
||||||
${log-lib} )
|
|
||||||
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
=========
|
|
||||||
Command line applications:
|
|
||||||
--------------------------
|
|
||||||
The default target create from the build files will be the draco_encoder and
|
|
||||||
draco_decoder command line applications. For both applications if you run them
|
|
||||||
without any arguments or "-h", the applications will output the usage and
|
|
||||||
options.
|
|
||||||
|
|
||||||
|
|
||||||
Encoding Tool:
|
|
||||||
--------------
|
|
||||||
draco_encoder will read OBJ or PLY files as input and output Draco encoded
|
|
||||||
files. We have included the bunny[1] mesh for testing. The basic command line
|
|
||||||
looks like this:
|
|
||||||
$ ./draco_encoder -i testdata/bun_zipper.ply -o out.drc
|
|
||||||
|
|
||||||
A value of 0 for the quantization parameters will not perform any quantization
|
|
||||||
on the specified attribute. Any value other than 0 will quantize the input
|
|
||||||
values for the specified attribute to that number of bits.
|
|
||||||
E.g. ./draco_encoder -i testdata/bun_zipper.ply -o out.drc -qp 14 will quantize
|
|
||||||
the positions to 14 bits (default for the position coordinates).
|
|
||||||
|
|
||||||
In general the more you quantize your attributes the better compression rate
|
|
||||||
you will get. It is up to your project on how much deviation it will tolerate.
|
|
||||||
In general most projects can set quantizations values of about 14 without any
|
|
||||||
noticeable difference in quality.
|
|
||||||
|
|
||||||
The compression level parameter turns on/off different compression features.
|
|
||||||
In general the highest setting, 10, will have the worst compression ratio but
|
|
||||||
best decompression speed. And 0 will have the best compression ratio, but worst
|
|
||||||
decompression speed.
|
|
||||||
|
|
||||||
|
|
||||||
Encoding Point Clouds:
|
|
||||||
----------------------
|
|
||||||
You can encode point cloud data with draco_encoder by specifying the
|
|
||||||
point_cloud parameter. If you specify the point_cloud parameter with a mesh
|
|
||||||
input file, draco_encoder will ignore the connectivity data and encode the
|
|
||||||
positions from the mesh file. E.g.:
|
|
||||||
$ ./draco_encoder -point_cloud -i testdata/bun_zipper.ply -o out.drc
|
|
||||||
|
|
||||||
This command line will encode the mesh input as a point cloud, even though the
|
|
||||||
input might not produce compression that is representative of other point
|
|
||||||
clouds. Specifically, one can expect much better compression rates for larger
|
|
||||||
and denser point clouds.
|
|
||||||
|
|
||||||
|
|
||||||
Decoding Tool:
|
|
||||||
--------------
|
|
||||||
draco_decoder will read Draco files as input and output OBJ or PLY files. The
|
|
||||||
basic command line looks like this:
|
|
||||||
$ ./draco_decoder -i in.drc -o out.obj
|
|
||||||
|
|
||||||
|
|
||||||
Javascript Decoder:
|
|
||||||
-------------------
|
|
||||||
The Javascript decoder is located in "javascript/draco_decoder.js". The
|
|
||||||
Javascript decoder can currently only decode mesh geometry. In order to use the
|
|
||||||
decoder you must create DecoderBuffer and WebIDLWrapper objects. Set the encoded
|
|
||||||
data in the DecoderBuffer. Then call DecodeMeshFromBuffer(), which will
|
|
||||||
return a Mesh object. E.g.
|
|
||||||
|
|
||||||
|
|
||||||
var buffer = new Module.DecoderBuffer();
|
|
||||||
buffer.Init(encFileData, encFileData.length);
|
|
||||||
|
|
||||||
|
|
||||||
var wrapper = new WebIDLWrapper();
|
|
||||||
var outputMesh = wrapper.DecodeMeshFromBuffer(buffer);
|
|
||||||
|
|
||||||
|
|
||||||
destroy(outputMesh);
|
|
||||||
destroy(wrapper);
|
|
||||||
destroy(buffer);
|
|
||||||
|
|
||||||
|
|
||||||
Please see "javascript/emscripten/draco_web.idl" for the full API.
|
|
||||||
|
|
||||||
|
|
||||||
Javascript Decoder Performance:
|
|
||||||
-------------------------------
|
|
||||||
The Javascript decoder is built with dynamic memory. This will let the decoder
|
|
||||||
work with all of the compressed data. But this option is not the fastest.
|
|
||||||
Pre-allocating the memory sees about a 2x decoder speed improvement. If you
|
|
||||||
know all of your project's memory requirements you can turn on static memory
|
|
||||||
by changing Makefile.emcc and running "make -f Makefile.emcc".
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
three.js renderer example:
|
|
||||||
--------------------------
|
|
||||||
Please see the "javascript/example/README" file for more information.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Support:
|
|
||||||
========
|
|
||||||
For questions/comments please email draco-3d-discuss@googlegroups.com
|
|
||||||
|
|
||||||
[1] Bunny model from Stanford's graphic department. https://graphics.stanford.edu/data/3Dscanrep/
|
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user