终于把线画出来了。
This commit is contained in:
@@ -670,7 +670,7 @@ void TextureLoading::setup_descriptor_pool()
|
|||||||
vkb::initializers::descriptor_pool_create_info(
|
vkb::initializers::descriptor_pool_create_info(
|
||||||
static_cast<uint32_t>(pool_sizes.size()),
|
static_cast<uint32_t>(pool_sizes.size()),
|
||||||
pool_sizes.data(),
|
pool_sizes.data(),
|
||||||
4);
|
6);
|
||||||
|
|
||||||
VK_CHECK(vkCreateDescriptorPool(get_device().get_handle(), &descriptor_pool_create_info, nullptr, &descriptor_pool));
|
VK_CHECK(vkCreateDescriptorPool(get_device().get_handle(), &descriptor_pool_create_info, nullptr, &descriptor_pool));
|
||||||
}
|
}
|
||||||
@@ -1427,8 +1427,9 @@ bool TextureLoading::prepare(const vkb::ApplicationOptions& options)
|
|||||||
|
|
||||||
prepare_pipelines();
|
prepare_pipelines();
|
||||||
prepare_pipeline_bg();
|
prepare_pipeline_bg();
|
||||||
prepare_pipeline_point();
|
|
||||||
prepare_pipeline_point_line();
|
prepare_pipeline_point_line();
|
||||||
|
prepare_pipeline_point();
|
||||||
|
|
||||||
|
|
||||||
float z = -2.0f;
|
float z = -2.0f;
|
||||||
float testPoint[] = {
|
float testPoint[] = {
|
||||||
@@ -1440,8 +1441,6 @@ bool TextureLoading::prepare(const vkb::ApplicationOptions& options)
|
|||||||
0,0.5,z,
|
0,0.5,z,
|
||||||
1,1,z,
|
1,1,z,
|
||||||
};
|
};
|
||||||
int pointCount = sizeof(testPoint) / (3*4);
|
|
||||||
update_point_vertex_buffer(testPoint, pointCount);
|
|
||||||
|
|
||||||
float testPoint_line[] = {
|
float testPoint_line[] = {
|
||||||
0,0,z,
|
0,0,z,
|
||||||
@@ -1452,6 +1451,8 @@ bool TextureLoading::prepare(const vkb::ApplicationOptions& options)
|
|||||||
0 + 0.1,0.5,z,
|
0 + 0.1,0.5,z,
|
||||||
1 + 0.1,1,z,
|
1 + 0.1,1,z,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
update_point_vertex_buffer(testPoint, sizeof(testPoint) / (3 * 4));
|
||||||
update_point_vertex_buffer_line(testPoint_line, sizeof(testPoint_line) / (3 * 4));
|
update_point_vertex_buffer_line(testPoint_line, sizeof(testPoint_line) / (3 * 4));
|
||||||
|
|
||||||
prepared = true;
|
prepared = true;
|
||||||
@@ -1947,21 +1948,21 @@ void TextureLoading::update_point_vertex_buffer_line(float* pos, int count)
|
|||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(mtx_point_line);
|
std::lock_guard<std::mutex> lock(mtx_point_line);
|
||||||
if (count <= 0) {
|
if (count <= 0) {
|
||||||
count = 0;
|
point_count_line = 0;
|
||||||
return; // 没有点数据,无需更新
|
return; // 没有点数据,无需更新
|
||||||
}
|
}
|
||||||
|
|
||||||
point_count = count;
|
point_count_line = count;
|
||||||
|
|
||||||
// 1. 准备顶点数据
|
// 1. 准备顶点数据
|
||||||
std::vector<PointVertex> vertices(point_count);
|
std::vector<PointVertex> vertices(point_count_line);
|
||||||
// 假设 pos 数组是 [x0,y0,z0,x1,y1,z1,...]
|
// 假设 pos 数组是 [x0,y0,z0,x1,y1,z1,...]
|
||||||
// 为了可视化,这里简单地将坐标映射为颜色 (0-1范围)
|
// 为了可视化,这里简单地将坐标映射为颜色 (0-1范围)
|
||||||
float min_x = std::numeric_limits<float>::max(), max_x = std::numeric_limits<float>::lowest();
|
float min_x = std::numeric_limits<float>::max(), max_x = std::numeric_limits<float>::lowest();
|
||||||
float min_y = std::numeric_limits<float>::max(), max_y = std::numeric_limits<float>::lowest();
|
float min_y = std::numeric_limits<float>::max(), max_y = std::numeric_limits<float>::lowest();
|
||||||
float min_z = std::numeric_limits<float>::max(), max_z = std::numeric_limits<float>::lowest();
|
float min_z = std::numeric_limits<float>::max(), max_z = std::numeric_limits<float>::lowest();
|
||||||
|
|
||||||
for (int i = 0; i < point_count; ++i) {
|
for (int i = 0; i < point_count_line; ++i) {
|
||||||
float x = pos[i * 3 + 0];
|
float x = pos[i * 3 + 0];
|
||||||
float y = pos[i * 3 + 1];
|
float y = pos[i * 3 + 1];
|
||||||
float z = pos[i * 3 + 2];
|
float z = pos[i * 3 + 2];
|
||||||
@@ -1976,7 +1977,7 @@ void TextureLoading::update_point_vertex_buffer_line(float* pos, int count)
|
|||||||
if (range_y == 0) range_y = 1.0f;
|
if (range_y == 0) range_y = 1.0f;
|
||||||
if (range_z == 0) range_z = 1.0f;
|
if (range_z == 0) range_z = 1.0f;
|
||||||
|
|
||||||
for (int i = 0; i < point_count; ++i) {
|
for (int i = 0; i < point_count_line; ++i) {
|
||||||
vertices[i].x = pos[i * 3 + 0];
|
vertices[i].x = pos[i * 3 + 0];
|
||||||
vertices[i].y = pos[i * 3 + 1];
|
vertices[i].y = pos[i * 3 + 1];
|
||||||
vertices[i].z = pos[i * 3 + 2];
|
vertices[i].z = pos[i * 3 + 2];
|
||||||
@@ -1987,7 +1988,7 @@ void TextureLoading::update_point_vertex_buffer_line(float* pos, int count)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 2. 更新或创建顶点缓冲区
|
// 2. 更新或创建顶点缓冲区
|
||||||
VkDeviceSize buffer_size = sizeof(PointVertex) * point_count;
|
VkDeviceSize buffer_size = sizeof(PointVertex) * point_count_line;
|
||||||
|
|
||||||
if (!vertex_buffer_point_line || vertex_buffer_point_line->get_size() < buffer_size) {
|
if (!vertex_buffer_point_line || vertex_buffer_point_line->get_size() < buffer_size) {
|
||||||
// 如果缓冲区不存在或太小,则重新创建
|
// 如果缓冲区不存在或太小,则重新创建
|
||||||
|
|||||||
Reference in New Issue
Block a user