C++ 类实现向量数组生成 Mesh,支持实时修改向量数值和颜色
C++ 类实现向量数组生成 Mesh,支持实时修改向量数值和颜色
本文将介绍用 C++ 定义一个类,实现向量数组生成 Mesh 的功能,并提供实时修改向量数值和颜色的接口。该类包含以下功能:
- 拥有一个向量数组,此数组中有 4 个 3D 向量,向量拥有接口以接收数值
- 在程序运行过程中,向量数值可以即时修改并应用
- 根据向量数组生成 Mesh
- 向量可以定义 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。
原文地址: https://www.cveoy.top/t/topic/m9O5 著作权归作者所有。请勿转载和采集!