Mesh Resources Reference

Authors: Xunyi, youyou

Mesh resources are the necessary resource for rendering a mesh. The mesh can be obtained in a variety of ways:

  • Automatically generated by the editor when importing the model into the editor
  • Users can manually create or modify meshes from the script, it is very convenient to customize your own mesh by this way

A Mesh resource contains a set of vertex and multiple sets of indices. The index points to the vertex in the vertex array, and each three sets of indexes form a triangle. The mesh is comprised of multiple triangles.

Mesh resources support dynamic modification of vertex data and index data, and provides two simple APIs to use. Please refer to the API introduction below for details.

API introduction

  • init(vertexFormat, vertexCount, dynamic)

Mesh resources allow custom vertex data, and users can set the properties of vertex data according to their own needs.
The init function creates internal vertex data based on the incoming vertex format vertexFormat and the number of vertices vertexCount. If vertex data is modified frequently, then dynamic should be set to true.

  • setVertices(name, values, index)

We can modify the corresponding data to values according to the incoming vertex property name name, index indicates which set of vertex data is modified, the default is 0.

  • setIndices(indices, index)

Modify the data of the specified index array to indices. index indicates which set of index data is modified. The default is 0.

Example

When the user needs to create a mesh dynamically in the code, the first thing to point out is the format of the vertex data storage in the mesh.

    let gfx = cc.renderer.renderEngine.gfx;

    // Define the vertex data format, only need to indicate the required properties, to avoid the waste of storage space
    var vfmtPosColor = new gfx.VertexFormat([
        // The user needs to create a three-dimensional box, so three values are required to save the location information
        { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 3 },
        { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },
        { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },
    ]);

    let mesh = new cc.Mesh();
    // Initialize mesh information
    mesh.init(vfmtPosColor, 8, true);
    // modify the position vertex data
    mesh.setVertices(gfx.ATTR_POSITION, [
        cc.v3(-100, 100, 100), cc.v3(-100, -100, 100), cc.v3(100, 100, 100), cc.v3(100, -100, 100),
        cc.v3(-100, 100, -100), cc.v3(-100, -100, -100), cc.v3(100, 100, -100), cc.v3(100, -100, -100)
    ]);

    // modify the color vertex data
    let color1 = cc.Color.RED;
    let color2 = cc.Color.BLUE;
    mesh.setVertices(gfx.ATTR_COLOR, [
        color1, color1, color1, color1,
        color2, color2, color2, color2,
    ]);

    // modify the uv vertex data
    mesh.setVertices(gfx.ATTR_UV0, [
        cc.v2(0,0), cc.v2(0, 1), cc.v2(1, 0), cc.v2(1, 1),
        cc.v2(1,1), cc.v2(1, 0), cc.v2(0, 1), cc.v2(0, 0),
    ]);

    // modify the index data
    mesh.setIndices([
        0, 1, 2, 1, 3, 2, // front
        0, 6, 4, 0, 2, 6, // top
        2, 7, 6, 2, 3, 7, // right
        0, 5, 4, 0, 1, 5, // left
        1, 7, 5, 1, 3, 7, // bottom,
        4, 5, 6, 5, 7, 6, // back
    ]);

results matching ""

    No results matching ""