Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2016
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.76 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. using Tao.FreeGlut;
  12. using Tao.OpenGl;
  13. using Tao.Platform.Windows;
  14.  
  15. namespace SRTM_TerrainViewer
  16. {
  17.     class Camera
  18.     {
  19.         private struct Vector3D
  20.         {
  21.             public float x, y, z;
  22.         }
  23.  
  24.         private Vector3D Cross(Vector3D vV1, Vector3D vV2, Vector3D vVector2)
  25.         {
  26.             Vector3D vNormal;
  27.             Vector3D vVector1;
  28.             vVector1.x = vV1.x - vV2.x;
  29.             vVector1.y = vV1.y - vV2.y;
  30.             vVector1.z = vV1.z - vV2.z;
  31.  
  32.             // нормаль к плоскости через два вектора
  33.  
  34.             // Значение X для вектора = (V1.y * V2.z) - (V1.z * V2.y)
  35.             vNormal.x = ((vVector1.y * vVector2.z) - (vVector1.z * vVector2.y));
  36.  
  37.             // Значение Y = (V1.z * V2.x) - (V1.x * V2.z)
  38.             vNormal.y = ((vVector1.z * vVector2.x) - (vVector1.x * vVector2.z));
  39.  
  40.             // Значение Z = (V1.x * V2.y) - (V1.y * V2.x)
  41.             vNormal.z = ((vVector1.x * vVector2.y) - (vVector1.y * vVector2.x));
  42.  
  43.             return vNormal;
  44.         }
  45.  
  46.         private float Magnitude(Vector3D vNormal)
  47.         {
  48.             return (float)Math.Sqrt((vNormal.x * vNormal.x) +
  49.                     (vNormal.y * vNormal.y) +
  50.                     (vNormal.z * vNormal.z));
  51.         }
  52.  
  53.         private Vector3D Normalize(Vector3D vVector)
  54.         {
  55.             float magnitude = Magnitude(vVector);
  56.             vVector.x = vVector.x / magnitude;
  57.             vVector.y = vVector.y / magnitude;
  58.             vVector.z = vVector.z / magnitude;
  59.  
  60.             return vVector;
  61.         }
  62.  
  63.         public void Position_Camera(float pos_x, float pos_y, float pos_z,
  64.                 float view_x, float view_y, float view_z,
  65.                 float up_x, float up_y, float up_z)
  66.         {
  67.             mPos.x = pos_x; // Позиция камеры
  68.             mPos.y = pos_y; //
  69.             mPos.z = pos_z; //
  70.             mView.x = view_x; // Куда смотрит, т.е. взгляд
  71.             mView.y = view_y; //
  72.             mView.z = view_z; //
  73.             mUp.x = up_x; // Вертикальный вектор камеры
  74.             mUp.y = up_y; //
  75.             mUp.z = up_z; //
  76.         }
  77.  
  78.         public void Rotate_View(float speed)
  79.         {
  80.             Vector3D vVector; // Полчим вектор взгляда
  81.             vVector.x = mView.x - mPos.x;
  82.             vVector.y = mView.y - mPos.y;
  83.             vVector.z = mView.z - mPos.z;
  84.  
  85.             mView.z = (float)(mPos.z + Math.Sin(speed) * vVector.x + Math.Cos(speed) * vVector.z);
  86.             mView.x = (float)(mPos.x + Math.Cos(speed) * vVector.x - Math.Sin(speed) * vVector.z);
  87.         }
  88.  
  89.         public void update()
  90.         {
  91.             Vector3D vCross = Cross(mView, mPos, mUp);
  92.  
  93.             // Нормализуем вектор стрейфа
  94.             mStrafe = Normalize(vCross);
  95.         }
  96.  
  97.         public void upDown(float speed)
  98.         {
  99.             mPos.y += speed;
  100.         }
  101.  
  102.         public void TestPosSet(float x, float y, float z)
  103.         {
  104.             mPos.x = x;
  105.             mPos.y = y;
  106.             mPos.z = z;
  107.         }
  108.  
  109.         public void TestViewSet(float x, float y, float z )
  110.         {
  111.             mView.x = x;
  112.             mView.y = y;
  113.             mView.z = z;
  114.         }
  115.  
  116.         public void Look()
  117.         {
  118.             Glu.gluLookAt(mPos.x, mPos.y, mPos.z,
  119.                           mView.x, mView.y, mView.z,
  120.                           mUp.x, mUp.y, mUp.z);
  121.         }
  122.  
  123.         public float getPosX() // Возвращает позицию камеры по Х
  124.         {
  125.             return mPos.x;
  126.         }
  127.  
  128.         public float getPosY() // Возвращает позицию камеры по Y
  129.         {
  130.             return mPos.y;
  131.         }
  132.  
  133.         public float getPosZ() // Возвращает позицию камеры по Z
  134.         {
  135.             return mPos.z;
  136.         }
  137.  
  138.         public float getViewX() // Возвращает позицию взгляда по Х
  139.         {
  140.             return mView.x;
  141.         }
  142.  
  143.         public float getViewY() // Возвращает позицию взгляда по Y
  144.         {
  145.             return mView.y;
  146.         }
  147.  
  148.         public float getViewZ() // Возвращает позицию взгляда по Z
  149.         {
  150.             return mView.z;
  151.         }
  152.  
  153.         private Vector3D mPos;   // Вектор позиции камеры
  154.         private Vector3D mView;   // Направление, куда смотрит камера
  155.     }
  156.  
  157.  
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement