mirror of
https://github.com/leozide/leocad
synced 2024-11-17 07:47:55 +01:00
Added mesh LOD distance option.
This commit is contained in:
parent
c8acaeb2f0
commit
0828fd1e2c
11 changed files with 55 additions and 4 deletions
|
@ -24,6 +24,7 @@ void lcPreferences::LoadDefaults()
|
|||
mDrawEdgeLines = lcGetProfileInt(LC_PROFILE_DRAW_EDGE_LINES);
|
||||
mLineWidth = lcGetProfileFloat(LC_PROFILE_LINE_WIDTH);
|
||||
mAllowLOD = lcGetProfileInt(LC_PROFILE_ALLOW_LOD);
|
||||
mMeshLODDistance = lcGetProfileFloat(LC_PROFILE_LOD_DISTANCE);
|
||||
mFadeSteps = lcGetProfileInt(LC_PROFILE_FADE_STEPS);
|
||||
mFadeStepsColor = lcGetProfileInt(LC_PROFILE_FADE_STEPS_COLOR);
|
||||
mHighlightNewParts = lcGetProfileInt(LC_PROFILE_HIGHLIGHT_NEW_PARTS);
|
||||
|
@ -56,6 +57,7 @@ void lcPreferences::SaveDefaults()
|
|||
lcSetProfileInt(LC_PROFILE_DRAW_EDGE_LINES, mDrawEdgeLines);
|
||||
lcSetProfileFloat(LC_PROFILE_LINE_WIDTH, mLineWidth);
|
||||
lcSetProfileInt(LC_PROFILE_ALLOW_LOD, mAllowLOD);
|
||||
lcSetProfileFloat(LC_PROFILE_LOD_DISTANCE, mMeshLODDistance);
|
||||
lcSetProfileInt(LC_PROFILE_FADE_STEPS, mFadeSteps);
|
||||
lcSetProfileInt(LC_PROFILE_FADE_STEPS_COLOR, mFadeStepsColor);
|
||||
lcSetProfileInt(LC_PROFILE_HIGHLIGHT_NEW_PARTS, mHighlightNewParts);
|
||||
|
|
|
@ -43,6 +43,7 @@ public:
|
|||
bool mDrawEdgeLines;
|
||||
float mLineWidth;
|
||||
bool mAllowLOD;
|
||||
float mMeshLODDistance;
|
||||
bool mFadeSteps;
|
||||
quint32 mFadeStepsColor;
|
||||
bool mHighlightNewParts;
|
||||
|
|
|
@ -496,7 +496,7 @@ int lcMesh::GetLodIndex(float Distance) const
|
|||
if (lcGetPiecesLibrary()->GetStudLogo())
|
||||
return LC_MESH_LOD_HIGH;
|
||||
|
||||
if (mLods[LC_MESH_LOD_LOW].NumSections && (Distance - mRadius) > 250.0f)
|
||||
if (mLods[LC_MESH_LOD_LOW].NumSections && (Distance > mRadius))
|
||||
return LC_MESH_LOD_LOW;
|
||||
else
|
||||
return LC_MESH_LOD_HIGH;
|
||||
|
|
|
@ -58,6 +58,7 @@ static lcProfileEntry gProfileEntries[LC_NUM_PROFILE_KEYS] =
|
|||
lcProfileEntry("Settings", "FixedAxes", false), // LC_PROFILE_FIXED_AXES
|
||||
lcProfileEntry("Settings", "LineWidth", 1.0f), // LC_PROFILE_LINE_WIDTH
|
||||
lcProfileEntry("Settings", "AllowLOD", true), // LC_PROFILE_ALLOW_LOD
|
||||
lcProfileEntry("Settings", "LODDistance", 750.0f), // LC_PROFILE_LOD_DISTANCE
|
||||
lcProfileEntry("Settings", "FadeSteps", false), // LC_PROFILE_FADE_STEPS
|
||||
lcProfileEntry("Settings", "FadeStepsColor", LC_RGBA(128, 128, 128, 128)), // LC_PROFILE_FADE_STEPS_COLOR
|
||||
lcProfileEntry("Settings", "HighlightNewParts", 0), // LC_PROFILE_HIGHLIGHT_NEW_PARTS
|
||||
|
|
|
@ -6,6 +6,7 @@ enum LC_PROFILE_KEY
|
|||
LC_PROFILE_FIXED_AXES,
|
||||
LC_PROFILE_LINE_WIDTH,
|
||||
LC_PROFILE_ALLOW_LOD,
|
||||
LC_PROFILE_LOD_DISTANCE,
|
||||
LC_PROFILE_FADE_STEPS,
|
||||
LC_PROFILE_FADE_STEPS_COLOR,
|
||||
LC_PROFILE_HIGHLIGHT_NEW_PARTS,
|
||||
|
|
|
@ -14,6 +14,7 @@ lcScene::lcScene()
|
|||
mDrawInterface = false;
|
||||
mAllowWireframe = true;
|
||||
mAllowLOD = true;
|
||||
mMeshLODDistance = 250.0f;
|
||||
mHasFadedParts = false;
|
||||
mPreTranslucentCallback = nullptr;
|
||||
}
|
||||
|
@ -69,7 +70,7 @@ void lcScene::AddMesh(lcMesh* Mesh, const lcMatrix44& WorldMatrix, int ColorInde
|
|||
RenderMesh.Mesh = Mesh;
|
||||
RenderMesh.ColorIndex = ColorIndex;
|
||||
RenderMesh.State = State;
|
||||
const float Distance = fabsf(lcMul31(WorldMatrix[3], mViewMatrix).z);
|
||||
const float Distance = fabsf(lcMul31(WorldMatrix[3], mViewMatrix).z) - mMeshLODDistance;
|
||||
RenderMesh.LodIndex = mAllowLOD ? RenderMesh.Mesh->GetLodIndex(Distance) : LC_MESH_LOD_HIGH;
|
||||
|
||||
const bool ForceTranslucent = (mTranslucentFade && State == lcRenderMeshState::Faded);
|
||||
|
|
|
@ -69,6 +69,11 @@ public:
|
|||
mAllowLOD = AllowLOD;
|
||||
}
|
||||
|
||||
void SetLODDistance(float Distance)
|
||||
{
|
||||
mMeshLODDistance = Distance;
|
||||
}
|
||||
|
||||
void SetPreTranslucentCallback(std::function<void()> Callback)
|
||||
{
|
||||
mPreTranslucentCallback = Callback;
|
||||
|
@ -102,6 +107,7 @@ protected:
|
|||
bool mDrawInterface;
|
||||
bool mAllowWireframe;
|
||||
bool mAllowLOD;
|
||||
float mMeshLODDistance;
|
||||
|
||||
lcVector4 mFadeColor;
|
||||
lcVector4 mHighlightColor;
|
||||
|
|
|
@ -813,6 +813,7 @@ void View::OnDraw()
|
|||
const bool DrawInterface = mWidget != nullptr;
|
||||
|
||||
mScene.SetAllowLOD(Preferences.mAllowLOD && mWidget != nullptr);
|
||||
mScene.SetLODDistance(Preferences.mMeshLODDistance);
|
||||
|
||||
mScene.Begin(mCamera->mWorldView);
|
||||
|
||||
|
|
|
@ -89,6 +89,10 @@ lcQPreferencesDialog::lcQPreferencesDialog(QWidget* Parent, lcPreferencesDialogO
|
|||
ui->LineWidthSlider->setValue((mOptions->Preferences.mLineWidth - mLineWidthRange[0]) / mLineWidthGranularity);
|
||||
|
||||
ui->MeshLOD->setChecked(mOptions->Preferences.mAllowLOD);
|
||||
|
||||
ui->MeshLODSlider->setRange(0, 1500.0f / mMeshLODMultiplier);
|
||||
ui->MeshLODSlider->setValue(mOptions->Preferences.mMeshLODDistance / mMeshLODMultiplier);
|
||||
|
||||
ui->FadeSteps->setChecked(mOptions->Preferences.mFadeSteps);
|
||||
ui->HighlightNewParts->setChecked(mOptions->Preferences.mHighlightNewParts);
|
||||
ui->gridStuds->setChecked(mOptions->Preferences.mDrawGridStuds);
|
||||
|
@ -165,6 +169,7 @@ lcQPreferencesDialog::lcQPreferencesDialog(QWidget* Parent, lcPreferencesDialogO
|
|||
on_antiAliasing_toggled();
|
||||
on_edgeLines_toggled();
|
||||
on_LineWidthSlider_valueChanged();
|
||||
on_MeshLODSlider_valueChanged();
|
||||
on_FadeSteps_toggled();
|
||||
on_HighlightNewParts_toggled();
|
||||
on_gridStuds_toggled();
|
||||
|
@ -236,6 +241,7 @@ void lcQPreferencesDialog::accept()
|
|||
mOptions->Preferences.mDrawEdgeLines = ui->edgeLines->isChecked();
|
||||
mOptions->Preferences.mLineWidth = mLineWidthRange[0] + static_cast<float>(ui->LineWidthSlider->value()) * mLineWidthGranularity;
|
||||
mOptions->Preferences.mAllowLOD = ui->MeshLOD->isChecked();
|
||||
mOptions->Preferences.mMeshLODDistance = ui->MeshLODSlider->value() * mMeshLODMultiplier;
|
||||
mOptions->Preferences.mFadeSteps = ui->FadeSteps->isChecked();
|
||||
mOptions->Preferences.mHighlightNewParts = ui->HighlightNewParts->isChecked();
|
||||
|
||||
|
@ -440,6 +446,12 @@ void lcQPreferencesDialog::on_LineWidthSlider_valueChanged()
|
|||
ui->LineWidthLabel->setText(QString::number(Value));
|
||||
}
|
||||
|
||||
void lcQPreferencesDialog::on_MeshLODSlider_valueChanged()
|
||||
{
|
||||
float Value = ui->MeshLODSlider->value() * mMeshLODMultiplier;
|
||||
ui->MeshLODLabel->setText(QString::number(static_cast<int>(Value)));
|
||||
}
|
||||
|
||||
void lcQPreferencesDialog::on_FadeSteps_toggled()
|
||||
{
|
||||
ui->FadeStepsColor->setEnabled(ui->FadeSteps->isChecked());
|
||||
|
|
|
@ -37,6 +37,7 @@ public slots:
|
|||
void on_antiAliasing_toggled();
|
||||
void on_edgeLines_toggled();
|
||||
void on_LineWidthSlider_valueChanged();
|
||||
void on_MeshLODSlider_valueChanged();
|
||||
void on_FadeSteps_toggled();
|
||||
void on_HighlightNewParts_toggled();
|
||||
void on_gridStuds_toggled();
|
||||
|
@ -73,4 +74,5 @@ private:
|
|||
|
||||
float mLineWidthRange[2];
|
||||
float mLineWidthGranularity;
|
||||
static constexpr float mMeshLODMultiplier = 25.0f;
|
||||
};
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>598</width>
|
||||
<height>494</height>
|
||||
<height>503</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -499,6 +499,29 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QSlider" name="MeshLODSlider">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::NoTicks</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="3">
|
||||
<widget class="QLabel" name="MeshLODLabel">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -1322,6 +1345,7 @@
|
|||
<tabstop>authorName</tabstop>
|
||||
<tabstop>fixedDirectionKeys</tabstop>
|
||||
<tabstop>autoLoadMostRecent</tabstop>
|
||||
<tabstop>RestoreTabLayout</tabstop>
|
||||
<tabstop>antiAliasing</tabstop>
|
||||
<tabstop>antiAliasingSamples</tabstop>
|
||||
<tabstop>studLogo</tabstop>
|
||||
|
@ -1329,6 +1353,7 @@
|
|||
<tabstop>edgeLines</tabstop>
|
||||
<tabstop>LineWidthSlider</tabstop>
|
||||
<tabstop>MeshLOD</tabstop>
|
||||
<tabstop>MeshLODSlider</tabstop>
|
||||
<tabstop>FadeSteps</tabstop>
|
||||
<tabstop>FadeStepsColor</tabstop>
|
||||
<tabstop>HighlightNewParts</tabstop>
|
||||
|
@ -1373,7 +1398,6 @@
|
|||
<tabstop>mouseAssign</tabstop>
|
||||
<tabstop>mouseRemove</tabstop>
|
||||
<tabstop>mouseSensitivity</tabstop>
|
||||
<tabstop>RestoreTabLayout</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections>
|
||||
|
|
Loading…
Reference in a new issue