mirror of
https://github.com/visgl/luma.gl.git
synced 2025-12-08 17:36:19 +00:00
98 lines
4.0 KiB
Markdown
98 lines
4.0 KiB
Markdown
# Geometry
|
|
|
|
The Geometry class holds a collection of vertex array attributes representing a geometric primitive.
|
|
|
|
A geometry is considered a "primitive" when it can be rendered with a single GPU draw call. Multiple geometry primitives can be composed into a composite geometry using the `Mesh` and `Model` classes.
|
|
|
|
To learn more about attributes refer to the `Accessor` class that holds metadata for each attributes.
|
|
|
|
## Usage
|
|
|
|
Create a pyramid geometry (used in lesson 4 of learning WebGL examples).
|
|
|
|
```typescript
|
|
const pyramidGeometry= new Geometry({
|
|
attributes: {
|
|
positions: new Float32Array([ ... ]),
|
|
colors: {
|
|
size: 4,
|
|
value: new Float32Array([ ... ])
|
|
}
|
|
}
|
|
});
|
|
```
|
|
|
|
## Properties
|
|
|
|
### `id` - (_string_, optional)
|
|
|
|
An id for the model. If not provided, a random unique identifier will be created.
|
|
|
|
### drawMode : number
|
|
|
|
The draw mode, or primitive type.
|
|
|
|
Some options are `GL.TRIANGLES` (default), `GL.TRIANGLE_STRIP`, `GL.POINTS`, `GL.LINES`.
|
|
|
|
### `attributes` - (_object_, optional)
|
|
|
|
An object with buffer/attribute names and buffer/attribute descriptors to be set before rendering the model.
|
|
|
|
### attributes : Object
|
|
|
|
A map of `Accessor` instances describing the geometry of this primitive.
|
|
|
|
### indices : Accessor
|
|
|
|
An optional `Accessor` instance that contains the indices (aka elements) for this geometry. Can be `null` or `undefined` if this primitive doesn't use indices. Note that indices can also be stored inside `attributes`.
|
|
|
|
### material : Object
|
|
|
|
An object with key/value pairs that indicate how various uniforms should be set up before the GPU draw call. The `Geometry` class itself does not directly use the contents of the `material` field, however other classes such as `Mesh` will refer to it if available, and normally expects it to be set to an instance of the `Material` class.
|
|
|
|
## Methods
|
|
|
|
### constructor(props : Object)
|
|
|
|
The constructor for the `Geometry` class. Use this to create a new `Geometry`.
|
|
|
|
```typescript
|
|
const geometry = new Geometry(props);
|
|
```
|
|
|
|
### setProps(props : Object)
|
|
|
|
Update properties
|
|
|
|
## Types and Enumerations
|
|
|
|
### drawMode
|
|
|
|
Follows glTF/OpenGL/WebGL conventions:
|
|
|
|
| Value | Primitive Mode |
|
|
| ----- | ---------------- |
|
|
| `0` | `POINTS` |
|
|
| `1` | `LINES` |
|
|
| `2` | `LINE_LOOP` |
|
|
| `3` | `LINE_STRIP` |
|
|
| `4` | `TRIANGLES` |
|
|
| `5` | `TRIANGLE_STRIP` |
|
|
| `6` | `TRIANGLE_FAN` |
|
|
|
|
### Typical Attributes
|
|
|
|
| Attribute | Description |
|
|
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
| `indices` | (_array_, optional) An array of numbers describing the vertex indices for each face. |
|
|
| `positions` | (_array_, optional) An array of floats that describe the vertices of the model. |
|
|
| `normals` | (_array_, optional) An array of floats that describe the normals of the model. |
|
|
| `texCoords` | (_mixed_, optional) Can be an array of floats indicating the texture coordinates for the texture to be used or an object that has texture ids as | keys and an array of floats as values. |
|
|
| `colors` | (_array_, optional) An array of colors in RGBA. If just one color is specified that color will be used for all faces. |
|
|
| `pickingColors` | (_array_, optional) A custom set of colors to render the object to texture when performing the color picking algorithm. |
|
|
|
|
## Remarks
|
|
|
|
- The Geometry class does not take a `WebGLRenderingContext` and is intentionally
|
|
- The `Geometry` class holds the [glTF2 "primitive" specification](https://github.com/KhronosGroup/glTF/tree/master/specification/2.0), although morph `targets` are not yet supported.
|