mirror of
https://github.com/Kbz-8/42_vox.git
synced 2026-01-13 07:33:35 +00:00
adding transparent water
This commit is contained in:
@@ -41,12 +41,7 @@ namespace Scop
|
||||
pipeline.Init(pipeline_descriptor);
|
||||
}
|
||||
|
||||
VkCommandBuffer cmd = renderer.GetActiveCommandBuffer();
|
||||
pipeline.BindPipeline(cmd, 0, {});
|
||||
for(const auto& [_, actor] : scene.GetActors())
|
||||
{
|
||||
if(!actor.IsVisible())
|
||||
continue;
|
||||
auto setup_model = [](const Actor& actor) -> ModelData {
|
||||
ModelData model_data;
|
||||
model_data.model_mat = Mat4f::Identity();
|
||||
model_data.model_mat.SetTranslation(actor.GetPosition() - actor.GetModel().GetCenter());
|
||||
@@ -54,8 +49,35 @@ namespace Scop
|
||||
model_data.model_mat = Mat4f::Translate(-actor.GetModel().GetCenter()) * Mat4f::Rotate(actor.GetOrientation()) * model_data.model_mat;
|
||||
model_data.normal_mat = model_data.model_mat;
|
||||
model_data.normal_mat.Inverse().Transpose();
|
||||
return model_data;
|
||||
};
|
||||
|
||||
std::multimap<float, Actor&> sorted_actors;
|
||||
VkCommandBuffer cmd = renderer.GetActiveCommandBuffer();
|
||||
pipeline.BindPipeline(cmd, 0, {});
|
||||
for(auto& [_, actor] : scene.GetActors())
|
||||
{
|
||||
if(!actor.IsVisible())
|
||||
continue;
|
||||
if(actor.IsOpaque())
|
||||
{
|
||||
auto model_data = setup_model(actor);
|
||||
RenderCore::Get().vkCmdPushConstants(cmd, pipeline.GetPipelineLayout(), VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(ModelData), &model_data);
|
||||
actor.GetModel().Draw(cmd, *data.matrices_set, pipeline, *data.albedo_set, renderer.GetDrawCallsCounterRef(), renderer.GetPolygonDrawnCounterRef(), renderer.GetCurrentFrameIndex());
|
||||
}
|
||||
else
|
||||
{
|
||||
float distance = Vec3f::Distance(actor.GetPosition(), scene.GetCamera()->GetPosition());
|
||||
sorted_actors.emplace(distance, const_cast<Actor&>(actor));
|
||||
}
|
||||
}
|
||||
for(auto it = sorted_actors.rbegin(); it != sorted_actors.rend(); ++it)
|
||||
{
|
||||
if(!it->second.IsVisible())
|
||||
continue;
|
||||
auto model_data = setup_model(it->second);
|
||||
RenderCore::Get().vkCmdPushConstants(cmd, pipeline.GetPipelineLayout(), VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(ModelData), &model_data);
|
||||
actor.GetModel().Draw(cmd, *data.matrices_set, pipeline, *data.albedo_set, renderer.GetDrawCallsCounterRef(), renderer.GetPolygonDrawnCounterRef(), renderer.GetCurrentFrameIndex());
|
||||
it->second.GetModel().Draw(cmd, *data.matrices_set, pipeline, *data.albedo_set, renderer.GetDrawCallsCounterRef(), renderer.GetPolygonDrawnCounterRef(), renderer.GetCurrentFrameIndex());
|
||||
}
|
||||
pipeline.EndPipeline(cmd);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user