50 | 50 |
|
51 | 51 |
// arrow/axes components
|
52 | 52 |
///////////////////////////////////////
|
53 | |
int imguiGizmo::coneSlices = 4;
|
|
53 |
int imguiGizmo::coneSlices = 4;
|
54 | 54 |
float imguiGizmo::coneRadius = 0.07f;
|
55 | 55 |
float imguiGizmo::coneLength = 0.37f;
|
56 | 56 |
|
57 | 57 |
|
58 | |
int imguiGizmo::cylSlices = 7;
|
59 | |
float imguiGizmo::cylRadius = 0.02f; // sizeCylLength = defined in base to control size
|
|
58 |
int imguiGizmo::cylSlices = 7;
|
|
59 |
float imguiGizmo::cylRadius = 0.02f; // sizeCylLength = defined in base to control size
|
60 | 60 |
|
61 | 61 |
|
62 | 62 |
// Sphere components
|
63 | 63 |
///////////////////////////////////////
|
64 | |
float imguiGizmo::sphereRadius = .27f;
|
65 | |
int imguiGizmo::sphereTessFactor = imguiGizmo::sphereTess4;
|
|
64 |
float imguiGizmo::sphereRadius = 0.27f;
|
|
65 |
int imguiGizmo::sphereTessFactor = imguiGizmo::sphereTess4;
|
66 | 66 |
|
67 | 67 |
// Cube components
|
68 | 68 |
///////////////////////////////////////
|
69 | |
float imguiGizmo::cubeSize = .05f;
|
|
69 |
float imguiGizmo::cubeSize = 0.05f;
|
70 | 70 |
|
71 | 71 |
// Plane components
|
72 | 72 |
///////////////////////////////////////
|
73 | |
float imguiGizmo::planeSize = .33f;
|
74 | |
float imguiGizmo::planeThickness = .015f;
|
|
73 |
float imguiGizmo::planeSize = 0.33f;
|
|
74 |
float imguiGizmo::planeThickness = 0.015f;
|
75 | 75 |
|
76 | 76 |
// Axes resize
|
77 | 77 |
///////////////////////////////////////
|
78 | |
Diligent::float3 imguiGizmo::axesResizeFactor(.95f, 1.f , 1.f);
|
|
78 |
Diligent::float3 imguiGizmo::axesResizeFactor(0.95f, 1.f , 1.f);
|
79 | 79 |
Diligent::float3 imguiGizmo::savedAxesResizeFactor = imguiGizmo::axesResizeFactor;
|
80 | 80 |
|
81 | 81 |
// Solid resize
|
82 | 82 |
///////////////////////////////////////
|
83 | |
float imguiGizmo::solidResizeFactor = 1.0;
|
|
83 |
float imguiGizmo::solidResizeFactor = 1.0;
|
84 | 84 |
float imguiGizmo::savedSolidResizeFactor = imguiGizmo::solidResizeFactor;
|
85 | 85 |
|
86 | 86 |
// Direction arrow color
|
|
95 | 95 |
|
96 | 96 |
// Sphere Colors
|
97 | 97 |
///////////////////////////////////////
|
98 | |
ImU32 imguiGizmo::sphereColors[2] = { 0xff401010, 0xffc0a0a0 }; // Tessellation colors
|
|
98 |
ImU32 imguiGizmo::sphereColors[2] = { 0xff401010, 0xffc0a0a0 }; // Tessellation colors
|
99 | 99 |
ImU32 imguiGizmo::savedSphereColors[2] = { 0xff401010, 0xffc0a0a0 };
|
100 | 100 |
//ImU32 spherecolorA=0xff005cc0, spherecolorB=0xffc05c00;
|
101 | 101 |
|
|
163 | 163 |
bool gizmo3D(const char* label, Diligent::float3& dir, float size, const int mode)
|
164 | 164 |
{
|
165 | 165 |
imguiGizmo g;
|
166 | |
g.modeSettings(mode & (imguiGizmo::modeDirection | imguiGizmo::modeDirPlane) ? mode : imguiGizmo::modeDirection);
|
|
166 |
g.modeSettings((mode & (imguiGizmo::modeDirection | imguiGizmo::modeDirPlane)) ? mode : imguiGizmo::modeDirection);
|
167 | 167 |
|
168 | 168 |
return g.getTransforms(g.qtV, label, dir, size);
|
169 | 169 |
|
|
184 | 184 |
imguiGizmo g;
|
185 | 185 |
g.setDualMode(mode);
|
186 | 186 |
|
187 | |
g.qtV = axes; g.qtV2 = spot;
|
|
187 |
g.qtV = axes;
|
|
188 |
g.qtV2 = spot;
|
188 | 189 |
|
189 | 190 |
bool ret = g.drawFunc(label, size);
|
190 | 191 |
if(ret) { axes = g.qtV; spot = g.qtV2; }
|
|
259 | 260 |
////////////////////////////////////////////////////////////////////////////
|
260 | 261 |
inline ImU32 addLightEffect(const Diligent::float4 &color, float light, float atten)
|
261 | 262 |
{
|
262 | |
Diligent::float3 l = Diligent::float3(1, 1, 1) * ((light < .5f) ? .5f : light);
|
263 | |
Diligent::float3 a = Diligent::float3(1, 1, 1) * ((atten > .25f) ? .25f : atten);
|
264 | |
Diligent::float3 c(((Diligent::float3(color) + l*.5f) * l) *.75f + a*Diligent::float3(color)*.45f +a*.25f);
|
|
263 |
Diligent::float3 l = Diligent::float3(1, 1, 1) * ((light < 0.5f) ? 0.5f : light);
|
|
264 |
Diligent::float3 a = Diligent::float3(1, 1, 1) * ((atten > 0.25f) ? 0.25f : atten);
|
|
265 |
Diligent::float3 c(((Diligent::float3(color) + l * 0.5f) * l) * 0.75f + a * Diligent::float3(color) * 0.45f + a * 0.25f);
|
265 | 266 |
|
266 | 267 |
const float alpha = color.a * ImGui::GetStyle().Alpha; //ImGui::GetCo(ImGuiCol_FrameBg).w;
|
267 | 268 |
return ImGui::ColorConvertFloat4ToU32(ImVec4(c.x, c.y, c.z, alpha));
|
|
270 | 271 |
|
271 | 272 |
inline ImU32 addLightEffect(ImU32 color, float light, float atten)
|
272 | 273 |
{
|
273 | |
Diligent::float4 c(float(color & 0xff)/255.f,float((color>>8) & 0xff)/255.f,float((color>>16) & 0xff)/255.f, 1.0);
|
|
274 |
Diligent::float4 c(float(color & 0xff) / 255.f, float((color>>8) & 0xff)/255.f, float((color>>16) & 0xff)/255.f, 1.0);
|
274 | 275 |
return addLightEffect(c, light, atten);
|
275 | 276 |
}
|
276 | 277 |
|
|
379 | 380 |
else if(io.KeyCtrl) { rotationVector = Diligent::float3(0, 1, 0); }
|
380 | 381 |
else if(io.KeyAlt || io.KeySuper) { rotationVector = Diligent::float3(0, 0, 1); }
|
381 | 382 |
|
382 | |
|
383 | 383 |
Diligent::Quaternion qtStep = {0, 0, 0, 1};
|
384 | 384 |
if(!delta.x && !delta.y)
|
385 | 385 |
{
|
386 | |
qtStep = Diligent::Quaternion(0, 0, 0, 1); //no rotation
|
387 | 386 |
return;
|
388 | 387 |
}
|
389 | 388 |
|
|
412 | 411 |
const auto fpsRatio = 1; //auto adjust by FPS (call idle with current FPS)
|
413 | 412 |
|
414 | 413 |
qtStep = normalize(Diligent::Quaternion::RotationFromAxisAngle(axis * rotationVector, angle * tbScale * fpsRatio));
|
415 | |
q = qtStep*q;
|
|
414 |
q = qtStep * q;
|
416 | 415 |
|
417 | 416 |
value_changed = true;
|
418 | 417 |
};
|