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 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_line(double x, double y, double x1, double y1) {
- glBegin(GL_LINES);
- glVertex2d(x, y);
- glVertex2d(x1, y1);
- glEnd();
- }
- void draw_rectangle(float lx, float ly, float a, float b){
- draw_line(lx, ly, lx, ly+a);
- draw_line(lx, ly+a, lx+b, ly+a);
- draw_line(lx+b, ly+a, lx+b, ly);
- draw_line(lx+b, ly, lx, ly);
- /*
- double da=2*M_PI/360;
- 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);
- }
- double dg=2*M_PI/12;
- for(double angle=0;angle<=2* M_PI;angle += dg){
- double x=r * cos(angle);
- double y=r * sin(angle);
- double x0=r*0.8 * cos(angle);
- double y0=r*0.8 * sin(angle);
- draw_line(x + cx, y + cy, x0 + cx, y0 + cy);
- }
- double dr=2*M_PI/60;
- for(double angle=0;angle<=2* M_PI;angle += dr){
- double x=r * cos(angle);
- double y=r * sin(angle);
- double x0=r*0.9 * cos(angle);
- double y0=r*0.9 * 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;
- //
- void draw_circle(float cx, float cy, float r) {
- int N = 30;
- float d_phi = 2 * M_PI / N;
- float angle = 0;
- for(int i = 0; i < N; i++) {
- float x = r * cos(angle);
- float y = r * sin(angle);
- angle += d_phi;
- //draw_line(cx, cy, cx+x, cy+y);
- draw_line(cx, cy, cx+x, cy+y);
- }
- }
- struct vector2d
- {
- float x,y;
- vector2d (float x_,float y_){
- x=x_;
- y=y_;
- }
- vector2d(){
- x=0;
- y=0;
- }
- void show(){
- 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;
- }
- vector2d mul(float t){
- return vector2d(x*t,y*t);
- }
- void line (){
- draw_line(0,0,x,y);
- }
- };
- void Render() {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- glTranslatef(0, 0, -10);
- glColor3d(1, 1, 1);
- glScalef(scale, scale, scale);
- // draw_circle(1,1,2);
- vector2d i(3,6);
- i.line();
- vector2d j(6,-3);
- j.line();
- //draw_rectangle(-1, 0, 2, 2);
- //draw_rectangle(1, 1, 2, 4);
- /* 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 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)
- {
- vector2d v(1,2);
- vector2d c(3,4);
- vector2d d;
- d = v.add(c);
- d.show();
- vector2d i(3, 6);
- vector2d j(-6, 3);
- float dot_result = i.dot(j);
- cout << dot_result << endl;
- c.show();
- vector2d mul_result = c.mul(2);
- mul_result.show();
- 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