C++ 类实现向量数组生成 Mesh,支持实时修改向量数值和颜色

本文将介绍用 C++ 定义一个类,实现向量数组生成 Mesh 的功能,并提供实时修改向量数值和颜色的接口。该类包含以下功能:

  1. 拥有一个向量数组,此数组中有 4 个 3D 向量,向量拥有接口以接收数值
  2. 在程序运行过程中,向量数值可以即时修改并应用
  3. 根据向量数组生成 Mesh
  4. 向量可以定义 RGBA 的值,并拥有接口以接收数值内容

以下是可能的实现:

#include <vector>
#include <array>
#include <iostream>

// 3D 向量类
class Vector3D {
public:
    Vector3D(float x = 0.0f, float y = 0.0f, float z = 0.0f) : x(x), y(y), z(z) {}
    float x, y, z;
};

// RGBA 颜色类
class Color {
public:
    Color(float r = 0.0f, float g = 0.0f, float b = 0.0f, float a = 1.0f) : r(r), g(g), b(b), a(a) {}
    float r, g, b, a;
};

// Mesh 类
class Mesh {
public:
    Mesh(const std::vector<Vector3D>& vertices, const Color& color) : vertices(vertices), color(color) {}
    std::vector<Vector3D> vertices;
    Color color;
};

// 向量数组类
class VectorArray {
public:
    VectorArray() {
        // 初始化数组
        for (int i = 0; i < 4; i++) {
            vectors[i] = Vector3D();
        }
    }
    // 获取向量
    Vector3D& operator[](int index) {
        return vectors[index];
    }
    // 获取颜色
    Color& color() {
        return m_color;
    }
    // 生成 mesh
    Mesh generateMesh() {
        std::vector<Vector3D> vertices;
        for (int i = 0; i < 4; i++) {
            vertices.push_back(vectors[i]);
        }
        return Mesh(vertices, m_color);
    }
private:
    std::array<Vector3D, 4> vectors;
    Color m_color;
};

int main() {
    VectorArray va;
    va[0] = Vector3D(0.0f, 0.0f, 0.0f);
    va[1] = Vector3D(1.0f, 0.0f, 0.0f);
    va[2] = Vector3D(1.0f, 1.0f, 0.0f);
    va[3] = Vector3D(0.0f, 1.0f, 0.0f);
    va.color() = Color(1.0f, 0.0f, 0.0f, 1.0f);
    Mesh mesh = va.generateMesh();
    std::cout << "Mesh vertices: ";
    for (auto& v : mesh.vertices) {
        std::cout << "(" << v.x << ", " << v.y << ", " << v.z << ") ";
    }
    std::cout << std::endl;
    std::cout << "Mesh color: (" << mesh.color.r << ", " << mesh.color.g << ", " << mesh.color.b << ", " << mesh.color.a << ")" << std::endl;
    va[1].x = 2.0f;
    mesh = va.generateMesh();
    std::cout << "Modified mesh vertices: ";
    for (auto& v : mesh.vertices) {
        std::cout << "(" << v.x << ", " << v.y << ", " << v.z << ") ";
    }
    std::cout << std::endl;
    return 0;
}

该代码中,我们定义了 Vector3D 类来表示 3D 向量,Color 类来表示颜色,Mesh 类来表示 Mesh,以及 VectorArray 类来表示向量数组。VectorArray 类提供了 operator[] 接口用于访问数组中的向量,color() 接口用于获取和设置颜色,以及 generateMesh() 接口用于生成 Mesh。

在主函数中,我们首先通过给向量数组的 4 个元素赋值来定义了一个矩形的 4 个顶点,然后通过调用 color() 接口来设置颜色为红色,接着通过调用 generateMesh() 接口来生成 Mesh,并输出 Mesh 的顶点坐标和颜色。最后,我们修改数组中第二个向量的 x 坐标为 2.0f,再次生成 Mesh 并输出结果,可以看到第二个顶点的 x 坐标已经变为 2.0f。

这个类实现了所有要求的功能,并提供了清晰的接口,方便用户使用。用户可以通过修改向量数组中的向量数值和颜色,以及调用 generateMesh() 接口来实时生成和修改 Mesh。

C++ 类实现向量数组生成 Mesh,支持实时修改向量数值和颜色

原文地址: https://www.cveoy.top/t/topic/m9O5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录