0.3.164 • Published 3 months ago

@thi.ng/geom-io-obj v0.3.164

Weekly downloads
64
License
Apache-2.0
Repository
github
Last release
3 months ago

geom-io-obj

npm version npm downloads Twitter Follow

This project is part of the @thi.ng/umbrella monorepo.

About

Wavefront OBJ parser (& exporter soon). This is a support package for @thi.ng/geom.

Features

  • Geometry split into declared objects & groups by default (can be disabled)
  • Full support for n-gon faces, polylines
  • Optional n-gon face tessellation into triangles
  • Support for relative (negative) vertex references
  • Optional vertex, normal & UV transforms (e.g. convert Y-up / Z-up, flip UVs)
  • Skip parsing/processing of UVs and/or normals
  • Per group mtllib and usemtl references
  • Per group smooth flags
  • Optionally retained comments (e.g. for additional metadata parsing)
  • Fast (~100 verts, normals & faces per millisecond, MBP2015, Node 13.10)

Planned features

  • OBJ export
  • MTL parser

Status

ALPHA - bleeding edge / work-in-progress

Search or submit any issues for this package

Installation

yarn add @thi.ng/geom-io-obj

ES module import:

<script type="module" src="https://cdn.skypack.dev/@thi.ng/geom-io-obj"></script>

Skypack documentation

For Node.js REPL:

# with flag only for < v16
node --experimental-repl-await

> const geomIoObj = await import("@thi.ng/geom-io-obj");

Package sizes (gzipped, pre-treeshake): ESM: 1.03 KB

Dependencies

API

Generated API docs

TODO

See api.ts for details about resulting data structure. Also see tests for more.

import { parseObj } from "@thi.ng/geom-io-obj";

const src = `
# test cube

v 1.0000 1.0000 1.0000
v 1.0000 1.0000 0.0000
v 1.0000 0.0000 0.0000
v 1.0000 0.0000 1.0000
v 0.0000 1.0000 0.0000
v 0.0000 1.0000 1.0000
v 0.0000 0.0000 1.0000
v 0.0000 0.0000 0.0000

# quad faces
f 4 3 2 1
f 8 7 6 5
f 6 1 2 5
f 8 3 4 7
f 7 4 1 6
f 3 8 5 2
`;

// parse with defaults
const model = parseObj(src);

console.log(model.vertices);
// [
//   [ 1, 1, 1 ],
//   [ 1, 1, 0 ],
//   [ 1, 0, 0 ],
//   [ 1, 0, 1 ],
//   [ 0, 1, 0 ],
//   [ 0, 1, 1 ],
//   [ 0, 0, 1 ],
//   [ 0, 0, 0 ]
// ]

// vertex indices now zero-based (instead of 1-based in OBJ)
console.log(model.objects[0].groups[0].faces);
// [
//   { v: [ 3, 2, 1, 0 ] },
//   { v: [ 7, 6, 5, 4 ] },
//   { v: [ 5, 0, 1, 4 ] },
//   { v: [ 7, 2, 3, 6 ] },
//   { v: [ 6, 3, 0, 5 ] },
//   { v: [ 2, 7, 4, 1 ] }
// ]

Benchmarks

Benchmark uses a quad-mesh model with 143,423 vertices, same number of normals and 142,802 quad faces (filesize 43.7MB).

benchmarking: parse
        warmup... 7299.40ms (5 runs)
        executing...
        total: 13795.25ms, runs: 10
        mean: 1379.52ms, median: 1379.91ms, range: [1356.43..1431.49]
        q1: 1362.21ms, q3: 1415.23ms
        sd: 1.77%

benchmarking: parse w/ tessellation
        warmup... 7752.45ms (5 runs)
        executing...
        total: 15170.43ms, runs: 10
        mean: 1517.04ms, median: 1540.89ms, range: [1425.28..1616.09]
        q1: 1487.29ms, q3: 1551.26ms
        sd: 3.35%

Authors

Karsten Schmidt

If this project contributes to an academic publication, please cite it as:

@misc{thing-geom-io-obj,
  title = "@thi.ng/geom-io-obj",
  author = "Karsten Schmidt",
  note = "https://thi.ng/geom-io-obj",
  year = 2016
}

License

© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0

0.3.164

3 months ago

0.3.163

4 months ago

0.3.161

4 months ago

0.3.162

4 months ago

0.3.160

4 months ago

0.3.158

5 months ago

0.3.159

5 months ago

0.3.156

5 months ago

0.3.157

5 months ago

0.3.154

5 months ago

0.3.155

5 months ago

0.3.153

5 months ago

0.3.152

6 months ago

0.3.151

6 months ago

0.3.150

7 months ago

0.3.149

7 months ago

0.3.148

7 months ago

0.3.147

7 months ago

0.3.146

8 months ago

0.3.145

8 months ago

0.3.141

9 months ago

0.3.140

9 months ago

0.3.143

8 months ago

0.3.142

9 months ago

0.3.144

8 months ago

0.3.130

11 months ago

0.3.132

11 months ago

0.3.131

11 months ago

0.3.134

11 months ago

0.3.133

11 months ago

0.3.136

10 months ago

0.3.135

10 months ago

0.3.138

10 months ago

0.3.137

10 months ago

0.3.139

10 months ago

0.3.129

12 months ago

0.3.128

12 months ago

0.3.127

1 year ago

0.3.126

1 year ago

0.3.125

1 year ago

0.3.124

1 year ago

0.3.123

1 year ago

0.3.122

1 year ago

0.3.121

1 year ago

0.3.120

1 year ago

0.3.119

1 year ago

0.3.118

1 year ago

0.3.117

1 year ago

0.3.116

1 year ago

0.3.115

1 year ago

0.3.114

1 year ago

0.3.113

1 year ago

0.3.112

1 year ago

0.3.111

1 year ago

0.3.110

1 year ago

0.3.109

1 year ago

0.3.107

1 year ago

0.3.106

1 year ago

0.3.108

1 year ago

0.3.105

1 year ago

0.3.103

1 year ago

0.3.102

1 year ago

0.3.101

1 year ago

0.3.100

1 year ago

0.3.99

1 year ago

0.3.98

1 year ago

0.3.96

1 year ago

0.3.95

1 year ago

0.3.94

1 year ago

0.3.93

1 year ago

0.3.92

1 year ago

0.3.91

1 year ago

0.3.90

1 year ago

0.3.89

2 years ago

0.3.88

2 years ago

0.3.87

2 years ago

0.3.86

2 years ago

0.3.75

2 years ago

0.3.74

2 years ago

0.3.73

2 years ago

0.3.72

2 years ago

0.3.71

2 years ago

0.3.70

2 years ago

0.3.79

2 years ago

0.3.78

2 years ago

0.3.77

2 years ago

0.3.76

2 years ago

0.3.64

2 years ago

0.3.63

2 years ago

0.3.62

2 years ago

0.3.61

2 years ago

0.3.60

2 years ago

0.3.69

2 years ago

0.3.68

2 years ago

0.3.67

2 years ago

0.3.66

2 years ago

0.3.65

2 years ago

0.3.58

2 years ago

0.3.57

2 years ago

0.3.85

2 years ago

0.3.84

2 years ago

0.3.83

2 years ago

0.3.81

2 years ago

0.3.80

2 years ago

0.3.56

2 years ago

0.3.55

2 years ago

0.3.54

2 years ago

0.3.53

2 years ago

0.3.52

2 years ago

0.3.51

2 years ago

0.3.50

2 years ago

0.3.49

2 years ago

0.3.48

2 years ago

0.3.47

2 years ago

0.3.46

2 years ago

0.3.45

2 years ago

0.3.44

2 years ago

0.3.43

2 years ago

0.3.42

2 years ago

0.3.40

2 years ago

0.3.39

2 years ago

0.3.38

2 years ago

0.3.37

2 years ago

0.3.36

2 years ago

0.3.35

2 years ago

0.3.31

3 years ago

0.3.30

3 years ago

0.3.34

3 years ago

0.3.33

3 years ago

0.3.32

3 years ago

0.3.29

3 years ago

0.3.28

3 years ago

0.3.27

3 years ago

0.3.26

3 years ago

0.3.25

3 years ago

0.3.24

3 years ago

0.3.23

3 years ago

0.3.22

3 years ago

0.3.20

3 years ago

0.3.21

3 years ago

0.3.19

3 years ago

0.3.18

3 years ago

0.3.17

3 years ago

0.3.16

3 years ago

0.3.15

3 years ago

0.3.14

3 years ago

0.3.13

3 years ago

0.3.12

3 years ago

0.3.11

3 years ago

0.3.10

3 years ago

0.3.9

3 years ago

0.3.8

3 years ago

0.3.0

4 years ago

0.3.6

4 years ago

0.3.5

4 years ago

0.3.7

4 years ago

0.3.2

4 years ago

0.3.1

4 years ago

0.3.4

4 years ago

0.3.3

4 years ago

0.2.9

4 years ago

0.2.7

4 years ago

0.2.8

4 years ago

0.2.6

4 years ago

0.2.4

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.2.3

4 years ago

0.1.60

4 years ago

0.1.58

4 years ago

0.1.59

4 years ago

0.1.57

4 years ago

0.1.55

4 years ago

0.1.56

4 years ago

0.1.53

4 years ago

0.1.54

4 years ago

0.1.52

4 years ago

0.1.51

4 years ago

0.1.50

4 years ago

0.1.49

4 years ago

0.1.48

4 years ago

0.1.47

4 years ago

0.1.46

4 years ago

0.1.45

4 years ago

0.1.44

4 years ago

0.1.43

4 years ago

0.1.42

4 years ago

0.1.41

4 years ago

0.1.40

4 years ago

0.1.36

4 years ago

0.1.35

4 years ago

0.1.34

4 years ago

0.1.33

4 years ago

0.1.32

4 years ago

0.1.31

4 years ago

0.1.30

4 years ago

0.1.29

4 years ago

0.1.28

5 years ago

0.1.27

5 years ago

0.1.26

5 years ago

0.1.25

5 years ago

0.1.24

5 years ago

0.1.23

5 years ago

0.1.22

5 years ago

0.1.21

5 years ago

0.1.20

5 years ago

0.1.19

5 years ago

0.1.18

5 years ago

0.1.17

5 years ago

0.1.16

5 years ago

0.1.14

5 years ago

0.1.15

5 years ago

0.1.13

5 years ago

0.1.12

5 years ago

0.1.11

5 years ago

0.1.10

5 years ago

0.1.9

5 years ago

0.1.8

5 years ago

0.1.7

5 years ago

0.1.6

5 years ago

0.1.5

5 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago