使用ASIMP将三维模型转换为二维 < >我用C++翻译一个使用命令行参数输入的三维模型,在ASSIMP中输入2D图片。然而,我不确定最好的方法是什么。我有创建集合对象的基本硬编码,但是我需要使用向量和循环来重做它。最好的办法是什么 void createSimpleQuad(Mesh &m) { // Clear out vertices and elements m.vertices.clear(); m.indices.clear(); // Create four corners Vertex upperLeft, upperRight; Vertex lowerLeft, lowerRight; Vertex upperMiddle; // Set positions of vertices // Note: glm::vec3(x, y, z) upperLeft.position = glm::vec3(-0.5, 0.5, 0.0); upperRight.position = glm::vec3(0.5, 0.5, 0.0); lowerLeft.position = glm::vec3(-0.5, -0.5, 0.0); lowerRight.position = glm::vec3(0.5, -0.5, 0.0); upperMiddle.position = glm::vec3(-0.9, 0.5, 0.0); // Set vertex colors (red, green, blue, white) // Note: glm::vec4(red, green, blue, alpha) upperLeft.color = glm::vec4(1.0, 0.0, 0.0, 1.0); upperRight.color = glm::vec4(0.0, 1.0, 0.0, 1.0); lowerLeft.color = glm::vec4(0.0, 0.0, 1.0, 1.0); lowerRight.color = glm::vec4(1.0, 1.0, 1.0, 1.0); upperMiddle.color = glm::vec4(0.5, 0.15, 0.979797979, 1.0); // Add to mesh's list of vertices m.vertices.push_back(upperLeft); m.vertices.push_back(upperRight); m.vertices.push_back(lowerLeft); m.vertices.push_back(lowerRight); m.vertices.push_back(upperMiddle); // Add indices for two triangles m.indices.push_back(0); m.indices.push_back(3); m.indices.push_back(1); m.indices.push_back(0); m.indices.push_back(2); m.indices.push_back(3); m.indices.push_back(0); m.indices.push_back(2); m.indices.push_back(4); }

使用ASIMP将三维模型转换为二维 < >我用C++翻译一个使用命令行参数输入的三维模型,在ASSIMP中输入2D图片。然而,我不确定最好的方法是什么。我有创建集合对象的基本硬编码,但是我需要使用向量和循环来重做它。最好的办法是什么 void createSimpleQuad(Mesh &m) { // Clear out vertices and elements m.vertices.clear(); m.indices.clear(); // Create four corners Vertex upperLeft, upperRight; Vertex lowerLeft, lowerRight; Vertex upperMiddle; // Set positions of vertices // Note: glm::vec3(x, y, z) upperLeft.position = glm::vec3(-0.5, 0.5, 0.0); upperRight.position = glm::vec3(0.5, 0.5, 0.0); lowerLeft.position = glm::vec3(-0.5, -0.5, 0.0); lowerRight.position = glm::vec3(0.5, -0.5, 0.0); upperMiddle.position = glm::vec3(-0.9, 0.5, 0.0); // Set vertex colors (red, green, blue, white) // Note: glm::vec4(red, green, blue, alpha) upperLeft.color = glm::vec4(1.0, 0.0, 0.0, 1.0); upperRight.color = glm::vec4(0.0, 1.0, 0.0, 1.0); lowerLeft.color = glm::vec4(0.0, 0.0, 1.0, 1.0); lowerRight.color = glm::vec4(1.0, 1.0, 1.0, 1.0); upperMiddle.color = glm::vec4(0.5, 0.15, 0.979797979, 1.0); // Add to mesh's list of vertices m.vertices.push_back(upperLeft); m.vertices.push_back(upperRight); m.vertices.push_back(lowerLeft); m.vertices.push_back(lowerRight); m.vertices.push_back(upperMiddle); // Add indices for two triangles m.indices.push_back(0); m.indices.push_back(3); m.indices.push_back(1); m.indices.push_back(0); m.indices.push_back(2); m.indices.push_back(3); m.indices.push_back(0); m.indices.push_back(2); m.indices.push_back(4); },c++,loops,assimp,C++,Loops,Assimp,如果要从三维模型生成二维图片,需要: 导入模型 通过公共渲染库将其渲染到纹理中,或使用查看器手动渲染并拍摄快照 目前,在Assimp中没有自动生成二维视图的后期处理 但是,当您希望使用自己的渲染代码执行此操作时,这并不难做到。导入模型后,您必须: 获取导入资产的边界框,只需查看assimp repo中的opengl示例,了解一些提示 计算此边界框的直径 创建相机,对于OpenGL,可以使用glm计算视图矩阵 将资源放置在(0 | 0 | 0)世界坐标系 将相机移动到(0 | 0 | 0)处的直径

如果要从三维模型生成二维图片,需要:

  • 导入模型
  • 通过公共渲染库将其渲染到纹理中,或使用查看器手动渲染并拍摄快照
  • 目前,在Assimp中没有自动生成二维视图的后期处理

    但是,当您希望使用自己的渲染代码执行此操作时,这并不难做到。导入模型后,您必须:

  • 获取导入资产的边界框,只需查看assimp repo中的opengl示例,了解一些提示
  • 计算此边界框的直径
  • 创建相机,对于OpenGL,可以使用glm计算视图矩阵
  • 将资源放置在(0 | 0 | 0)世界坐标系
  • 将相机移动到(0 | 0 | 0)处的直径,让其查看
  • 将视图渲染为2D纹理或仅拍摄屏幕截图