diff options
Diffstat (limited to 'task06/Guschin/MyForm.h')
| -rw-r--r-- | task06/Guschin/MyForm.h | 221 |
1 files changed, 143 insertions, 78 deletions
diff --git a/task06/Guschin/MyForm.h b/task06/Guschin/MyForm.h index 44324f1..0f17cb8 100644 --- a/task06/Guschin/MyForm.h +++ b/task06/Guschin/MyForm.h @@ -156,7 +156,7 @@ namespace Guschin { for (int k = 0; k < models.size(); k++) { vector<path> figure = models[k].figure; - mat4 TM = T * models[k].modelM; + mat4 TM = C * models[k].modelM; for (int i = 0; i < figure.size(); i++) { path lines = figure[i]; Pen^ pen = gcnew Pen(Color::FromArgb(lines.color.x, lines.color.y, lines.color.z)); @@ -182,118 +182,183 @@ namespace Guschin { } private: System::Void MyForm_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) { + mat4 M; + vec3 u_new; + vec3 P_new; + vec3 S_new; switch (e->KeyCode) { case Keys::Escape: initWorkPars(); break; - default: - break; - } - Refresh(); - /*float Wcx = ClientRectangle.Width / 2.f; - float Wcy = ClientRectangle.Height / 2.f; - switch (e->KeyCode) { - case Keys::Escape: - T = initT; - break; - case Keys::Q : - T = translate(-Wcx, -Wcy) * T; - T = rotate(0.01f) * T; - T = translate(Wcx, Wcy) * T; + case Keys::D3: + pType = Perspective; break; - case Keys::E : - T = translate(-Wcx, -Wcy) * T; - T = rotate(-0.01f) * T; - T = translate(Wcx, Wcy) * T; + case Keys::D1: + pType = Ortho; break; - - case Keys::W : - T = translate(0.f, -1.f) * T; + case Keys::D2: + pType = Frustum; break; - case Keys::S : - T = translate(0.f, 1.f) * T; + case Keys::W: + if (Control::ModifierKeys == Keys::Shift) { + T = lookAt(vec3(0, 0, -0.1), vec3(0, 0, -0.2), vec3(0, 0.1, 0)) * T; + } + else { + T = lookAt(vec3(0, 0, -1), vec3(0, 0, -2), vec3(0, 1, 0)) * T; + } break; - case Keys::A : - T = translate(-1.f, 0.f) * T; + case Keys::S: + if (Control::ModifierKeys == Keys::Shift) + T = lookAt(vec3(0, 0, 0.1), vec3(0, 0, 0), vec3(0, 0.1, 0)) * T; + else + T = lookAt(vec3(0, 0, 1), vec3(0, 0, 0), vec3(0, 1, 0)) * T; break; - case Keys::D : - T = translate(1.f, 0.f) * T; + case Keys::A: + if (Control::ModifierKeys == Keys::Shift) + T = lookAt(vec3(-0.1, 0, 0), vec3(-0.1, 0, -0.1), vec3(0, 0.1, 0)) * T; + else + T = lookAt(vec3(-1, 0, 0), vec3(-1, 0, -1), vec3(0, 1, 0)) * T; break; - case Keys::R: - T = translate(-Wcx, -Wcy) * T; - T = rotate(0.05f) * T; - T = translate(Wcx, Wcy) * T; + u_new = mat3(rotate(0.1, vec3(0, 0, 1))) * vec3(0, 1, 0); + T = lookAt(vec3(0, 0, 0), vec3(0, 0, -1), u_new) * T; break; - case Keys::Y: - T = translate(-Wcx, -Wcy) * T; - T = rotate(-0.05f) * T; - T = translate(Wcx, Wcy) * T; + case Keys::T: { + if (Control::ModifierKeys == Keys::Shift) { + M = rotateP(0.1, vec3(1, 0, 0), vec3(0, 0, -dist)); + u_new = mat3(M) * vec3(0, 1, 0); + S_new = normalize(M * vec4(0, 0, 0, 1)); + T = lookAt(S_new, vec3(0, 0, -dist), u_new) * T; + } + else { + M = rotate(0.1, vec3(1, 0, 0)); + u_new = mat3(M) * vec3(0, 1, 0); + P_new = normalize(M * vec4(0, 0, -1, 1)); + T = lookAt(vec3(0, 0, 0), P_new, u_new) * T; + } + break; + } + case Keys::I: + if (Control::ModifierKeys == Keys::Shift) { + t -= 1; + } + else { + t += 1; + } + break; + case Keys::J: + if (Control::ModifierKeys == Keys::Shift) { + l += 1; + } + else { + l -= 1; + } + break; + case Keys::D: + if (Control::ModifierKeys == Keys::Shift) + T = lookAt(vec3(0.1, 0, 0), vec3(0.1, 0, -1.f), vec3(0, 0.1, 0)) * T; + else + T = lookAt(vec3(1.f, 0, 0), vec3(1.f, 0, -1.f), vec3(0, 1.f, 0)) * T; break; - case Keys::T: - T = translate(0.f, -10.f) * T; + case Keys::Y: + u_new = mat3(rotate(-0.1, vec3(0, 0, 1))) * vec3(0, 1, 0); + T = lookAt(vec3(0, 0, 0), vec3(0, 0, -1), u_new) * T; break; case Keys::G: - T = translate(0.f, 10.f) * T; + if (Control::ModifierKeys == Keys::Shift) { + M = rotateP(-0.1, vec3(1, 0, 0), vec3(0, 0, -dist)); + u_new = mat3(M) * vec3(0, 1, 0); + S_new = normalize(M * vec4(0, 0, 0, 1)); + + T = lookAt(S_new, vec3(0, 0, -dist), u_new) * T; + } + else { + M = rotate(-0.1, vec3(1, 0, 0)); + u_new = mat3(M) * vec3(0, 1, 0); + P_new = normalize(M * vec4(0, 0, -1, 1)); + T = lookAt(vec3(0, 0, 0), P_new, u_new) * T; + } break; case Keys::F: - T = translate(-10.f, 0.f) * T; + if (Control::ModifierKeys == Keys::Shift) { + M = rotateP(0.1, vec3(0, 1, 0), vec3(0, 0, -dist)); + u_new = mat3(M) * vec3(0, 1, 0); + S_new = normalize(M * vec4(0, 0, 0, 1)); + + T = lookAt(S_new, vec3(0, 0, -dist), u_new) * T; + } + else { + M = rotate(0.1, vec3(0, 1, 0)); + u_new = mat3(M) * vec3(0, 1, 0); + P_new = normalize(M * vec4(0, 0, -1, 1)); + T = lookAt(vec3(0, 0, 0), P_new, u_new) * T; + } break; case Keys::H: - T = translate(10.f, 0.f) * T; - break; + if (Control::ModifierKeys == Keys::Shift) { + M = rotateP(-0.1, vec3(0, 1, 0), vec3(0, 0, -dist)); + u_new = mat3(M) * vec3(0, 1, 0); + S_new = normalize(M * vec4(0, 0, 0, 1)); - case Keys::Z: - T = translate(-Wcx, -Wcy) * T; - T = scale(1.1f) * T; - T = translate(Wcx, Wcy) * T; + T = lookAt(S_new, vec3(0, 0, -dist), u_new) * T; + } + else { + M = rotate(-0.1, vec3(0, 1, 0)); + u_new = mat3(M) * vec3(0, 1, 0); + P_new = normalize(M * vec4(0, 0, -1, 1)); + T = lookAt(vec3(0, 0, 0), P_new, u_new) * T; + } break; - case Keys::X: - T = translate(-Wcx, -Wcy) * T; - T = scale(1 / 1.1f) * T; - T = translate(Wcx, Wcy) * T; + case Keys::K: + if (Control::ModifierKeys == Keys::Shift) + b--; + else + b++; break; - - case Keys::U: - T = translate(-Wcx, -Wcy) * T; - T = mirrorX() * T; - T = translate(Wcx, Wcy) * T; + case Keys::L: + if (Control::ModifierKeys == Keys::Shift) + r--; + else + r++; break; - case Keys::J: - T = translate(-Wcx, -Wcy) * T; - T = mirrorY() * T; - T = translate(Wcx, Wcy) * T; + case Keys::U: + if (Control::ModifierKeys == Keys::Shift) + if (n >= 0.3) n -= 0.2; else n; + else + if (n <= f - 0.3) n += 0.2; break; - - case Keys::I: - T = translate(-Wcx, -Wcy) * T; - T = scale(1.1f, 1.f) * T; - T = translate(Wcx, Wcy) * T; + case Keys::O: + if (Control::ModifierKeys == Keys::Shift) + if (f >= n + 0.3) f -= 0.2; else f; + else + f += 0.2; break; - case Keys::K: - T = translate(-Wcx, -Wcy) * T; - T = scale(1 / 1.1f, 1.f) * T; - T = translate(Wcx, Wcy) * T; + case Keys::B: + if (Control::ModifierKeys == Keys::Shift) + if (dist >= 0.3) dist -= 0.2; else dist; + else + dist += 0.2; break; - - case Keys::O: - T = translate(-Wcx, -Wcy) * T; - T = scale(1.f, 1.1f) * T; - T = translate(Wcx, Wcy) * T; + case Keys::Z: + if (Control::ModifierKeys == Keys::Shift) + if (fovy_work >= 0.08) fovy_work -= 0.05; else fovy_work; + else + if (fovy_work <= 2.95) fovy_work += 0.05; else fovy_work; break; - case Keys::L: - T = translate(-Wcx, -Wcy) * T; - T = scale(1.f, 1 / 1.1f) * T; - T = translate(Wcx, Wcy) * T; + case Keys::X: + if (Control::ModifierKeys == Keys::Shift) + if (aspect_work >= 0.06) aspect_work -= 0.05; else aspect_work; + else + aspect_work += 0.05; break; default: break; } - Refresh();*/ + Refresh(); } private: System::Void btnOpen_Click(System::Object^ sender, System::EventArgs^ e) { |