mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-07-04 18:52:51 +00:00
aura in the fisheye projection, also minor optimization
This commit is contained in:
parent
13ea55b233
commit
08108c342c
31
graph.cpp
31
graph.cpp
@ -2874,11 +2874,15 @@ EX ld straightDownSpeed;
|
|||||||
|
|
||||||
array<array<int,4>,AURA+1> aurac;
|
array<array<int,4>,AURA+1> aurac;
|
||||||
|
|
||||||
EX bool haveaura() {
|
int haveaura_cached;
|
||||||
if(!(vid.aurastr>0 && !svg::in && (auraNOGL || vid.usingGL))) return false;
|
|
||||||
if(sphere && mdAzimuthalEqui()) return true;
|
/** 0 = no aura, 1 = standard aura, 2 = Joukowsky aura */
|
||||||
|
EX int haveaura() {
|
||||||
|
if(!(vid.aurastr>0 && !svg::in && (auraNOGL || vid.usingGL))) return 0;
|
||||||
|
if(sphere && mdAzimuthalEqui()) return 0;
|
||||||
if(among(pmodel, mdJoukowsky, mdJoukowskyInverted) && hyperbolic && models::model_transition < 1)
|
if(among(pmodel, mdJoukowsky, mdJoukowskyInverted) && hyperbolic && models::model_transition < 1)
|
||||||
return true;
|
return 2;
|
||||||
|
if(pmodel == mdFisheye) return 1;
|
||||||
return pmodel == mdDisk && (!sphere || vid.alpha > 10) && !euclid;
|
return pmodel == mdDisk && (!sphere || vid.alpha > 10) && !euclid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2887,7 +2891,8 @@ vector<pair<int, int> > auraspecials;
|
|||||||
int auramemo;
|
int auramemo;
|
||||||
|
|
||||||
EX void clearaura() {
|
EX void clearaura() {
|
||||||
if(!haveaura()) return;
|
haveaura_cached = haveaura();
|
||||||
|
if(!haveaura_cached) return;
|
||||||
for(int a=0; a<AURA; a++) for(int b=0; b<4; b++)
|
for(int a=0; a<AURA; a++) for(int b=0; b<4; b++)
|
||||||
aurac[a][b] = 0;
|
aurac[a][b] = 0;
|
||||||
auraspecials.clear();
|
auraspecials.clear();
|
||||||
@ -2895,23 +2900,25 @@ EX void clearaura() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void apply_joukowsky_aura(hyperpoint& h) {
|
void apply_joukowsky_aura(hyperpoint& h) {
|
||||||
bool joukowsky = among(pmodel, mdJoukowskyInverted, mdJoukowsky) && hyperbolic && models::model_transition < 1;
|
if(haveaura_cached == 2) {
|
||||||
if(joukowsky) {
|
|
||||||
hyperpoint ret;
|
hyperpoint ret;
|
||||||
applymodel(h, ret);
|
applymodel(h, ret);
|
||||||
h = ret;
|
h = ret;
|
||||||
}
|
}
|
||||||
|
if(nonisotropic) {
|
||||||
|
h = lp_apply(inverse_exp(h, iTable, true));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EX void addauraspecial(hyperpoint h, color_t col, int dir) {
|
EX void addauraspecial(hyperpoint h, color_t col, int dir) {
|
||||||
if(!haveaura()) return;
|
if(!haveaura_cached) return;
|
||||||
apply_joukowsky_aura(h);
|
apply_joukowsky_aura(h);
|
||||||
int r = int(2*AURA + dir + atan2(h[1], h[0]) * AURA / 2 / M_PI) % AURA;
|
int r = int(2*AURA + dir + atan2(h[1], h[0]) * AURA / 2 / M_PI) % AURA;
|
||||||
auraspecials.emplace_back(r, col);
|
auraspecials.emplace_back(r, col);
|
||||||
}
|
}
|
||||||
|
|
||||||
EX void addaura(hyperpoint h, color_t col, int fd) {
|
EX void addaura(hyperpoint h, color_t col, int fd) {
|
||||||
if(!haveaura()) return;
|
if(!haveaura_cached) return;
|
||||||
apply_joukowsky_aura(h);
|
apply_joukowsky_aura(h);
|
||||||
|
|
||||||
int r = int(2*AURA + atan2(h[1], h[0]) * AURA / 2 / M_PI) % AURA;
|
int r = int(2*AURA + atan2(h[1], h[0]) * AURA / 2 / M_PI) % AURA;
|
||||||
@ -2946,6 +2953,12 @@ void drawaura() {
|
|||||||
if(vid.stereo_mode) return;
|
if(vid.stereo_mode) return;
|
||||||
double rad = current_display->radius;
|
double rad = current_display->radius;
|
||||||
if(sphere && !mdAzimuthalEqui()) rad /= sqrt(vid.alpha*vid.alpha - 1);
|
if(sphere && !mdAzimuthalEqui()) rad /= sqrt(vid.alpha*vid.alpha - 1);
|
||||||
|
if(hyperbolic && pmodel == mdFisheye) {
|
||||||
|
ld h = 1;
|
||||||
|
h /= vid.fisheye_param;
|
||||||
|
ld nrad = h / sqrt(2 + h*h);
|
||||||
|
rad *= nrad;
|
||||||
|
}
|
||||||
|
|
||||||
for(int v=0; v<4; v++) sumaura(v);
|
for(int v=0; v<4; v++) sumaura(v);
|
||||||
for(auto& p: auraspecials) {
|
for(auto& p: auraspecials) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user