add circle2d collider renderer, fixed a bug for renderer 2 value properties
This commit is contained in:
@ -227,13 +227,25 @@ namespace Prism
|
||||
|
||||
if (selection.Entity.HasComponent<BoxCollider2DComponent>())
|
||||
{
|
||||
const auto& size = selection.Entity.GetComponent<BoxCollider2DComponent>().Size;
|
||||
const auto& collider = selection.Entity.GetComponent<BoxCollider2DComponent>();
|
||||
const auto& transform = selection.Entity.GetComponent<TransformComponent>();
|
||||
|
||||
Renderer::BeginRenderPass(SceneRenderer::GetFinalRenderPass(), false);
|
||||
const auto viewProj = m_EditorCamera.GetViewProjection();
|
||||
Renderer2D::BeginScene(viewProj, false);
|
||||
Renderer2D::DrawRotatedQuad({ transform.Translation.x, transform.Translation.y }, size * 2.0f, transform.Rotation.z, { 1.0f, 0.0f, 1.0f, 1.0f });
|
||||
Renderer2D::DrawRotatedRect({ transform.Translation.x + collider.Offset.x, transform.Translation.y + collider.Offset.y }, collider.Size * 2.0f, transform.Rotation.z, { 0.0f, 0.0f, 1.0f, 1.0f });
|
||||
Renderer2D::EndScene();
|
||||
Renderer::EndRenderPass();
|
||||
}
|
||||
if (selection.Entity.HasComponent<CircleCollider2DComponent>())
|
||||
{
|
||||
const auto& collider = selection.Entity.GetComponent<CircleCollider2DComponent>();
|
||||
const TransformComponent& transform = selection.Entity.GetComponent<TransformComponent>();
|
||||
|
||||
Renderer::BeginRenderPass(SceneRenderer::GetFinalRenderPass(), false);
|
||||
const auto viewProj = m_EditorCamera.GetViewProjection();
|
||||
Renderer2D::BeginScene(viewProj, false);
|
||||
Renderer2D::DrawCircle({ transform.Translation.x + collider.Offset.x, transform.Translation.y + collider.Offset.y}, collider.Radius, { 0.0f, 1.0f, 1.0f, 1.0f });
|
||||
Renderer2D::EndScene();
|
||||
Renderer::EndRenderPass();
|
||||
}
|
||||
|
||||
44
Editor/assets/shaders/Renderer2D_Circle.glsl
Normal file
44
Editor/assets/shaders/Renderer2D_Circle.glsl
Normal file
@ -0,0 +1,44 @@
|
||||
// Basic Texture Shader
|
||||
|
||||
#type vertex
|
||||
#version 430 core
|
||||
|
||||
layout(location = 0) in vec3 a_WorldPosition;
|
||||
layout(location = 1) in float a_Thickness;
|
||||
layout(location = 2) in vec2 a_LocalPosition;
|
||||
layout(location = 3) in vec4 a_Color;
|
||||
uniform mat4 u_ViewProjection;
|
||||
|
||||
out vec2 v_LocalPosition;
|
||||
out float v_Thickness;
|
||||
out vec4 v_Color;
|
||||
|
||||
void main()
|
||||
{
|
||||
v_LocalPosition = a_LocalPosition;
|
||||
v_Thickness = a_Thickness;
|
||||
v_Color = a_Color;
|
||||
gl_Position = u_ViewProjection * vec4(a_WorldPosition, 1.0);
|
||||
}
|
||||
|
||||
#type fragment
|
||||
#version 430 core
|
||||
|
||||
layout(location = 0) out vec4 color;
|
||||
|
||||
in vec2 v_LocalPosition;
|
||||
in float v_Thickness;
|
||||
in vec4 v_Color;
|
||||
|
||||
void main()
|
||||
{
|
||||
float fade = 0.01;
|
||||
float dist = sqrt(dot(v_LocalPosition, v_LocalPosition));
|
||||
if (dist > 1.0 || dist < 1.0 - v_Thickness - fade)
|
||||
discard;
|
||||
|
||||
float alpha = 1.0 - smoothstep(1.0f - fade, 1.0f, dist);
|
||||
alpha *= smoothstep(1.0 - v_Thickness - fade, 1.0 - v_Thickness, dist);
|
||||
color = v_Color;
|
||||
color.a = alpha;
|
||||
}
|
||||
Reference in New Issue
Block a user