summaryrefslogtreecommitdiff
path: root/task06/Guschin/MyForm.h
diff options
context:
space:
mode:
Diffstat (limited to 'task06/Guschin/MyForm.h')
-rw-r--r--task06/Guschin/MyForm.h221
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) {