add 'perspective' NotePreset property
This commit is contained in:
parent
2147f507a6
commit
525cf1ed4b
@ -29,7 +29,9 @@ function on_hud_open()
|
||||
|
||||
note = gfx.text3d.new({0.5, 99.5, 0.0015}, "Segmentation fault", {
|
||||
color={0, 0, 0, 1},
|
||||
display="projected"
|
||||
display="projected",
|
||||
perspective=1.0,
|
||||
scale=2.0
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
@ -68,12 +68,24 @@ void TextsRenderer::renderNote(
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
float scale = 1.0f;
|
||||
if (glm::abs(preset.perspective) > 0.0001f) {
|
||||
float scale2 = scale /
|
||||
(glm::distance(camera.position, pos) *
|
||||
util::sqr(camera.zoom) *
|
||||
glm::sqrt(glm::tan(camera.getFov() * 0.5f)));
|
||||
scale = scale2 * preset.perspective +
|
||||
scale * (1.0f - preset.perspective);
|
||||
}
|
||||
auto projpos = camera.getProjView() * glm::vec4(pos, 1.0f);
|
||||
pos = projpos;
|
||||
if (pos.z < 0.0f) {
|
||||
return;
|
||||
}
|
||||
pos /= pos.z;
|
||||
pos.z = 0;
|
||||
xvec = {2.0f/Window::width, 0, 0};
|
||||
yvec = {0, 2.0f/Window::height, 0};
|
||||
xvec = {2.0f/Window::width*scale, 0, 0};
|
||||
yvec = {0, 2.0f/Window::height*scale, 0};
|
||||
}
|
||||
auto color = preset.color;
|
||||
batch.setColor(glm::vec4(color.r, color.g, color.b, color.a * opacity));
|
||||
|
||||
@ -36,6 +36,7 @@ dv::value NotePreset::serialize() const {
|
||||
{"scale", scale},
|
||||
{"render_distance", renderDistance},
|
||||
{"xray_opacity", xrayOpacity},
|
||||
{"perspective", perspective},
|
||||
});
|
||||
}
|
||||
|
||||
@ -49,4 +50,5 @@ void NotePreset::deserialize(const dv::value& src) {
|
||||
src.at("scale").get(scale);
|
||||
src.at("render_distance").get(renderDistance);
|
||||
src.at("xray_opacity").get(xrayOpacity);
|
||||
src.at("perspective").get(perspective);
|
||||
}
|
||||
|
||||
@ -22,6 +22,7 @@ struct NotePreset : public Serializable {
|
||||
float scale = 1.0f;
|
||||
float renderDistance = 10.0f;
|
||||
float xrayOpacity = 0.0f;
|
||||
float perspective = 0.0f;
|
||||
|
||||
dv::value serialize() const override;
|
||||
void deserialize(const dv::value& src) override;
|
||||
|
||||
@ -66,3 +66,7 @@ void Camera::setFov(float fov) {
|
||||
float Camera::getFov() const {
|
||||
return fov;
|
||||
}
|
||||
|
||||
float Camera::getAspectRatio() const {
|
||||
return aspect;
|
||||
}
|
||||
|
||||
@ -35,4 +35,6 @@ public:
|
||||
|
||||
void setFov(float fov);
|
||||
float getFov() const;
|
||||
|
||||
float getAspectRatio() const;
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user