diff --git a/drawing.cpp b/drawing.cpp index 08e6b60a..0b9ae85f 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -306,7 +306,7 @@ EX bool two_sided_model() { if(in_vr_sphere) return true; if(pmodel == mdHyperboloid) return !euclid && !in_vr; // if(pmodel == mdHemisphere) return true; - if(pmodel == mdDisk) return sphere; + if(pmodel == mdDisk) return sphere || (hyperbolic && pconf.alpha < 0 && pconf.alpha > -1); if(pmodel == mdRetroLittrow) return sphere; if(pmodel == mdRetroHammer) return sphere; if(pmodel == mdHemisphere) return !in_vr; @@ -333,6 +333,9 @@ EX int get_side(const hyperpoint& H) { double horizon = curnorm / pconf.alpha; return (H[2] <= -horizon) ? -1 : 1; } + if(pmodel == mdDisk && hyperbolic && pconf.alpha < 0 && pconf.alpha > -1) { + return (H[2] * (H[2] + pconf.alpha) < sqhypot_d(2, H)) ? -1 : 1; + } if(pmodel == mdRetroLittrow && sphere) { return H[2] >= 0 ? 1 : -1; } diff --git a/shaders.cpp b/shaders.cpp index 18dbe621..9540e43e 100644 --- a/shaders.cpp +++ b/shaders.cpp @@ -171,7 +171,7 @@ shared_ptr write_shader(flagtype shader_flags) { else if(!vid.consider_shader_projection) { shader_flags |= SF_PIXELS; } - else if(among(pmodel, mdDisk, mdBall) && GDIM == 2 && vrhr::rendering() && !sphere) { + else if(among(pmodel, mdDisk, mdBall) && GDIM == 2 && vrhr::rendering() && !sphere && !(hyperbolic && pconf.alpha < 0 && pconf.alpha > -1)) { shader_flags |= SF_DIRECT | SF_BOX; vsh += "uniform mediump float uAlpha, uDepth, uDepthScaling, uCamera;";