https://github.com/danielesteban/obj-loader
https://github.com/danielesteban/obj-loader
Last synced: 6 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/danielesteban/obj-loader
- Owner: danielesteban
- Created: 2019-06-24T04:39:30.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2022-11-12T04:14:08.000Z (over 3 years ago)
- Last Synced: 2025-08-02T11:55:12.154Z (12 months ago)
- Language: JavaScript
- Size: 10.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
obj-loader
===
[](https://david-dm.org/danielesteban/obj-loader)
[](https://david-dm.org/danielesteban/obj-loader?type=dev)
### Webpack config
```js
module.exports = {
module: {
rules: [
{
test: /\.obj$/,
loader: 'obj-loader',
},
],
},
};
```
### Client usage
```js
import pako from 'pako';
import Model from '@/models/model.obj';
function FetchModel(url) {
return fetch(url)
.then(res => res.arrayBuffer())
.then((deflated) => {
const { buffer } = pako.inflate(new Uint8Array(deflated));
let offset = 0;
const indexCount = new Uint16Array(buffer, offset, 1)[0];
offset += Uint16Array.BYTES_PER_ELEMENT;
const index = new Uint16Array(buffer, offset, indexCount);
offset += Uint16Array.BYTES_PER_ELEMENT * indexCount;
const vertexCount = new Uint16Array(buffer, offset, 1)[0];
offset += Uint16Array.BYTES_PER_ELEMENT;
const position = new Float32Array(buffer, offset, vertexCount);
offset += Float32Array.BYTES_PER_ELEMENT * vertexCount;
const normal = new Float32Array(buffer, offset, vertexCount);
return {
index,
position,
normal,
};
});
}
FetchModel(Monkey)
.then(({ index, position, normal }) => {
const geometry = new BufferGeometry();
geometry.setIndex(new BufferAttribute(index, 1));
geometry.addAttribute('position', new BufferAttribute(position, 3));
geometry.addAttribute('normal', new BufferAttribute(normal, 3));
});
```