Constructor
new Mesh()
Create an empty mesh
- Source
const mesh = buildLathe([[0, -1], [1, 0], [0, 1]], 4); // octahedron
mesh.render(buildMatrix(vec3(0, 1, 0)), undefined, RED);Members
buffer :WebGLBuffer|undefined
- WebGLBuffer |
undefined
| Type | Description |
|---|---|
| WebGLBuffer | | GPU buffer, created by upload |
- Source
bufferCount
Properties| Type | Description |
|---|---|
| number | Vertices in the GPU buffer |
- Source
colors :Array.<Color>
- Array.<Color>
| Type | Description |
|---|---|
| Array.<Color> | Vertex colors |
- Source
dirty
Properties| Type | Description |
|---|---|
| boolean | The mesh changed and needs uploading again, set it yourself if you edit the arrays |
- Source
instanced :boolean|undefined
- boolean |
undefined
| Type | Description |
|---|---|
| boolean | | Draw every use of this mesh in the opaque stage as one instanced call, undefined follows render3D.instancing |
- Source
normals :Array.<Vector3>
- Array.<Vector3>
| Type | Description |
|---|---|
| Array.<Vector3> | Vertex normals |
- Source
points :Array.<Vector3>
- Array.<Vector3>
| Type | Description |
|---|---|
| Array.<Vector3> | Vertex positions in strip order |
- Source
radius
Properties| Type | Description |
|---|---|
| number | Bounding sphere radius around the origin, for culling and picking, computed by upload |
- Source
uvs :Array.<Vector2>
- Array.<Vector2>
| Type | Description |
|---|---|
| Array.<Vector2> | Vertex texture coords, 0-1 across the tile |
- Source
vertexCount
Number of vertices in the mesh
- Source
Methods
addQuad(a, b, c, d, coloropt, uvsopt) → {Mesh}
Add a flat quad from four corners in loop order, counter clockwise seen from the front, a is the top left of the texture
| Name | Type | Attributes | Description |
|---|---|---|---|
a | Vector3 | ||
b | Vector3 | ||
c | Vector3 | ||
d | Vector3 | ||
color | Color | | <optional> | One for all or one per corner |
uvs | Array.<Vector2> | <optional> | One per corner, default across the tile |
- Source
- Type:
- Mesh
addStrip(points, normalsopt, uvsopt, colorsopt) → {Mesh}
Add a triangle strip, joined to the previous one by invisible flat triangles so one mesh holds many strips
- Strip order: the first three points make a triangle, then each point makes another with the two before it
- List the first three points counter clockwise as seen from the front, or the face points away and may vanish when back faces are culled
| Name | Type | Attributes | Description |
|---|---|---|---|
points | Array.<Vector3> | Strip order | |
normals | Vector3 | | <optional> | One for all or one per point, default up |
uvs | Vector2 | | <optional> | One for all or one per point, default zero |
colors | Color | | <optional> | One for all or one per point, default white |
- Source
- Type:
- Mesh
center() → {Mesh}
Move the mesh so the center of its bounds is on the origin
- Source
- Type:
- Mesh
combine(mesh, matrixopt, coloropt) → {Mesh}
Append another mesh transformed by a matrix, for building one shape out of several
| Name | Type | Attributes | Description |
|---|---|---|---|
mesh | Mesh | ||
matrix | Matrix4 | | <optional> | Transform, or just a position to move it to |
color | Color | <optional> | Multiplies the appended vertex colors |
- Source
- Type:
- Mesh
computeNormals(smoothopt) → {Mesh}
Derive normals from the strip's triangles
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
smooth | boolean | <optional> | false | Round the lighting across faces instead of giving each face a hard edge |
- Source
- Type:
- Mesh
computeRadius() → {number}
Measure the bounding sphere around the origin into radius, called by upload
- Source
- Type:
- number
dispose()
Delete the GPU buffer, the CPU arrays stay so the mesh can be rendered again
- Source
fit(sizeopt) → {Mesh}
Scale the mesh evenly so its largest extent is a size, for loaded models of unknown units
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
size | number | <optional> | 1 |
- Source
- Type:
- Mesh
flipNormals() → {Mesh}
Turn the mesh inside out so it is lit and drawn from within, for rooms and domes
- Source
- Type:
- Mesh
getBounds() → {Object}
Measure the axis aligned box around the vertices
- Source
- Type:
- Object
render(matrixopt, tileInfoopt, coloropt)
Draw the mesh with the current draw state, batched with its other uses in the opaque stage
| Name | Type | Attributes | Description |
|---|---|---|---|
matrix | Matrix4 | | <optional> | Object transform, or just a position to draw it at |
tileInfo | TileInfo | | <optional> | Texture, mesh uvs map across the tile or the whole texture |
color | Color | <optional> | Tint |
- Source
scaleUVs(scale) → {Mesh}
Scale every uv, so a whole texture repeats across the mesh when its TextureInfo wraps
| Name | Type | Description |
|---|---|---|
scale | Vector2 | | Repeats across and up, a number for both |
- Source
- Type:
- Mesh
setColor(color) → {Mesh}
Set every vertex color
| Name | Type | Description |
|---|---|---|
color | Color |
- Source
- Type:
- Mesh
transform(matrix) → {Mesh}
Move, turn or scale every vertex in place, normals follow along
| Name | Type | Description |
|---|---|---|
matrix | Matrix4 | | Transform, or just an offset to move by |
- Source
- Type:
- Mesh
upload() → {Mesh}
Pack the vertices and create the GPU buffer, called automatically by render
- Source
- Type:
- Mesh