如何解决在 Vulkan 中创建 Linegrid缺少 x 和 y 方向的线[已修复]
我创建了一种创建 3D 线网格的方法。
我将我的代码定位在 DirectX 12 的 3D 游戏编程示例上。
当我运行基于 vulkan 的应用程序时,我得到一个线网格,但缺少 x 和 y 方向的最后一行 (Link to image)。
谁能帮我解决这个问题。
我的第一个想法是渲染选项多边形模式线(VK_polyGON_MODE_LINE
)的问题
和原始拓扑线列表 (VK_PRIMITIVE_TOPOLOGY_LINE_LIST
)。但经过研究,这些功能正在发挥作用。
struct Vertex {
glm::vec3 position;
glm::vec3 color;
};
Mesh Mesh::CreateGrid(DrawingInstance& instance,float width,float depth,unsigned int m,unsigned int n)
{
// 3D Game Programming with DirectX 12 - P. 302ff
std::vector<Vertex> vertices;
std::vector<uint32_t> indices;
unsigned int vertexCount = m * n;
unsigned int faceCount = (m - 1)*(n - 1) * 2;
// Create vertices
float halfWidth = width * 0.5f;
float halfDepth = depth * 0.5f;
float dx = width / (n - 1);
float dz = depth / (m - 1);
float du = 1.0f / (n - 1);
float dv = 1.0f / (m - 1);
vertices.resize(vertexCount);
for (unsigned int i = 0; i < m; ++i)
{
float z = halfDepth - i * dz;
for (unsigned int j = 0; j < n; ++j)
{
float x = -halfWidth + j * dx;
vertices[i*n + j].position = glm::vec3(x,z,0.0f);
vertices[i*n + j].color = glm::vec3(0.0f,1.0f,0.0f);
}
}
// create Indizes
indices.resize(faceCount*3);
unsigned int k = 0;
for (unsigned int i = 0; i < m - 1; ++i)
{
for (unsigned int j = 0; j < n - 1; ++j)
{
indices[k + 0] = i * n + j;
indices[k + 1] = i * n + j + 1;
indices[k + 2] = (i + 1)*n + j;
indices[k + 3] = (i + 1)*n + j;
indices[k + 4] = i * n + j + 1;
indices[k + 5] = (i + 1)*n + j + 1;
k += 6; // next quad
}
}
return Mesh(instance,vertices,indices,VK_polyGON_MODE_LINE,VK_PRIMITIVE_TOPOLOGY_LINE_LIST);
}
// create Indizes
indices.resize(faceCount * 4);
unsigned int k = 0;
for (unsigned int i = 0; i < m - 1; ++i)
{
for (unsigned int j = 0; j < n - 1; ++j)
{
indices[k + 0] = i * n + j;
indices[k + 1] = i * n + (j + 1);
indices[k + 2] = i * n + (j + 1);
indices[k + 3] = (i + 1) * n + j + 1;
indices[k + 4] = (i + 1) * n + j + 1;
indices[k + 5] = (i + 1) * n + j;
indices[k + 6] = (i + 1) * n + j;
indices[k + 7] = i * n + j;
k += 8;
}
}
...
解决方法
我的意思是,每个四边形有六个索引。由于它是一个行列表,这意味着三行。你的第二行是退化的,所以实际上是两行。但是四边形通常由四行组成。因此,除非相邻的四边形共享额外的线,否则将一无所有。对于边界四边形,没有相邻的四边形。所以左上角的四边形只显示了两条线。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。