以下是一个可能的实现:

#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;
}

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


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

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