mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-06-28 16:02:53 +00:00
2D3D:: eye level
This commit is contained in:
parent
5d7a01febe
commit
01763d4f12
@ -736,7 +736,9 @@ void geometry_information::adjust_eye(hpcshape& eye, hpcshape head, ld shift_eye
|
|||||||
qtyall++;
|
qtyall++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(&eye == &shSkullEyes) pos = zc(eyepos) - 0.06 * SH * 0.05;
|
if(&eye == &shSkullEyes) cgi.eyelevel_human = pos = zc(eyepos) - 0.06 * SH * 0.05;
|
||||||
|
if(&eye == &shWolf1) cgi.eyelevel_dog = pos;
|
||||||
|
if(&eye == &shFamiliarEye) cgi.eyelevel_familiar = pos;
|
||||||
|
|
||||||
make_ball(eye, rad, 0);
|
make_ball(eye, rad, 0);
|
||||||
transmatrix T = zpush(-shift_eye) * rgpushxto0(center) * zpush(pos);
|
transmatrix T = zpush(-shift_eye) * rgpushxto0(center) * zpush(pos);
|
||||||
|
@ -220,6 +220,9 @@ void initConfig() {
|
|||||||
addsaver(vid.gp_autoscale_heights, "3D Goldberg autoscaling", true);
|
addsaver(vid.gp_autoscale_heights, "3D Goldberg autoscaling", true);
|
||||||
addsaver(vid.always3, "3D always", false);
|
addsaver(vid.always3, "3D always", false);
|
||||||
|
|
||||||
|
addsaver(vid.eye, "eyelevel", 0);
|
||||||
|
addsaver(vid.auto_eye, "auto-eyelevel", false);
|
||||||
|
|
||||||
addsaver(memory_saving_mode, "memory_saving_mode", (ISMOBILE || ISPANDORA || ISWEB) ? 1 : 0);
|
addsaver(memory_saving_mode, "memory_saving_mode", (ISMOBILE || ISPANDORA || ISWEB) ? 1 : 0);
|
||||||
|
|
||||||
addsaver(rug::renderonce, "rug-renderonce");
|
addsaver(rug::renderonce, "rug-renderonce");
|
||||||
@ -1282,6 +1285,9 @@ void show3D() {
|
|||||||
|
|
||||||
if(WDIM == 2) {
|
if(WDIM == 2) {
|
||||||
dialog::addSelItem(XLAT(GDIM == 2 ? "Camera level above the plane" : "Z shift"), fts(vid.camera), 'c');
|
dialog::addSelItem(XLAT(GDIM == 2 ? "Camera level above the plane" : "Z shift"), fts(vid.camera), 'c');
|
||||||
|
if(GDIM == 3)
|
||||||
|
dialog::addSelItem(XLAT("Eye level"), fts(vid.eye), 'E');
|
||||||
|
|
||||||
dialog::addSelItem(XLAT("Ground level below the plane"), fts(vid.depth), 'g');
|
dialog::addSelItem(XLAT("Ground level below the plane"), fts(vid.depth), 'g');
|
||||||
|
|
||||||
if(GDIM == 2)
|
if(GDIM == 2)
|
||||||
@ -2089,6 +2095,7 @@ unordered_map<string, ld&> params = {
|
|||||||
{"ballangle", vid.ballangle},
|
{"ballangle", vid.ballangle},
|
||||||
{"yshift", vid.yshift},
|
{"yshift", vid.yshift},
|
||||||
{"cameraangle", vid.camera_angle},
|
{"cameraangle", vid.camera_angle},
|
||||||
|
{"eye", vid.eye},
|
||||||
{"depth", vid.depth},
|
{"depth", vid.depth},
|
||||||
{"camera", vid.camera},
|
{"camera", vid.camera},
|
||||||
{"wall_height", vid.wall_height},
|
{"wall_height", vid.wall_height},
|
||||||
|
11
geometry.cpp
11
geometry.cpp
@ -217,6 +217,17 @@ namespace geom3 {
|
|||||||
return vid.depth - projection_to_abslev(factor_to_projection(fac));
|
return vid.depth - projection_to_abslev(factor_to_projection(fac));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void do_auto_eye() {
|
||||||
|
if(!vid.auto_eye) return;
|
||||||
|
auto& cs = getcs();
|
||||||
|
if(cs.charid < 4)
|
||||||
|
vid.eye = cgi.eyelevel_human;
|
||||||
|
else if(cs.charid < 8)
|
||||||
|
vid.eye = cgi.eyelevel_dog;
|
||||||
|
else if(cs.charid == 8)
|
||||||
|
vid.eye = cgi.eyelevel_familiar;
|
||||||
|
}
|
||||||
|
|
||||||
// how should we scale at level lev
|
// how should we scale at level lev
|
||||||
ld scale_at_lev(ld lev) {
|
ld scale_at_lev(ld lev) {
|
||||||
if(sphere || euclid) return 1;
|
if(sphere || euclid) return 1;
|
||||||
|
5
hyper.h
5
hyper.h
@ -312,6 +312,9 @@ struct videopar {
|
|||||||
int tc_alpha, tc_depth, tc_camera;
|
int tc_alpha, tc_depth, tc_camera;
|
||||||
ld highdetail, middetail;
|
ld highdetail, middetail;
|
||||||
bool gp_autoscale_heights;
|
bool gp_autoscale_heights;
|
||||||
|
|
||||||
|
ld eye;
|
||||||
|
bool auto_eye;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern videopar vid;
|
extern videopar vid;
|
||||||
@ -4350,6 +4353,8 @@ struct geometry_information {
|
|||||||
ALEG0, ALEG, ABODY, AHEAD, BIRD, LOWSKY, SKY, HIGH, HIGH2;
|
ALEG0, ALEG, ABODY, AHEAD, BIRD, LOWSKY, SKY, HIGH, HIGH2;
|
||||||
ld human_height, slev;
|
ld human_height, slev;
|
||||||
|
|
||||||
|
ld eyelevel_familiar, eyelevel_human, eyelevel_dog;
|
||||||
|
|
||||||
#if CAP_SHAPES
|
#if CAP_SHAPES
|
||||||
hpcshape
|
hpcshape
|
||||||
shSemiFloorSide[SIDEPARS],
|
shSemiFloorSide[SIDEPARS],
|
||||||
|
@ -1159,8 +1159,9 @@ void centerpc(ld aspd) {
|
|||||||
transmatrix T = cwtV;
|
transmatrix T = cwtV;
|
||||||
#if MAXMDIM >= 4
|
#if MAXMDIM >= 4
|
||||||
if(GDIM == 3 && WDIM == 2) {
|
if(GDIM == 3 && WDIM == 2) {
|
||||||
|
geom3::do_auto_eye();
|
||||||
int sl = snakelevel(cwt.at);
|
int sl = snakelevel(cwt.at);
|
||||||
if(sl) T = T * zpush(cgi.SLEV[sl] - cgi.FLOOR);
|
if(sl || vid.eye) T = T * zpush(cgi.SLEV[sl] - cgi.FLOOR + vid.eye);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
hyperpoint H = inverse(actual_view_transform) * tC0(T);
|
hyperpoint H = inverse(actual_view_transform) * tC0(T);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user