mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-27 14:37:16 +00:00
3d:: clipping configurable
This commit is contained in:
parent
715d8b2fd0
commit
2121aacaaf
@ -275,7 +275,11 @@ void display_data::set_projection(int ed, bool apply_models) {
|
||||
current_display->scrdist_text = cd->ysize;
|
||||
}
|
||||
else if(DIM == 3) {
|
||||
glhr::projection_multiply(glhr::ortho(cd->xsize/current_display->radius/2, -cd->ysize/current_display->radius/2, 1));
|
||||
glhr::glmatrix M = glhr::ortho(cd->xsize/current_display->radius/2, -cd->ysize/current_display->radius/2, 1);
|
||||
using conformal::clip_max, conformal::clip_min;
|
||||
M[2][2] = 2 / (clip_max - clip_min);
|
||||
M[3][2] = (clip_min + clip_max) / (clip_max - clip_min);
|
||||
glhr::projection_multiply(M);
|
||||
current_display->scrdist_text = 0;
|
||||
}
|
||||
else {
|
||||
|
@ -233,6 +233,8 @@ void initConfig() {
|
||||
addsaver(conformal::autoband, "automatic band");
|
||||
addsaver(conformal::autobandhistory, "automatic band history");
|
||||
addsaver(conformal::dospiral, "do spiral");
|
||||
addsaver(conformal::clip_min, "clip-min", -1);
|
||||
addsaver(conformal::clip_max, "clip-max", +1);
|
||||
|
||||
addsaver(vid.backeffects, "background particle effects", (ISMOBILE || ISPANDORA) ? false : true);
|
||||
// control
|
||||
@ -2076,6 +2078,9 @@ unordered_map<string, ld&> params = {
|
||||
{"lvspeed", conformal::lvspeed},
|
||||
{"rotation", conformal::rotation},
|
||||
{"mori", conformal::model_orientation},
|
||||
{"mori_yz", conformal::model_orientation_yz},
|
||||
{"clipmin", conformal::clip_min},
|
||||
{"clipmax", conformal::clip_max},
|
||||
{"topz", conformal::top_z},
|
||||
{"mtrans", conformal::model_transition},
|
||||
{"hp", conformal::halfplane_scale},
|
||||
|
@ -275,6 +275,7 @@ namespace conformal {
|
||||
ld rotation = 0;
|
||||
int do_rotate = 1;
|
||||
ld model_orientation, halfplane_scale, model_orientation_yz;
|
||||
ld clip_min, clip_max;
|
||||
ld ocos, osin, ocos_yz, osin_yz;
|
||||
ld cos_ball, sin_ball;
|
||||
bool model_straight, model_straight_yz;
|
||||
@ -732,6 +733,28 @@ namespace conformal {
|
||||
}
|
||||
}
|
||||
|
||||
if(DIM == 3 && pmodel != mdPerspective) {
|
||||
const string cliphelp = XLAT(
|
||||
"Your view of the 3D model is naturally bounded from four directions by your window. "
|
||||
"Here, you can also set up similar bounds in the Z direction. Radius of the ball/band "
|
||||
"models, and the distance from the center to the plane in the halfspace model, are 1.\n\n");
|
||||
dialog::addSelItem(XLAT("near clipping plane"), fts(clip_max), 'c');
|
||||
dialog::add_action([cliphelp] () {
|
||||
dialog::editNumber(clip_max, -10, 10, 0.2, 1, XLAT("near clipping plane"),
|
||||
cliphelp + XLAT("Objects with Z coordinate "
|
||||
"bigger than this parameter are not shown. This is useful with the models which "
|
||||
"extend infinitely in the Z direction, or if you want things close to your character "
|
||||
"to be not obscured by things closer to the camera."));
|
||||
});
|
||||
dialog::addSelItem(XLAT("far clipping plane"), fts(clip_min), 'C');
|
||||
dialog::add_action([cliphelp] () {
|
||||
dialog::editNumber(clip_max, -10, 10, 0.2, 1, XLAT("far clipping plane"),
|
||||
cliphelp + XLAT("Objects with Z coordinate "
|
||||
"smaller than this parameter are not shown; it also affects the fog effect"
|
||||
" (near clipping plane = 0% fog, far clipping plane = 100% fog)."));
|
||||
});
|
||||
}
|
||||
|
||||
if(pmodel == mdPolynomial) {
|
||||
dialog::addSelItem(XLAT("coefficient"),
|
||||
fts4(polygonal::coefr[polygonal::coefid]), 'x');
|
||||
@ -1144,6 +1167,11 @@ namespace conformal {
|
||||
shift_arg_formula(conformal::model_orientation);
|
||||
shift_arg_formula(conformal::model_orientation_yz);
|
||||
}
|
||||
else if(argis("-clip")) {
|
||||
PHASEFROM(2);
|
||||
shift_arg_formula(conformal::clip_min);
|
||||
shift_arg_formula(conformal::clip_max);
|
||||
}
|
||||
else if(argis("-mtrans")) {
|
||||
PHASEFROM(2);
|
||||
shift_arg_formula(conformal::model_transition);
|
||||
|
1
hyper.h
1
hyper.h
@ -1405,6 +1405,7 @@ namespace conformal {
|
||||
extern ld top_z;
|
||||
extern ld spiral_angle, spiral_x, spiral_y;
|
||||
extern ld spiral_cone;
|
||||
extern ld clip_min, clip_max;
|
||||
|
||||
// screen coordinates to logical coordinates: apply_orientation(x,y)
|
||||
// logical coordinates back to screen coordinates: apply_orientation(y,x)
|
||||
|
@ -590,7 +590,7 @@ void init() {
|
||||
sh3 || sr3 || ball,"t[3] = 1.0;",
|
||||
|
||||
band || hp || s3 || ball,"gl_Position = uP * t;",
|
||||
dim3 && !s3, "vColor.xyz = vColor.xyz * (1.0 - gl_Position.z / 2.0);",
|
||||
dim3 && !s3, "vColor.xyz = vColor.xyz * (0.5 - gl_Position.z / 2.0);",
|
||||
1, "}"),
|
||||
|
||||
stringbuilder(
|
||||
|
Loading…
Reference in New Issue
Block a user