mirror of
https://git.mirrors.martin98.com/https://github.com/google/draco
synced 2025-08-11 17:19:08 +08:00
Bring README content into README.md
This commit is contained in:
parent
c194f6d84c
commit
214ed56304
246
README.md
246
README.md
@ -0,0 +1,246 @@
|
||||
|
||||
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
|
||||
========
|
||||
|
||||
Commandline 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 Stanford's [Bunny] 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>
|
||||
|
||||
[Bunny]: https://graphics.stanford.edu/data/3Dscanrep/
|
Loading…
x
Reference in New Issue
Block a user