add xray_opacity support to projected 3d text
This commit is contained in:
parent
6ec33ab98c
commit
bcf920a251
@ -34,12 +34,11 @@ void TextsRenderer::renderNote(
|
|||||||
util::sqr(preset.renderDistance / camera.zoom)) {
|
util::sqr(preset.renderDistance / camera.zoom)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Projected notes are displayed on the front layer only
|
|
||||||
if ((preset.displayMode == NoteDisplayMode::PROJECTED) != projected) {
|
if ((preset.displayMode == NoteDisplayMode::PROJECTED) != projected) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
float opacity = 1.0f;
|
float opacity = 1.0f;
|
||||||
if (frontLayer && preset.displayMode != NoteDisplayMode::PROJECTED) {
|
if (frontLayer) {
|
||||||
if (preset.xrayOpacity <= 0.0001f) {
|
if (preset.xrayOpacity <= 0.0001f) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -81,15 +80,25 @@ void TextsRenderer::renderNote(
|
|||||||
scale = scale2 * preset.perspective +
|
scale = scale2 * preset.perspective +
|
||||||
scale * (1.0f - preset.perspective);
|
scale * (1.0f - preset.perspective);
|
||||||
}
|
}
|
||||||
|
if (frontLayer) {
|
||||||
auto projpos = camera.getProjView() * glm::vec4(pos, 1.0f);
|
auto projpos = camera.getProjView() * glm::vec4(pos, 1.0f);
|
||||||
pos = projpos;
|
pos = projpos;
|
||||||
if (pos.z < 0.0f) {
|
if (pos.z < 0.0f) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pos /= pos.z;
|
pos /= projpos.w;
|
||||||
pos.z = 0;
|
pos.z = 0;
|
||||||
xvec = {2.0f/Window::width*scale, 0, 0};
|
xvec = {2.0f/Window::width*scale, 0, 0};
|
||||||
yvec = {0, 2.0f/Window::height*scale, 0};
|
yvec = {0, 2.0f/Window::height*scale, 0};
|
||||||
|
} else {
|
||||||
|
auto matrix = camera.getProjView();
|
||||||
|
auto screenPos = matrix * glm::vec4(pos, 1.0f);
|
||||||
|
|
||||||
|
xvec = glm::vec3(2.0f/Window::width*scale, 0, 0);
|
||||||
|
yvec = glm::vec3(0, 2.0f/Window::height*scale, 0);
|
||||||
|
|
||||||
|
pos = screenPos / screenPos.w;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
auto color = preset.color;
|
auto color = preset.color;
|
||||||
batch.setColor(glm::vec4(color.r, color.g, color.b, color.a * opacity));
|
batch.setColor(glm::vec4(color.r, color.g, color.b, color.a * opacity));
|
||||||
@ -119,16 +128,11 @@ void TextsRenderer::render(
|
|||||||
renderNote(*note, context, camera, settings, hudVisible, frontLayer, false);
|
renderNote(*note, context, camera, settings, hudVisible, frontLayer, false);
|
||||||
}
|
}
|
||||||
batch.flush();
|
batch.flush();
|
||||||
if (frontLayer) {
|
shader.uniformMatrix("u_projview", glm::mat4(1.0f));
|
||||||
shader.uniformMatrix(
|
|
||||||
"u_projview",
|
|
||||||
glm::mat4(1.0f)
|
|
||||||
);
|
|
||||||
for (const auto& [_, note] : notes) {
|
for (const auto& [_, note] : notes) {
|
||||||
renderNote(*note, context, camera, settings, hudVisible, true, true);
|
renderNote(*note, context, camera, settings, hudVisible, frontLayer, true);
|
||||||
}
|
}
|
||||||
batch.flush();
|
batch.flush();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u64id_t TextsRenderer::add(std::unique_ptr<TextNote> note) {
|
u64id_t TextsRenderer::add(std::unique_ptr<TextNote> note) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user