Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <list>
- #include<cmath>
- #include <algorithm>
- #include <GL/glut.h>
- #include <GL/gl.h>
- #include <GL/glu.h>
- using namespace std;
- double scale = 1.0;
- void draw_line(double x, double y, double x1, double y1) {
- glBegin(GL_LINES);
- glVertex2d(x, y);
- glVertex2d(x1, y1);
- glEnd();
- }
- struct vector2d
- {
- float x,y;
- vector2d(float x_,float y_) {
- x=x_;
- y=y_;
- }
- vector2d() {
- x=0;
- y=0;
- }
- void show(float x0, float y0){
- draw_line(x0,y0,x0+x,y0+y);
- cout << x << "\t" << y << endl;
- vector2d p_1(-y, x);
- cout << p_1.x << "\t" << p_1.y << endl;
- draw_line(x0, y0,x0 + p_1.x, y0 + p_1.y);
- vector2d p_2(y, -x);
- cout << p_1.x << "\t" << p_1.y << endl;
- draw_line(x0, y0,x0 + p_2.x, y0 + p_2.y);
- vector2d d_1(-x + p_1.x, -y + p_1.y);
- draw_line(x0+x, y0+y,x+x0 + d_1.x, y+y0 + d_1.y);
- vector2d d_2(-x + p_2.x, -y + p_2.y);
- draw_line(x0+x, y0+y,x+x0 + d_2.x, y+y0 + d_2.y);
- /*cout<<x<<" "<<y<<endl;*/
- }
- vector2d add(vector2d b){
- return vector2d(x+b.x,y+b.y);
- }
- float dot(vector2d b){
- return ((x*b.x)+(y*b.y));
- }
- };
- void render_square(double x, double y) {
- glPushMatrix();
- double dx = 0.5;
- double dy = 0.5;
- glBegin(GL_POLYGON);
- glVertex2f(x, y);
- glVertex2f(x + dx, y);
- glVertex2f(x + dx, y - dy);
- glVertex2f(x, y - dy);
- glEnd();
- glPopMatrix();
- }
- void draw_rectangle(float x, float y){
- /* float N=60;
- double da=2*M_PI/N;
- for(double angle=0;angle<=2* M_PI;angle += da){
- double x=r * cos(angle);
- double y=r * sin(angle);
- double angle2 = angle+da;
- if(angle2 > 2*M_PI){
- angle2=2* M_PI;
- }
- double x1=r * cos(angle2);
- double y1=r * sin(angle2);
- draw_line(x + cx, y + cy, x1 + cx, y1 + cy);
- }
- float f=0.9;
- for(double angle=0;angle<=2* M_PI;angle += da){
- double x0=r * cos(angle);
- double y0=r * sin(angle);
- double x=r*f * cos(angle);
- double y=r*f * sin(angle);
- draw_line(x + cx, y + cy, x0 + cx, y0 + cy);
- }
- float F=0.8;
- float n=12;
- double d=2*M_PI/n;
- for(double angle=0;angle<=2* M_PI;angle += d){
- double x0=r * cos(angle);
- double y0=r * sin(angle);
- double x=r*F * cos(angle);
- double y=r*F * sin(angle);
- draw_line(x + cx, y + cy, x0 + cx, y0 + cy);
- }
- */
- }
- double sx=0;
- double sy=0;
- double sx1=0;
- double sy1=0;
- //
- double DX = 0;
- double DY = 0;
- //
- long long cur_time = 0;
- //
- void Render() {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- glTranslatef(0, 0, -10);
- glColor3d(1, 1, 1);
- glScalef(scale, scale, scale);
- //vector2d d(-2 * cos(cur_time/100.0),2 * sin(cur_time/100.0));
- vector2d d(-2,2);
- d.show(1,1);
- /*
- cur_time++;
- if (cur_time > 10000) {
- cur_time = 0;
- }
- */
- /* for(float t=0;t<2;t++){
- for(float j=0;j<2;j++){
- draw_rectangle(-t,-j,2,2,DX, DY);
- }
- }
- draw_rectangle(0,0,2,2,DX, DY);
- //draw_rectangle(2,0,2,2,DX,DY);
- //render_square(0, 0);
- */
- glFlush();
- }
- /*void draw_arrows(float cx,float cy,float r){
- draw_line();
- }*/
- void update(int t) {
- Render();
- glutTimerFunc(50, update, 0);
- }
- void keyb(unsigned char key, int x, int y) {
- if(key == 'a') {
- DX -= 0.2;
- }
- if(key == 'd') {
- DX += 0.2;
- }
- if(key == 'w') {
- DY += 0.2;
- }
- if(key == 's') {
- DY -= 0.2;
- }
- Render();
- }
- void reshape(int w, int h) {
- // предупредим деление на ноль
- // если окно сильно перетянуто будет
- if(h == 0)
- h = 1;
- float ratio = 1.0* w / h;
- // используем матрицу проекции
- glMatrixMode(GL_PROJECTION);
- // Reset матрицы
- glLoadIdentity();
- // определяем окно просмотра
- glViewport(0, 0, w, h);
- // установить корректную перспективу.
- gluPerspective(45,ratio,1,1000);
- // вернуться к модели
- glMatrixMode(GL_MODELVIEW);
- }
- int main(int argc, char **argv)
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
- glutInitWindowSize(800, 600);
- glutCreateWindow("Physics Engine");
- glEnable(GL_DEPTH_TEST);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glClearColor(0., 0.0, 128.0, 0.0);
- glutTimerFunc(50, update, 0);
- glutReshapeFunc(reshape);
- glutDisplayFunc(Render);
- glutKeyboardFunc(keyb);
- glutMainLoop();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement