Skip to content

Commit

Permalink
Stereo 3D|UI: Added settings to the “3D & VR Settings” dialog
Browse files Browse the repository at this point in the history
Also, updated some Oculus Rift defaults according to averages
from Wikipedia (average male IPD, height).
  • Loading branch information
skyjake committed Dec 22, 2013
1 parent 953a2d3 commit ecef8cd
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 32 deletions.
12 changes: 6 additions & 6 deletions doomsday/client/src/render/vr.cpp
Expand Up @@ -82,8 +82,8 @@ float VR::riftLatency() {
}

// Interpupillary distance in meters
float VR::ipd = 0.0622f;
float VR::playerHeight = 1.70f;
float VR::ipd = .064f; // average male IPD
float VR::playerHeight = 1.75f;
float VR::dominantEye = 0.0f;
byte VR::swapEyes = 0;

Expand Down Expand Up @@ -160,13 +160,13 @@ void VR::consoleRegister()
{
C_VAR_BYTE ("rend-vr-autoload-rift-params", & autoLoadRiftParams, 0, 0, 1);
C_VAR_FLOAT ("rend-vr-dominant-eye", & VR::dominantEye, 0, -1.0f, 1.0f);
C_VAR_FLOAT ("rend-vr-hud-distance", & VR::hudDistance, 0, 0.01f, 40.0f);
C_VAR_FLOAT ("rend-vr-ipd", & VR::ipd, 0, 0.02f, 0.2f);
C_VAR_FLOAT ("rend-vr-hud-distance", & VR::hudDistance, 0, 0.01f, 40.0f);
C_VAR_FLOAT ("rend-vr-ipd", & VR::ipd, 0, 0.02f, 0.1f);
C_VAR_INT2 ("rend-vr-mode", & vrMode, 0, 0, (int)(VR::MODE_MAX_3D_MODE_PLUS_ONE - 1), vrModeChanged);
C_VAR_FLOAT2("rend-vr-nonrift-fovx", & vrNonRiftFovX, 0, 5.0f, 270.0f, vrNonRiftFovXChanged);
C_VAR_FLOAT ("rend-vr-player-height", & VR::playerHeight, 0, 1.0f, 3.0f);
C_VAR_FLOAT ("rend-vr-player-height", & VR::playerHeight, 0, 1.0f, 2.4f);
C_VAR_FLOAT2("rend-vr-rift-fovx", & vrRiftFovX, 0, 5.0f, 270.0f, vrRiftFovXChanged);
C_VAR_FLOAT2("rend-vr-rift-latency", & vrLatency, 0, 0.0f, 0.250f, vrLatencyChanged);
C_VAR_FLOAT2("rend-vr-rift-latency", & vrLatency, 0, 0.0f, 0.100f, vrLatencyChanged);
C_VAR_BYTE ("rend-vr-swap-eyes", & VR::swapEyes, 0, 0, 1);

C_CMD("loadriftparams", NULL, LoadRiftParams);
Expand Down
67 changes: 41 additions & 26 deletions doomsday/client/src/ui/dialogs/vrsettingsdialog.cpp
Expand Up @@ -30,8 +30,12 @@ using namespace ui;

DENG_GUI_PIMPL(VRSettingsDialog)
{
//CVarToggleWidget *devInfo;
CVarChoiceWidget *mode;
CVarToggleWidget *swapEyes;
CVarSliderWidget *dominantEye;
CVarSliderWidget *humanHeight;
CVarSliderWidget *ipd;
CVarSliderWidget *riftPredictionLatency;

Instance(Public *i) : Base(i)
{
Expand All @@ -45,51 +49,57 @@ DENG_GUI_PIMPL(VRSettingsDialog)
<< new ChoiceItem("Left eye only", VR::MODE_LEFT)
<< new ChoiceItem("Right eye only", VR::MODE_RIGHT)
<< new ChoiceItem("Top/bottom", VR::MODE_TOP_BOTTOM)
<< new ChoiceItem("Side by side", VR::MODE_SIDE_BY_SIDE)
<< new ChoiceItem("Side-by-side", VR::MODE_SIDE_BY_SIDE)
<< new ChoiceItem("Parallel", VR::MODE_PARALLEL)
<< new ChoiceItem("Cross-eye", VR::MODE_CROSSEYE)
<< new ChoiceItem("Oculus Rift", VR::MODE_OCULUS_RIFT)
<< new ChoiceItem("Hardware stereo", VR::MODE_QUAD_BUFFERED);

/* MODE_MONO = 0,
MODE_GREEN_MAGENTA,
MODE_RED_CYAN,
MODE_LEFT,
MODE_RIGHT,
MODE_TOP_BOTTOM, // 5
MODE_SIDE_BY_SIDE,
MODE_PARALLEL,
MODE_CROSSEYE,
MODE_OCULUS_RIFT,
MODE_ROW_INTERLEAVED, // 10 // NOT IMPLEMENTED YET
MODE_COLUMN_INTERLEAVED, // NOT IMPLEMENTED YET
MODE_CHECKERBOARD, // NOT IMPLEMENTED YET
MODE_QUAD_BUFFERED,*/
//area.add(devInfo = new CVarToggleWidget("net-dev"));
area.add(swapEyes = new CVarToggleWidget("rend-vr-swap-eyes", tr("Swap Eyes")));
area.add(dominantEye = new CVarSliderWidget("rend-vr-dominant-eye"));
area.add(humanHeight = new CVarSliderWidget("rend-vr-player-height"));

area.add(ipd = new CVarSliderWidget("rend-vr-ipd"));
ipd->setDisplayFactor(1000);

area.add(riftPredictionLatency = new CVarSliderWidget("rend-vr-rift-latency"));
riftPredictionLatency->setDisplayFactor(1000);
}

void fetch()
{
//devInfo->updateFromCVar();
mode->updateFromCVar();
foreach(Widget *child, self.area().childWidgets())
{
if(ICVarWidget *w = child->maybeAs<ICVarWidget>())
{
w->updateFromCVar();
}
}
}
};

VRSettingsDialog::VRSettingsDialog(String const &name)
: DialogWidget(name, WithHeading), d(new Instance(this))
{
heading().setText(tr("VR Settings"));

//d->devInfo->setText(tr("Developer Info"));
heading().setText(tr("3D & VR Settings"));

LabelWidget *modeLabel = LabelWidget::newWithText(tr("Mode:"), &area());
LabelWidget *modeLabel = LabelWidget::newWithText(tr("Mode:"), &area());
LabelWidget *dominantLabel = LabelWidget::newWithText(tr("Dominant Eye:"), &area());
LabelWidget *heightLabel = LabelWidget::newWithText(tr("Height (m):"), &area());
LabelWidget *ipdLabel = LabelWidget::newWithText(tr("IPD (mm):"), &area());
LabelWidget *latencyLabel = LabelWidget::newWithText(tr("Prediction Latency:"), &area());

// Layout.
GridLayout layout(area().contentRule().left(), area().contentRule().top());
layout.setGridSize(2, 0);
//layout.setColumnAlignment(0, ui::AlignRight);
layout.setColumnAlignment(0, ui::AlignRight);

layout << *modeLabel << *d->mode;
layout << *modeLabel << *d->mode
<< Const(0) << *d->swapEyes
<< *dominantLabel << *d->dominantEye
<< *heightLabel << *d->humanHeight
<< *ipdLabel << *d->ipd
<< *latencyLabel << *d->riftPredictionLatency;

area().setContentSize(layout.width(), layout.height());

Expand All @@ -103,7 +113,12 @@ VRSettingsDialog::VRSettingsDialog(String const &name)

void VRSettingsDialog::resetToDefaults()
{
Con_SetInteger("rend-vr-mode", VR::MODE_MONO);
Con_SetInteger("rend-vr-mode", VR::MODE_MONO);
Con_SetInteger("rend-vr-swap-eyes", 0);
Con_SetFloat ("rend-vr-dominant-eye", 0);
Con_SetFloat ("rend-vr-player-height", 1.75f);
Con_SetFloat ("rend-vr-ipd", 0.064f);
Con_SetFloat ("rend-vr-rift-latency", 0.030f);

d->fetch();
}
Expand Down

0 comments on commit ecef8cd

Please sign in to comment.