High_Light

OpenGL vektor

Apr 24th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.06 KB | None | 0 0
  1. #include <iostream>
  2. #include <list>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <vector>
  6. #include <GL/glut.h>
  7. #include <GL/gl.h>
  8. #include <GL/glu.h>
  9.  
  10. using namespace std;
  11.  
  12. double scale = 1.0;
  13.  
  14. /*int avg(vector<float> a){
  15.     float res = 0;
  16.     for (int i = 0; i < a.size(); i++)
  17.         res += a[i];
  18.     return (res / a.size());
  19. }*/
  20.  
  21. class vec2d {
  22. public:
  23.     float x;
  24.     float y;
  25.     vec2d() : x(0), y(0) {}
  26.     vec2d(float a,float b) : x(a), y(b){}
  27.     void print(){
  28.         cout << x << "\t" << y << endl;
  29.     }
  30.     float dot(vec2d other){
  31.         return (x * other.x + y * other.y);
  32.     }
  33.     vec2d operator + (vec2d other){
  34.         return vec2d(x + other.x, y + other.y);
  35.     }
  36.     vec2d operator - (vec2d other){
  37.         return vec2d(x - other.x, y - other.y);
  38.     }
  39.     vec2d operator * (float a){
  40.         return vec2d(x * a, y * a);
  41.     }
  42.     vec2d operator / (float a){
  43.         return vec2d(x / a, y / a);
  44.     }
  45. };
  46.  
  47. void render_square(double x, double y) {
  48.     glPushMatrix();
  49.  
  50.     double dx = 0.5;
  51.     double dy = 0.5;
  52.     glBegin(GL_POLYGON);
  53.     glVertex2f(x, y);
  54.     glVertex2f(x + dx, y);
  55.     glVertex2f(x + dx, y - dy);
  56.     glVertex2f(x, y - dy);
  57.     glEnd();
  58.     glPopMatrix();
  59. }
  60.  
  61. void draw_line(double x, double y, double x1, double y1) {
  62.     glBegin(GL_LINES);
  63.     glVertex2d(x, y);
  64.     glVertex2d(x1, y1);
  65.     glEnd();
  66. }
  67.  
  68. void Render() {
  69.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  70.         glLoadIdentity();
  71.         glTranslatef(0, 0, -10);
  72.         glColor3d(1, 1, 1);
  73.         glScalef(scale, scale, scale);
  74.  
  75.         draw_line(0,0,1,1);
  76.  
  77.         glFlush();
  78. }
  79.  
  80. void update(int t) {
  81.     Render();
  82.     glutTimerFunc(50, update, 0);
  83. }
  84.  
  85. void keyb(unsigned char key, int x, int y) {
  86.     if(key == '+') {
  87.         scale *= 1.1;
  88.     }
  89.     if(key == '-') {
  90.         scale *= 0.9;
  91.     }
  92.  
  93.     Render();
  94. }
  95.  
  96. void reshape(int w, int h) {
  97.  
  98.     // предупредим деление на ноль
  99.     // если окно сильно перетянуто будет
  100.     if(h == 0)
  101.         h = 1;
  102.     float ratio = 1.0* w / h;
  103.  
  104.     // используем матрицу проекции
  105.     glMatrixMode(GL_PROJECTION);
  106.  
  107.         // Reset матрицы
  108.     glLoadIdentity();
  109.  
  110.     // определяем окно просмотра
  111.     glViewport(0, 0, w, h);
  112.  
  113.     // установить корректную перспективу.
  114.     gluPerspective(45,ratio,1,1000);
  115.  
  116.     // вернуться к модели
  117.     glMatrixMode(GL_MODELVIEW);
  118. }
  119.  
  120. int main(int argc, char **argv)
  121. {
  122.     glutInit(&argc, argv);
  123.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  124.     glutInitWindowSize(800, 600);
  125.     glutCreateWindow("Physics Engine");
  126.     glEnable(GL_DEPTH_TEST);
  127.     glMatrixMode(GL_PROJECTION);
  128.     glLoadIdentity();
  129.     glMatrixMode(GL_MODELVIEW);
  130.     glLoadIdentity();
  131.     glClearColor(0., 0.0, 128.0, 0.0);
  132.  
  133.     glutTimerFunc(50, update, 0);
  134.     glutReshapeFunc(reshape);
  135.     glutDisplayFunc(Render);
  136.     glutKeyboardFunc(keyb);
  137.     glutMainLoop();
  138. }
Advertisement
Add Comment
Please, Sign In to add comment