我想具体化一个函数,我只有写好像不对
// 模板函数,用于给顶点赋值
template <typename T1, typename T2>
T2* VertexAssign(T1& M) {
// 创建一个新的T2对象
T2* v = new T2;
// 获取模型的顶点、法线和纹理坐标
std::vector<glm::vec3> Vertices = M.getVertices();
std::vector<glm::vec3> NormalVector = M.getNormals();
std::vector<glm::vec2> Texture = M.getTexCoords();
// 获取模型的索引和索引数量
v->Index = M.getIndices();
v->VertexCount = M.getNumIndices();
// 获取模型中的顶点数量
int loop = M.getNumVertices();
for (int i = 0; i < loop; i++) {
// 将每个顶点的x, y, z坐标赋值给Vertex类中的数组
v->Vertex.push_back(Vertices[i].x);
v->Vertex.push_back(Vertices[i].y);
v->Vertex.push_back(Vertices[i].z);
// 将每个法线的x, y, z坐标赋值给NormalVector类中的数组
v->NormalVector.push_back(NormalVector[i].x);
v->NormalVector.push_back(NormalVector[i].y);
v->NormalVector.push_back(NormalVector[i].z);
// 将每个纹理坐标的s, t坐标赋值给Texture类中的数组
v->Texture.push_back(Texture[i].s);
v->Texture.push_back(Texture[i].t);
}
return v;
}
template <>
VertexClass* VertexAssign<ImportedModel, VertexClass>(ImportedModel& M) {
// 创建一个新的VertexClass对象
VertexClass* v = new VertexClass;
// 获取模型的顶点、法线和纹理坐标
std::vector<glm::vec3> Vertices = M.getVertices();
std::vector<glm::vec3> NormalVector = M.getNormals();
std::vector<glm::vec2> Texture = M.getTextureCoords();
// 获取模型中的顶点数量
int loop = M.getNumVertices();
v->VertexCount = loop;
for (int i = 0; i < loop; i++) {
// 将每个顶点的x, y, z坐标赋值给Vertex类中的数组
v->Vertex.push_back(Vertices[i].x);
v->Vertex.push_back(Vertices[i].y);
v->Vertex.push_back(Vertices[i].z);
// 将每个法线的x, y, z坐标赋值给NormalVector类中的数组
v->NormalVector.push_back(NormalVector[i].x);
v->NormalVector.push_back(NormalVector[i].y);
v->NormalVector.push_back(NormalVector[i].z);
// 将每个纹理坐标的s, t坐标赋值给Texture类中的数组
v->Texture.push_back(Texture[i].s);
v->Texture.push_back(Texture[i].t);
}
return v;
}
template <typename T1>
VertexCutClass* VertexAssign<T1 , VertexCutClass>(T1& M) {
// 创建一个新的VertexCutClass对象
VertexCutClass* v = new VertexCutClass;
// 获取模型的顶点、法线和纹理坐标
std::vector<glm::vec3> Vertices = M.getVertices();
std::vector<glm::vec3> NormalVector = M.getNormals();
std::vector<glm::vec2> Texture = M.getTexCoords();
// 获取模型的索引和索引数量
v->Index = M.getIndices();
v->VertexCount = M.getNumIndices();
// 获取模型中的顶点数量
int loop = M.getNumVertices();
for (int i = 0; i < loop; i++) {
// 将每个顶点的x, y, z坐标赋值给Vertex类中的数组
v->Vertex.push_back(Vertices[i].x);
v->Vertex.push_back(Vertices[i].y);
v->Vertex.push_back(Vertices[i].z);
// 将每个法线的x, y, z坐标赋值给NormalVector类中的数组
v->NormalVector.push_back(NormalVector[i].x);
v->NormalVector.push_back(NormalVector[i].y);
v->NormalVector.push_back(NormalVector[i].z);
// 将每个纹理坐标的s, t坐标赋值给Texture类中的数组
v->Texture.push_back(Texture[i].s);
v->Texture.push_back(Texture[i].t);
}
return v;
}
这样写好像不对
template <typename T1>
VertexCutClass* VertexAssign<T1 , VertexCutClass>(T1& M)
函数不支持 partial specilization 。
可以直接重载: