kovacsv / assimpjs Goto Github PK
View Code? Open in Web Editor NEWThe emscripten interface for the assimp library that allows you to import 40+ 3D file formats in the browser.
License: MIT License
The emscripten interface for the assimp library that allows you to import 40+ 3D file formats in the browser.
License: MIT License
First, thanks Viktor, for creating this extremely useful library! I've found it to work much better on my .obj files than the built-in loaders for three.js and babylonjs.
My question: I'm writing a browser app that needs to load very quickly so I'm caching all my resources in IndexedDB on the client side so only the very first load needs to read the source files and other resources (it only loads a package list and verifies the hashes of the cached files). This works well, but assimpjs's loading of its WASM file doesn't work this way. Is there a way I can just hand assimpjs an Blob or ArrayBuffer for the WASM file instead of assimpjs trying to do a request for it?
Hi,
I am trying to convert a gltf2 file into glb2 by adding all the files to the filelist. But the resultant "glb" file still has uri's to texture files.
I used http://3dviewer.net/index.html to visualize the models.
GLTF2 view of model
converted the gltf2 file with the following code.
`assimpjs.then ((ajs) => {
let fileList = new ajs.FileList ();
fileList.AddFile (
'scene.gltf',
fs.readFileSync ("/home/3d-viewer/Microservice-Template/testFiles/breakfast_gltf/scene.gltf")
);
fileList.AddFile (
'scene.bin',
fs.readFileSync ("/home/3d-viewer/Microservice-Template/testFiles/breakfast_gltf/scene.bin")
);
fileList.AddFile (
'lambert1_baseColor.png',
fs.readFileSync ("/home/3d-viewer/Microservice-Template/testFiles/breakfast_gltf/textures/lambert1_baseColor.png")
);
fileList.AddFile (
'lambert1_metallicRoughness.png',
fs.readFileSync ("/home/3d-viewer/Microservice-Template/testFiles/breakfast_gltf/textures/lambert1_metallicRoughness.png")
);
fileList.AddFile (
'lambert1_normal.png',
fs.readFileSync ("/home/3d-viewer/Microservice-Template/testFiles/breakfast_gltf/textures/lambert1_normal.png")
);
// convert file list to assimp json
let result = ajs.ConvertFileList (fileList, 'glb2');
// check if the conversion succeeded
if (!result.IsSuccess () || result.FileCount () == 0) {
const errorCode = result.GetErrorCode ()
console.log("errorCode", errorCode)
return
}
// get the result file, and convert to string
let resultFile = result.GetFile (0);
fs.writeFile(`breakfastTestGltf.glb`, resultFile.GetContent(), (e) => {
if (e) {
const errorCode = result.GetErrorCode ()
console.log("error", e, errorCode);
} else {
console.log("success");
}
})
});`
The generated glb file gave the following view. It missed the texture files. 3dViewer mentioned regarding the missing files and glb file still had some urls of texture files.
Is this not the right way to do it?
Hello, it would be good if the library can export an scene, either created or imported from a file, to another format. For example import an fbx
file and export it to glb
.
The documentation states this can be done as follows:
bool exporterTest() override {
::Assimp::Importer importer;
::Assimp::Exporter exporter;
const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/OBJ/spider.obj", aiProcess_ValidateDataStructure);
exporter.Export(scene, "obj", ASSIMP_TEST_MODELS_DIR "/OBJ/spider_out.obj");
return true;
}
I have tried it
static bool exporterTest(const aiScene* scene) {
Assimp::Exporter exporter;
try {
if (AI_SUCCESS == exporter.Export(scene, "glb", "spider_out.glb")) {
std::cout << "Exporting file...";
};
return true;
} catch (const std::exception& e) {
std::cout << e.what();
return false;
}
}
However it is not writing the file to the filesystem.
I call this function from the ImportFileListByMainFile
for the sake of testing.
Hopefully this can be done.
Thank you very much!
Hi Viktor.
Just to ask if it would be possible to add a download link to your demo page so the created JSON file could be downloaded as a file.
Since you already have a demo page setup then it would be only for convenience and nothing else.
This topic can be closed at any time.
Good afternoon. I want to test this example with https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/InterpolationTest different type of actions. Right now, when exiting assimp, I can't get information about the type of interpolation that should be used for each specific action.
Hi Viktor.
Just to ask if your code could be adjusted to deal with a specific format as a primary format?
For example, IRR files appear to be a scene that can contain other file formats (like X or IRRMESH) and this PR in the ASSIMP repository shows what an IRR scene would look like.
As per the mentioned example, if I try to use my viewer with it then it's a hit and miss of which file format is to be treated as primary, the following are the examples:
scenegraphAnimMod.irr
file all by itself will show the shapes from the scenescenegraphAnimMod.irr
+ dwarf.x
files will show the dwarfscenegraphAnimMod.irr
+ cellar.irrmesh
files will show the cellarscenegraphAnimMod.irr
+ dwarf.x
+ cellar.irrmesh
files will show the cellarscenegraphAnimMod.irr
+ dwarf.x
+ cellar.irrmesh
+ textures
will show textured cellarI mainly code in TypeScript, and it would be beneficial to have compile-time type checking for this library, both in debugging and in production. I noticed the relevant issue in emscripten's repo was closed, and support for it was implemented, so maybe we could use that?
This is intended for those who would like to see ASSIMP(JS) working in the browser.
The ASSIMP Viewer, which is a part of my repository, is sort of a hybrid between ASSIMPJS
and three.js
and can show a multitude of different 3D models (see the description in the repository).
Probably the best choice for the models would be the test
folder from the ASSIMP repository, either downloaded to the computer for a local access or used remotely for example with a URL like this: https://raw.githubusercontent.com/assimp/assimp/master/test/models/IQM/mrfixit.iqm
.
If Viktor ever finds a time to update this repository then that my fix some issues that are present currently with a small number of 3D formats. Not all the models in the ASSIMP repository are perfect either and my viewer probably has bugs.
Hi, I've been trying to understand for the past couple of days how the material system works in this port.
Yes, the resulting JSON has a material property, but it is basically unusable due to the lack of information around it.
It would be very helpful if there was some pathway to understanding it.
Thanks in advance.
I don't know C++, so I cannot add an importer to the original C++ source; can it be done in JS?
Good day. The Readme states that only the .gltf format is currently supported. I have tried uploading .fbx and .obj files and they also work correctly. Do you plan to disable support for other formats other than .gltf in the future?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.