Giter Club home page Giter Club logo

easy3d's Introduction



3D model generated and rendered by Easy3D

Easy3D is an open-source library for 3D modeling, geometry processing, and rendering. It is implemented in C++ and designed with an emphasis on simplicity and efficiency. Easy3D is intended for research and educational purposes, but it is also a good starting point for developing sophisticated 3D applications.

Compared to existing geometry processing libraries (such as PMP and libigl) that focus on the algorithm aspect, Easy3D also provides a wider range of functionalities for user interactions and rendering.

Key features

  • Efficient data structures for representing and managing 3D models such as point clouds, polygonal surfaces (e.g., triangle meshes), polyhedral volumes (e.g., tetrahedral meshes), and graphs. Easy to add/access arbitrary types of per-element properties. Non-manifoldness is automatically resolved when loading models from files ...

  • A set of widely used algorithms, e.g., point cloud normal estimation/re-orientation, Poisson surface reconstruction, RANSAC, mesh simplification, subdivision, smoothing, parameterization, remeshing, and more (the implementation of several surface mesh processing algorithms were taken from PMP).

  • A bunch of rendering techniques, e.g., point/line imposters, ambient occlusion (SSAO), hard shadow (shadow maps), soft shadow (PCSS), eye-dome lighting (for rendering point clouds without normal information), transparency (average color blending, dual depth peeling), and more.

  • High-level encapsulation of OpenGL and GLSL for convenient and efficient rendering (based on modern and faster programmable-shader-style rendering, i.e., no fixed function calls). Client code does not need to touch the low-level APIs of OpenGL.

  • Step-by-step tutorials demonstrating various uses of the API, to get acquainted with the data structures, rendering techniques, and algorithms for 3D modeling and geometry processing.

  • Very easy to use as a callable library (usually only a few lines of code).

  • A viewer that can be used directly to visualize 3D scenes in various formats, which can also be easily extended. For window/GUI creation, Easy3D currently supports GLFW (e.g., the default viewer), Qt (see the Qt viewer), and wxWidgets (see the wxWidgets viewer).

  • A handy tool Mapple created out of the Easy3D library for rendering and processing 3D data.

Scalar field Polyhedral mesh Keyframe animation

A glance

Any type of 3D drawables (e.g., points, lines, triangles, and thus point clouds, mesh surfaces, scalar fields, and vector fields) can be rendered by writing a few lines of code with Easy3D. For example, the following code renders a point cloud as a set of spheres

// assume your point cloud has been loaded to the viewer
PointsDrawable* drawable = cloud->renderer()->get_points_drawable("vertices");
drawable->set_impostor_type(PointsDrawable::SPHERE); // draw points as spheres.
drawable->set_point_size(3.0f);    // set point size

or as a set of surfels (i.e., 3D discs)

drawable->set_impostor_type(PointsDrawable::SURFEL);

By abstracting geometric elements as one of the above drawables, more general visualization (e.g., vector fields, scalar fields) can be done very conveniently.

Easy3D repository layout

The repository contains a CMakeLists.txt file (in the root directory of the repository) that serves as an anchor for configuring and building programs, as well as a set of subfolders:

  • 3rd_party - source code of third-party libraries
  • applications - applications built on top of Easy3D
  • cmake - CMake-related configuration files
  • docs - documentation configuration file (Doxygen)
  • easy3d - source code of Easy3D, implementing the Easy3D modules:
    • util - utilities, e.g., logging, file system, progress, timer.
    • core - basic types and data structures, e.g., point cloud, surface mesh, graph, and polyhedron mesh.
    • fileio - functionalities for reading/writing data from/into files.
    • kdtree - a collection of kd-trees.
    • algo - algorithms for geometry processing.
    • algo_ext - several extended surface mesh processing algorithms (based on CGAL).
    • video - a class that can encode an image sequence into a video.
    • renderer - functionalities and algorithms for rendering and visualization.
    • gui - tools for user interactions, e.g., picking points, faces, or models.
    • viewer - a simple viewer and a composite viewer.
  • resources - test data, images, shaders, textures, etc.
  • tests - a collection of test cases
  • tutorials - a collection of examples (with detailed explanations in code)

Build Easy3D

Like most software, Easy3D depends on some third-party libraries. Easy3D has made this easier for users by including the source code of most third-party libraries (for the core functionalities and the basic viewer), and it leaves very few optional (for a few additional features that are typically not needed by most users).

The optional third-party libraries are:

  • CGAL (optional): Easy3D has implemented a few algorithms for advanced surface mesh processing, such as surface reorientation, detecting/resolving duplicate vertices/faces and self-intersection, and clipping/splitting/slicing surface meshes. These features are disabled by default (because most users don't need them). To enable these features, you can switch on the CMake option Easy3D_ENABLE_CGAL and make sure CGAL (v5.1 or later) is installed and visible to CMake. In case you have multiple versions of CGAL on your platform, simply provide the path of a suitable one to the CMake variable CGAL_DIR.

  • Qt5 (optional): Easy3D supports Qt (v5.6 or later) for UI creation, which can help develop sophisticated applications for 3D data processing and visualization. The Qt support is disabled by default (because most users don't need it). You can switch on the CMake option Easy3D_ENABLE_QT to include the examples and applications that depend on Qt (e.g., Tutorial_204_Viewer_Qt and Mapple).

To build Easy3D, you need CMake (>= 3.12) and, of course, a compiler that supports >= C++11.

Easy3D has been tested on macOS (Xcode >= 8), Windows (MSVC >=2015 x64), and Linux (GCC >= 4.8, Clang >= 3.3). Machines nowadays typically provide higher support, so you should be able to build Easy3D on almost all platforms.

There are many options to build Easy3D. Choose one of the following (not an exhaustive list):

  • Option 1 (purely on the command line): Use CMake to generate Makefiles and then make (on Linux/macOS) or nmake(on Windows with Microsoft Visual Studio).

    • On Linux or macOS, you can simply
          $ cd path-to-root-dir-of-Easy3D
          $ mkdir Release
          $ cd Release
          $ cmake -DCMAKE_BUILD_TYPE=Release ..
          $ make
      
    • On Windows with Microsoft Visual Studio, use the x64 Native Tools Command Prompt for VS XXXX (don't use the x86 one), then
          $ cd path-to-root-dir-of-Easy3D
          $ mkdir Release
          $ cd Release
          $ cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release ..
          $ nmake
      
  • Option 2: Use any IDE that can directly handle CMakeLists files to open the CMakeLists.txt in the root directory of Easy3D. Then you should have obtained a usable project and just build it. I recommend using CLion or QtCreator. For Windows users: your IDE must be set for x64.

  • Option 3: Use CMake-Gui to generate project files for your IDE. Then load the project to your IDE and build it. For Windows users: your IDE must be set for x64.

Don't have any experience with C/C++ programming? Have a look at How to build Easy3D step by step.

Test Easy3D

A test suite is provided in the tests subfolder, which contains a collection of automated test cases (for data structures, IO, algorithms, visualization, etc.) and some semi-automated test cases (for GUI-related functionalities that require interactive user input). All cases are integrated into the single target tests.

To build and run the test suite, download the entire source, use the CMakeLists.txt in the root directory of the repository, switch on the CMake option Easy3D_BUILD_TESTS (which is disabled by default), and run CMake. After CMake, you can build ALL or only the tests target. Finally, run the tests executable (i.e., YOUR_BUILD_DIRECTORY/bin/tests) for the test.

Use Easy3D in your project

This is quite easy, like many other open-source libraries :-) After you have built Easy3D, you only need to point Easy3D_DIR to your build (or the installation) directory of Easy3D when doing cmake. Then the requested Easy3D libraries, including directories and relevant compile definitions of Easy3D, are visible and accessible to your project. Below is an example of using the default Easy3D viewer. The CMakeLists.txt looks like:

cmake_minimum_required(VERSION 3.12)
project(MyProject)
set(CMAKE_CXX_STANDARD 11)                       # specify C++ standard
find_package(Easy3D COMPONENTS viewer REQUIRED)  # request Easy3D (recommended to request only needed components)
add_executable(Test main.cpp)                    # create an executable target
target_link_libraries(Test easy3d::viewer)       # link to necessary Easy3D modules (add more if needed, e.g., algo)

and the main.cpp with minimum code:

#include <easy3d/viewer/viewer.h>
#include <easy3d/util/initializer.h>

int main(int argc, char** argv) {
    easy3d::initialize();
    easy3d::Viewer viewer("Test");
    return viewer.run();
}

Documentation

The documentation for Easy3D is available here.

The Easy3D Documentation is an ongoing effort with more and more details being added. You can build the latest Easy3D documentation from the source code. Easy3D uses Doxygen (>= 1.8.3) to generate documentation from source code. To build it from the source code, install Doxygen first. Then, switch on the CMake option `` in the main CMakeList.txt. Finally, build the `doc` target to generate the documentation.

Questions, new features, bugs, or contributing to Easy3D

See the Contribution Guide for more information.

License

Easy3D is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License or (at your option) any later version. The full text of the license can be found in the accompanying 'License' file.

Acknowledgments

The implementation of Easy3D greatly benefited from and was inspired by existing great open-source libraries, such as PMP, libQGLViewer, Surface mesh, and Graphite. In particular, the implementation of several surface mesh algorithms was taken (with modifications) from PMP, i.e., simplification, subdivision, smoothing, parameterization, remeshing, hole filling, geodesic distances, fairing, curvatures, and triangulation. We would like to thank the original authors of these projects for their permissive license terms. We also thank the users and contributors for reporting/fixing bugs, testing, and providing valuable feedback and suggestions.

Citation

If you use Easy3D in scientific work, I kindly ask you to cite it:

@article{easy3d2021,
  title = {Easy3{D}: a lightweight, easy-to-use, and efficient {C}++ library for processing and rendering 3{D} data},
  author = {Liangliang Nan},
  journal = {Journal of Open Source Software},
  year = {2021},
  volume = {6},
  number = {64},
  pages = {3255},
  doi = {10.21105/joss.03255},
  url = {https://doi.org/10.21105/joss.03255}
}

Should you have any questions, comments, or suggestions, please contact me at [email protected]

Liangliang Nan

Dec. 8, 2018

easy3d's People

Contributors

alior101 avatar danifeist avatar liangliangnan avatar maidamai0 avatar vissarion avatar xkunwu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

easy3d's Issues

line width

Hi,
Is there a support for other than default line width 1.0f ?
I tried adding glLineWidth support to drawable.cpp but opengl complained for invalid value ..
Thanks

make a deb out of the lib

Hi,
This library is super useful for easy and simple visualization but it must be integrated into other projects in order to serve it purpose. Integrating a cmake project into another one is little cumbersome while a deb package containing lib files is easier :)

VS2017 编译错误

hi Liangliang
VS2017 编译有错误:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2666 “easy3d::Vec<4,float>::operator []”: 2 个重载有相似的转换 easy3d (Easy3D\easy3d) C:\Users\Jiaquan\Desktop\Easy3D-v_1.0\easy3d\transform.cpp 208

texture

hi,
you have any tutorial for texture quads from image?
texture draw as background.
jignesh

Culling

Hi, I implemented octree and i want to apply culling. Is this possible to implement culling in easy3d. If yes, how???

access vertex location

Hi Suppose I would like to assign a color to a point clouds points according to its location. How do I access the vertex location in the cloud vertices iterator. Something along the lines of ...

for (auto v : gccloud->vertices()) 
{
     gccolors[v] = vec3(v.pos[0],0,0); 
}

Thanks

Viewer management

Hello,
I would like to integrate your viewer to show a live point cloud stream in a wider application.
I have a few doubts:

  1. I need to keep on updating the visualized point cloud while I receive the data from an active camera: can you suggest me the best way to do it?
  2. If I close and then reopen the viewer I get this error even if the application keeps on working (apparently) fine:

debug : High - API - ERROR : GL_INVALID_OPERATION error generated. Buffer name does not refer to an buffer object generated by OpenGL.
debug : High - API - ERROR : GL_INVALID_OPERATION error generated. Target buffer must be bound and not overlapped with mapping range.
debug : High - API - ERROR : GL_INVALID_OPERATION error generated. Buffer name does not refer to an buffer object generated by OpenGL.
debug : High - API - ERROR : GL_INVALID_OPERATION error generated. Target buffer must be bound and not overlapped with mapping range.
debug : High - API - ERROR : GL_INVALID_OPERATION error generated. Buffer name does not refer to an buffer object generated by OpenGL.
debug : High - API - ERROR : GL_INVALID_OPERATION error generated. Target buffer must be bound and not overlapped with mapping range.
E0612 19:56:27.232616 8642 vertex_array_object.cpp:79] GL error:
file: /media/xxx/Data/Libraries/Easy3D/easy3d/renderer/vertex_array_object.cpp
line: 79
function: bind
info: Invalid operation (The specified operation is not allowed in the current state)

I'm not really able to undestand it. May you help me, please?

Thank you very much and congratulations for your great work!

Shader link error

(edit found solution, described in comments below)
Hello,

Thank you for creating this incredible tool, it has been very useful on my other computer.

I am on a new laptop running into a problem with the shaders as seen in the screenshots attached. I did not have this issue on my desktop. GPU is RTX 2080 on desktop. Laptop has RTX 2080 super max-q).

The Viewer does not render things that use the shaders such as point impostor spheres which is my primary goal. The console is rapidly spammed when the mouse is moved in the Viewer window. I am able to workaround by just adding the PointsDrawable to the Viewer and not setting impostor type.

I was not able to solve this problem with googling. I hope you have some insight into this.

Here is the console output for your Copy/Paste convenience:

2021-02-25` 18:29:58,702 ERROR [default] Type mismatch: Type of gl_ClipDistance different between shaders.
Out of resource error.
 - 'points/points_spheres_geometry_color'
debug : High - SHADER COMP - ERROR : SHADER_ID_LINK error has been generated. GLSL link failed for program 8, "": Type mismatch: Type of gl_ClipDistance different between shaders.
Out of resource error.

Pictures are just samples, I can provide more if you wish.
Thank you even if this cannot be solved!
Tut201
Tut302
Tut307
PointsDrawable_SPHERE
This last picture is from my code trying to set imposter type to PointsDrawable::SPHERE. Just commenting out "drawable->set_impostor_type(PointsDrawable::SPHERE);" will make there be no issues - probably because the shader isn't being used.

Rq: Scale

how to get model and camera scale?

Req : Model Transformation

hi,
can you implement 3d model tranform by rotation matrix? (like cloud compare->edit->apply transformation)

thanks.

Change the licence

I would love to use your library - it looks great. But the GPL Licence would poison our complete code base.
Is there any chance that you change the license to a more liberal (like Apache 2)?

Problem with texture for .obj file

I run viewer, press ctrl+O and load .obj file, but i see only mesh without texture. How can load .obj file with texture? For comparision in Meshlab this file opens with texture.
Screenshot from 2019-05-19 15-27-55

Transparency

hi,
Transparency can possible without fbo? (Tutorial_505_Transparency)
thanks.

Req: Draw Images

hi,
Can draw image in center of viewer background? and access to the camera? like zoom in and zoom out.

thanks.

Use Easy3D as an external library

I'm trying to use Easy3D from my own package, but I can't really understand how I'm supposed to get the 3rd party libraries right to make it compile. I'm getting this error:

Cannot open include file: '3rd_party/glog/glog/logging.h': No such file or directory

But in LiangliangNan\Easy3D\3rd_party\glog there is no glog directory, so I don't understand how the code compiles in the examples. Can you explain? I added LiangliangNan/Easy3D/3rd_party to the include path in my CMakeLists.txt file but it's not found (because the glog directory doesn't contain a glog subdirectory).

What am I doing wrong?

How to use Easy3D library in qt existing application

Hello,

At first thanks a lot for the library.
I really need what this library supports in my qt application. In particular, i would like to call the methods of this lib inside my qt application. However, i did not understand how i could this.

I would like to point out that i use cmake outside qt to configure the source code.
Could you please help me?
Thank you in advance,
Elena.

Problem with image export

Hello, can i import mesh as .obj file and export as image? Dont find this opportunity in tutorials.

Consider adding prefix easy3d to build artifact names

For now several libraries builds in easy3d: algo, core, fileio, kdtree, util, renderer, gui, viewer. As a result corresponding binary items are being created like libalgo.a, libcore.a, ...
But such namings are not suitable for adding easy3d libraries in separate projects for several reasons:

  1. Possible name collisions. For example "core" is too common name.
  2. Not fully clear which libraries are added in projects. Let's suppose that we see in project libraries list something like "opencv_core core gui boost_system". It's not fully and instantly clear that "core" and "gui" are from easy3d. But with boost and opencv in such case everything is ok.
  3. In build library directory there are libraries like "libglew.a", "libcore.a", so easy3d libs are mixed with 3rd party libs.

So probably adding prefix easy3d to artifact names will be a better style: easy3d_core, easy3d_gui, ...

model draw problem

can not draw Transparency(AverageColorBlending::draw) model over image.

Octree visualization

Is this possible to visualize octree data structure in Easy3d?. Because I am trying to insert my octree files, but it is showing in the compiler window that octree is working and it is not replicate in visualization window.

Huge (e.g., >1 billion) point cloud rendering

Hi,
So far I did octree, frustum culling and level of detail in this library. When I tried to load more than 2.5 million points, it kick me out from the debugging. Is this possible to handle large amount pointclouds in this library. Can you please give some suggestions?

Problem about the Tutorial_603_PointCloud_PlaneExtraction

Hello, Thank you for your work. I have been starred this repo for a long time. Recently, I have a demand to use the code about effcient ransac but I met some problem. As it happens that I found you add a tutorial about the planeextraction.So I make and test it with the data you provide - building_cloud.bin. The problem is sometimes that the plane extraction can't work and the terminal output as below. Sometimes works. It is so strange. Do you have any advice? Thank you very much! By the way ,I also use the source code of effcient ransac in my project, the problem in my project is that with same data and parameter, the number of detected plane can be 0 or other. It is also very strange.

Failed one
terminal output "ERROR IN GLOBAL REBUILD"
2019-11-06 16-47-21 的屏幕截图
Success one
2019-11-06 16-48-12 的屏幕截图

Angle wrapper

First of all impressive work: efficient and organized. Thank you!

I often find myself trying to view 3D data through a Windows remote desktop connection (RDC), as the data is too big or the time lost to download it locally is an overhead. The problem with RDC is that it does not have access to the GPU, and so any OpenGL app fails to open. However DirectX is still available and works great. There are a number of solutions:

  • replace RDC with something else, like TeamViewer; downside: RDC is faster than any other remote viewer out there, plus free
  • use a OpenGL software rendered like mesa; downside: very slow, especially with large 3d data, and lack of some advanced OpenGL features
  • add Angle support to the app; downside: might not be easy to implement; upside: all rendering will be done through native DirectX, which not only is far better than software rendering, but potentially even faster then native OpenGL, as many Windows drivers favor DirectX over OpenGL.

Can you pls add support for Angle to Easy3D? This will be a feature that will additionally differentiate your viewer from anything out there, plus will help me and many other using RDC on daily bases.

Select nodes and elements

Is it possible to implement the following functions with modern OpenGL pipeline?

  1. Interactive rectangle selection of nodes or elements;
  2. Hiding the selected nodes and elements.

updating model in real time

Hi,
Is there a way to

  1. receive timer interrupt similar to key press events ?
  2. update the model in RT and update the GPU to enable simple animations ?

Thanks

Drawing points with specific coordinate

Is it possible to draw point instead of vector?
Im working on motion capture project and using your project to show quick result.
Now im passing array of vec3 with (x, y, z) of eash point, but get something like this:
image

How to change the point size ?

Hi,
Great work! I think it's one of the simplest and clearest 3D Rendering projects out here!
Can anyone point me to the place where I can change the "point" size in the cloud point view ?
Thanks!

lighting

I have a box.obj file, but the box does not have a normal vector, so in the viewer there is no 3D lighting.
123

box.obj------------------------------------------------

v -48.000000 -48.000000 -48.000000
v 48.000000 -48.000000 -48.000000
v 48.000000 48.000000 -48.000000
v -48.000000 48.000000 -48.000000
v -48.000000 48.000000 48.000000
v 48.000000 48.000000 48.000000
v 48.000000 -48.000000 48.000000
v -48.000000 -48.000000 48.000000

f 1 2 3
f 1 3 4
f 5 4 3
f 5 3 6
f 6 3 2
f 6 2 7
f 7 2 1
f 7 1 8
f 8 1 4
f 8 4 5
f 8 5 6
f 8 6 7

Depth image problem

Hi Liangliang,

Is there any interface of your framework can produce rendering depth image from point cloud and camera intrinsic and camera pose?

The input is camera intrinsic, camera pose and point cloud (only XYZ), and the output is the depth image (the width and height are the same as camera image, and there is depth value of some of these pixels)

Best,
Yu

req: Recognize

if possible, implement recognize 3d model on images through rotation matrix.
thanks.

Point cloud visualization only shows green color

I was trying to visualize the bunny.bin example using the code you provided in Quick glance section but the bunny is showed in green only. Could you please suggest what could have been wrong? I am using Windows OS. --Thanks!

Qt: LinesDrawable

I'm trying to display lines on Qt. My problem is that nothing is displayed if I add LinesDrawable to a mesh (or a pointcloud). Here is a reproducible code (diff for Tutorial_303_Viewer_Qt).

https://pastebin.com/VqQpYKGi

If I build and run it in Debug, I see the following error messages.

debug : High - API - ERROR : GL_INVALID_OPERATION error generated. VAO names must be generated with glGenVertexArrays before they can be bound or used.
GL error: 
	file: vertex_array_object.cpp
	line: 83
	function: bind
	info: Invalid operation (The specified operation is not allowed in the current state)
debug : High - API - ERROR : GL_INVALID_OPERATION error generated. Array object is not active.
GL error: 
	file: drawable.cpp
	line: 275
	function: draw
	info: Invalid operation (The specified operation is not allowed in the current state)

Adding glGenVertexArrays() call didn't solve the problem.
My environment is Ubuntu 18.04 x64 with Geforce 1080.

Document explain

Hi, I want to use this framework, but I found that there are not many materials. Can you give me some links?

And I would like to produce 2D image from mesh grid map in a camera frame, can this framework work?

Best,
Yu

Running viewer->run() inside a thread crashes

Hi,
When I run the viewer->run() inside a thread (in order no to block my main program execution) imgui crash

`Visualizer::Visualizer()
{
viewer = new easy3d::ViewerImGui("str");
// this works
// viewer->run();
// this doesnt ...
std::thread th1(&Visualizer::StartViewer, this);
}

void Visualizer::StartViewer()
{
viewer->run();
}
`
The crash error is
terminate called without an active exception
ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to compile vertex shader!
ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to compile fragment shader!
ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to link shader program! (with GLSL '#version 150
')

When I run viewer->run() directly, I can see the viewer window - but then run() is blocking and execution stops ..
Any idea how to fix that ?
Thanks
Lior

Build Errors - Portable File Dialogs header

Hello,

I was using one of the previous version of this library and everything was working very nice.
I was trying to build and run the newest version, however i have problem to build it.

I am using QtCreator in order to build the code however it seems that there are some errors in a header file called portable-file-dialogs.h. I am using QtCreator in windows machine. Here are some of the errors:

Easy3D-master\3rd_party\portable_file_dialogs\portable_file_dialogs.h:677: error: 'lstrcpyW_instead_use_StringCbCopyW_or_StringCchCopyW' was not declared in this scope
lstrcpyW(ofn.lpstrFile, m_wdefault_path.c_str());

Easy3D-master\3rd_party\portable_file_dialogs\portable_file_dialogs.h:952: error: invalid use of incomplete type 'IFileDialog {aka struct IFileDialog}'

         hr = ifd->GetResult(&item);

C:\Qt\Tools\mingw730_64\x86_64-w64-mingw32\include\combaseapi.h:79: error: invalid static_cast from type 'IFileDialog*' to type 'IUnknown*'

 static_cast<IUnknown *> (*pp);
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Do you have any idea of how to handle the errors below?
Thanks a lot for your time.

Req: About Rotation

implement Rotate model Only X axis and only Y axis method.
surface mesh vertices transform from rotation matrix method.
thanks.

CGAL bug on 32-bit Windows

At line 72 (and other lines below), the following is hardcoded which doesn't run on 32-bit Windows:

#ifdef _MSC_VER
#include <intrin.h>
#pragma intrinsic(_BitScanForward64)
#pragma intrinsic(_BitScanReverse64)
#endif

A workaround is to replace the above code by

#ifdef _MSC_VER
#include <intrin.h>
#ifdef EASY3D_OS_64_BITS
#pragma intrinsic(_BitScanForward64)
#pragma intrinsic(_BitScanReverse64)
#else
#define _BitScanForward64 _BitScanForward
#define _BitScanReverse64 _BitScanReverse
#pragma intrinsic(_BitScanForward64)
#pragma intrinsic(_BitScanReverse64)
#endif
#endif

Use animated models

Is there any helper for rigging in the library? I am looking an easy to use library to show animated meshes. I like this library because it is really easy to use, but I cannot find if it is possible to use bones/animations and so on.

Problem with make

Hello!
Im using Ubutnu 18.04 and terminal versions of cmake and make.
Im clone your repo and
mkdir build && cd ./build
sudo cmake ..
cd ../
sudo make
then get this error

In file included from /home/garaev/Projects/Easy3D/easy3d/viewer/viewer.cpp:62:0:
/home/garaev/Projects/Easy3D/easy3d/util/timer.h: In lambda function:
/home/garaev/Projects/Easy3D/easy3d/util/timer.h:206:31: error: ‘bind’ is not a member of ‘std’
auto f = std::bind(func, owner, std::forward(args)...);
^~~~
/home/garaev/Projects/Easy3D/easy3d/util/timer.h:206:31: note: suggested alternative: ‘find’
auto f = std::bind(func, owner, std::forward(args)...);
^~~~
find
/home/garaev/Projects/Easy3D/easy3d/util/timer.h: In lambda function:
/home/garaev/Projects/Easy3D/easy3d/util/timer.h:238:27: error: ‘bind’ is not a member of ‘std’
auto f = std::bind(func, owner, std::forward(args)...);
^~~~
/home/garaev/Projects/Easy3D/easy3d/util/timer.h:238:27: note: suggested alternative: ‘find’
auto f = std::bind(func, owner, std::forward(args)...);
^~~~
find
/home/garaev/Projects/Easy3D/easy3d/util/timer.h: In lambda function:
/home/garaev/Projects/Easy3D/easy3d/util/timer.h:273:31: error: ‘bind’ is not a member of ‘std’
auto f = std::bind(func, owner, std::forward(args)...);
^~~~
/home/garaev/Projects/Easy3D/easy3d/util/timer.h:273:31: note: suggested alternative: ‘find’
auto f = std::bind(func, owner, std::forward(args)...);
^~~~
find
easy3d/viewer/CMakeFiles/viewer.dir/build.make:686: recipe for target 'easy3d/viewer/CMakeFiles/viewer.dir/viewer.cpp.o' failed
make[2]: *** [easy3d/viewer/CMakeFiles/viewer.dir/viewer.cpp.o] Error 1
CMakeFiles/Makefile2:609: recipe for target 'easy3d/viewer/CMakeFiles/viewer.dir/all' failed
make[1]: *** [easy3d/viewer/CMakeFiles/viewer.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

How can i solve it?

req: Mapple

hi, dear.

can you give me source code of mapple?

thanks,
jignesh

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.