dirent
assimp
dirent | assimp | |
---|---|---|
4 | 37 | |
1,013 | 10,283 | |
- | 1.1% | |
5.8 | 9.5 | |
3 months ago | 4 days ago | |
C | C++ | |
MIT License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
dirent
-
Iterate filesystem and store information in a struct array
#include #include #include #include #include #include #include typedef struct file_info { char *path; // ToDo: more info in the future } file_info; // Function prototypes bool is_special_file(const char *file); file_info **find_all_files(const char *root_dir); int find_files(const char *dir_path, file_info ***files, int *cap, int *cnt); file_info *file_info_new(const char *path); int main(int argc, char **argv) { find_all_files("/tmp/test"); // ToDo: Free all the memory correctly return 0; } file_info *file_info_new(const char *path) { file_info *file = malloc(sizeof(file_info)); if (!file) return NULL; file->path = path; return file; } file_info **find_all_files(const char *root_dir) { file_info **files = malloc(sizeof(file_info *)); int capacity = 1; int count = 0; int result = find_files(root_dir, &files, &capacity, &count); printf("Array cap: %d\n", capacity); printf("Array count: %d\n", count); printf("-------------------\n"); for (int i = 0; i < count; i++) { printf("%s\n", files[i]->path); } return files; } // Based on the implementation from https://github.com/tronkko/dirent int find_files(const char *dir_path, file_info ***files, int *cap, int *cnt) { char buffer[PATH_MAX + 2]; char *p = buffer; char *end = &buffer[PATH_MAX]; // Copy directory name to buffer const char *src = dir_path; while (p < end && *src != '\0') { *p++ = *src++; } *p = '\0'; // Open directory stream DIR *dir_stream = opendir(dir_path); if (!dir_stream) { printf("Failed to open %s (%s)\n", dir_path, strerror(errno)); return -1; } // Iterate all files/directories within the directory struct dirent *ent; while ((ent = readdir(dir_stream)) != NULL) { char *q = p; char c; // Get final character of directory name if (buffer < q) c = q[-1]; else c = ':'; // Append directory separator if not already there if (c != ':' && c != '/' && c != '\\') *q++ = '/'; // Append file name to current directory path src = ent->d_name; while (q < end && *src != '\0') { *q++ = *src++; } *q = '\0'; // Resize array if needed if (*cnt == *cap) { int realloc_size = (*cap) * 2; file_info **tmp_files = realloc(*files, realloc_size * sizeof(file_info *)); if (!tmp_files) exit(1); *cap *= 2; *files = tmp_files; } // Process every dirent type switch (ent->d_type) { case DT_LNK: { printf("[LINK] %s\n", buffer); (*files)[*cnt] = file_info_new(buffer); (*cnt)++; break; } case DT_REG: { printf("[FILE] %s\n", buffer); (*files)[*cnt] = file_info_new(buffer); (*cnt)++; break; } case DT_DIR: { if (!is_special_file(ent->d_name)) { printf("[DIR] %s\n", buffer); (*files)[*cnt] = file_info_new(buffer); (*cnt)++; find_files(buffer, files, cap, cnt); } break; } default: break; } } return 0; } bool is_special_file(const char *file) { if (strcmp(file, ".") != 0 && strcmp(file, "..") != 0) return false; return true; }
-
Iterate files/directories/subdirectories in C ?
Thanks for the reply. Yea, I wonder how I would go about implementing an iterative approach tho. I am currently working with the following implementation: https://github.com/tronkko/dirent/blob/master/include/dirent.h
-
How can you iterate up the directory tree until the program gets to the first?
You can use dirent for both if you include a compatibility shim for windows.
-
OGL - A Great Cross Platform OpenGL Base Library With Almost Everything OpenGL You might Ever need
dirent
assimp
- The Asset-Importer-Lib Minor Release Version 5.3.0 is out
-
Quickly setting up a 3D scene?
If you use something like libassimp https://github.com/assimp/assimp it will allow you to import these and access the data to generate your Vertex Array Objects then render to a frame buffer object.
-
Scene organization
If you just want to load other data in a relatively simple fashion, assimp https://www.assimp.org supports loading a bunch of different formats and is pretty easy to use.
-
Noob question: Between WebGL, OpenGL ES and emscripten, what is the recommended usage and relationship between them for creating an interactive browser based graphics app?
The emscripten interface for the assimp library. It runs entirely in the browser, and allows you to import 40+ 3D file formats and access the result in JSON or glTF format. This is not a full port of assimp, but an easy to use interface to access it's functionality.
-
Issues with Assimp Loader and Bones
I ran into what sounds like a similar problem a few months ago. It turns out this was an assimp bug: https://github.com/assimp/assimp/issues/1974
-
What is the best way to read .3DS files?
You could give assimp a go (there is a python version) i've used it for 3DS before then you can export to something else. https://github.com/assimp/assimp/blob/master/port/PyAssimp/README.md
-
How can I retrieve normal scale and occlusion strength properties from GLTF 2.0 PBR materials using Assimp?
I have checked the source code for GLTF for this and it is not handled by Assimp. I created an issue as in their Github.
-
A TRIANGLE!!! with OpenGL! Awesome right? 😅😜
Assimp is your friend
-
Using Assimp library for commercial game development
Have you read the license? It's quite permissive. https://github.com/assimp/assimp/blob/master/LICENSE
-
i wanna turn 3d models into a sprite and a normal map (the same way dead cells does it) Any library recommendations that i can use for this? Simpler and easier to learn the llibrarry the better as this is the only thing i am going to do with it.
There is probably some library more specific to your use case, but you can use assimp to load 3d models in C++.
What are some alternatives?
imgui-node-editor - Node Editor built using Dear ImGui
tinyobjloader - Tiny but powerful single file wavefront obj loader
imgui - Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
cgltf - :diamond_shape_with_a_dot_inside: Single-file glTF 2.0 loader and writer written in C99
TinyErode - A portable C++ library for simulating hydraulic erosion.
android-3D-model-viewer - Android OpenGL 2.0 application to view 3D models. Published on Play Store
libcake - Librairie en C
meshoptimizer - Mesh optimization library that makes meshes smaller and faster to render
glm
ozz-animation - Open source c++ skeletal animation library and toolset
stb - stb single-file public domain libraries for C/C++
tilck - A Tiny Linux-Compatible Kernel