MCPcopy Create free account
hub / github.com/galacean/engine / createCustomMesh

Function createCustomMesh

examples/src/buffer-mesh-instance.ts:62–137  ·  view source on GitHub ↗

* Create cube geometry with custom BufferGeometry. * @param engine - Engine * @param size - Cube size * @returns Cube mesh

(engine: Engine, size: number)

Source from the content-addressed store, hash-verified

60 * @returns Cube mesh
61 */
62function createCustomMesh(engine: Engine, size: number): Mesh {
63 const geometry = new BufferMesh(engine, "CustomCubeGeometry");
64
65 // Create vertices data.
66 // prettier-ignore
67 const vertices: Float32Array = new Float32Array([
68 // Up
69 -size, size, -size, 0, 1, 0, size, size, -size, 0, 1, 0, size, size, size, 0, 1, 0, -size, size, size, 0, 1, 0,
70 // Down
71 -size, -size, -size, 0, -1, 0, size, -size, -size, 0, -1, 0, size, -size, size, 0, -1, 0, -size, -size, size, 0, -1, 0,
72 // Left
73 -size, size, -size, -1, 0, 0, -size, size, size, -1, 0, 0, -size, -size, size, -1, 0, 0, -size, -size, -size, -1, 0, 0,
74 // Right
75 size, size, -size, 1, 0, 0, size, size, size, 1, 0, 0, size, -size, size, 1, 0, 0, size, -size, -size, 1, 0, 0,
76 // Front
77 -size, size, size, 0, 0, 1, size, size, size, 0, 0, 1, size, -size, size, 0, 0, 1, -size, -size, size, 0, 0, 1,
78 // Back
79 -size, size, -size, 0, 0, -1, size, size, -size, 0, 0, -1, size, -size, -size, 0, 0, -1, -size, -size, -size, 0, 0, -1]);
80
81 // Create instance data.
82 const instanceCount = 4000;
83 const instanceStride = 6;
84 const instanceData: Float32Array = new Float32Array(instanceCount * instanceStride);
85 for (let i = 0; i < instanceCount; i++) {
86 const offset = i * instanceStride;
87 // instance offset
88 instanceData[offset] = (Math.random() - 0.5) * 60;
89 instanceData[offset + 1] = (Math.random() - 0.5) * 60;
90 instanceData[offset + 2] = (Math.random() - 0.5) * 60;
91 // instance color
92 instanceData[offset + 3] = Math.random();
93 instanceData[offset + 4] = Math.random();
94 instanceData[offset + 5] = Math.random();
95 }
96
97 // Create indices data.
98 // prettier-ignore
99 const indices: Uint16Array = new Uint16Array([
100 // Up
101 0, 2, 1, 2, 0, 3,
102 // Down
103 4, 6, 7, 6, 4, 5,
104 // Left
105 8, 10, 9, 10, 8, 11,
106 // Right
107 12, 14, 15, 14, 12, 13,
108 // Front
109 16, 18, 17, 18, 16, 19,
110 // Back
111 20, 22, 23, 22, 20, 21]);
112
113 // Create gpu vertex buffer and index buffer.
114 const vertexBuffer = new Buffer(engine, BufferBindFlag.VertexBuffer, vertices, BufferUsage.Static);
115 const instanceVertexBuffer = new Buffer(engine, BufferBindFlag.VertexBuffer, instanceData, BufferUsage.Static);
116 const indexBuffer = new Buffer(engine, BufferBindFlag.IndexBuffer, indices, BufferUsage.Static);
117
118 // Bind buffer
119 geometry.setVertexBufferBinding(vertexBuffer, 24, 0);

Callers 1

Calls 4

setIndexBufferBindingMethod · 0.95
setVertexElementsMethod · 0.95
randomMethod · 0.80

Tested by

no test coverage detected