Система часток

Автор работы: Пользователь скрыл имя, 13 Апреля 2012 в 15:09, курсовая работа

Краткое описание

Задачей курсового проектирования является разработка программной системы от начала (анализ требований) до конца (тестирование и сопровождение-документация).
В ходе выполнения курсовой работы получить профессиональные навыки в постановке задачи, анализе требований, выборе представления исходных данных и результата, разработке спецификаций, проектирования программной системы, написании программы на выбранном языке программирования с использованием объектно-ориентированной технологии и библиотек классов, тестировании и отладке программы, оформлении документации.

Содержание работы

Вступ…………………………………………………………………………….3
Опис алгоритму ………………………………………………………………..4
Текст програми.………………………………………………………………...5
Список використаної літератури …………………………………………….9

Содержимое работы - 1 файл

Курсова робота.doc

— 46.50 Кб (Скачать файл)

Мінестерство  Освіти та Науки України 
 
 
 
 

Звіт по курсовій роботі на тему

„Система часток” 
 
 
 
 

                                                Виконав: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

               Кіровоград 2011

Зміст 

Вступ…………………………………………………………………………….3

Опис алгоритму  ………………………………………………………………..4

Текст програми.………………………………………………………………...5

Список використаної літератури …………………………………………….9 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

     Вступ

     Задачей курсового проектирования является разработка программной системы  от начала (анализ требований) до конца (тестирование и сопровождение-документация).

     В ходе выполнения курсовой работы получить профессиональные навыки в постановке задачи, анализе требований, выборе представления исходных данных и  результата, разработке спецификаций, проектирования программной системы, написании программы на выбранном языке программирования с использованием объектно-ориентированной технологии и библиотек классов, тестировании и отладке программы, оформлении документации. 
 

Опис  алгоритму 

     Система частиц представляет из себя вектор из структур. Добавление нового элимента в вектор происходит каждые 100 мс. В то время как функция вызванная из функции-рендера постоянно ведет пересчет местоположения и поворота текстурированого полигона.

Тектс порграми 
 

#include <GL/glew.h>

#include <GL/glu.h>

#include <GL/freeglut.h>

#include <iostream>

#include <string>

#include <vector>

#include <map>

#include <utility>

#include <cmath>

#include <cstdlib> 

#include "picopng.h" 
 

GLuint texture_color_location; 
 
 

std::map<std::string, GLuint*> textures;

float angle; 

struct Mouse {

GLfloat x,y;

} mouse_position; 

struct Particle {

    GLfloat x,y;

    GLfloat speed;

    GLfloat angle;

    GLfloat distance;

}; 

std::vector<Particle> particle_storage; 
 
 
 
 

void addTexture(std::string name, std::string path) {

      GLuint *texture_id = new GLuint; 

      glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 

      glGenTextures(1, texture_id);

      glBindTexture(GL_TEXTURE_2D, *texture_id);

      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

      std::vector<unsigned char> buffer, image;

      loadFile(buffer, path.c_str()); //picopng

      unsigned long width, heigth;

      int error = decodePNG(image, width, heigth,

                  buffer.empty() ? 0 : &buffer[0], (unsigned long) buffer.size()); 

      if (error != 0)

            std::cout << "Ошибка при открытии файла \"" << path << "\":" << error

                        << std::endl; 

      glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, heigth, 0, GL_RGBA,

                  GL_UNSIGNED_BYTE, image.data()); 

      if (glGetError() != GL_NO_ERROR) {

            std::cout << "Ошибка создания \"" << name << "\" текстуры."

                        << std::endl;

      } else {

            textures.insert(std::make_pair(name, texture_id));

      }

} 

GLuint getTexture(std::string name) {

      std::map<std::string, GLuint*>::iterator iterator = textures.find(name); //Это С++!!! Ничего другого на ум не пришло.

      if (iterator != textures.end()) {

            return *iterator->second;

      } else {

            //std::cout << "Текстура \"" << name << "\" не найдена." << std::endl;

            return 0;

      }

} 
 
 
 

void rotate(int null) {

    angle += 1.0f;

    glutTimerFunc(10, rotate, 0);

    glutPostRedisplay();

} 

void GLQuad(std::string texture, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) {

      GLuint texture_id = getTexture(texture); 

    glPushMatrix();

      glTranslatef(0.0f, 0.0f, -6.0f); 

      glBindTexture(GL_TEXTURE_2D, texture_id);

      glBegin(GL_QUADS);

      glTexCoord2f(0.0f, 1.0f);

      glVertex3f(x1, y1, 0);

      glTexCoord2f(1.0f, 1.0f);

      glVertex3f(x2, y1, 0);

      glTexCoord2f(1.0f, 0.0f);

      glVertex3f(x2, y2, 0);

      glTexCoord2f(0.0f, 0.0f);

      glVertex3f(x1, y2, 0);

      glEnd(); 

      glPopMatrix();

} 

void particle_out() {

        std::vector<Particle>::iterator iterator = particle_storage.begin();

        while (iterator!=particle_storage.end()) {

            Particle *particle = iterator.base();

            glPushMatrix();

            GLfloat x,y,a;

            x = particle->x+particle->distance*std::cos(particle->angle); 

            y = particle->y+particle->distance*std::sin(particle->angle);

            a = 360*cos(particle->angle);

            glTranslatef(x, y, -6.0f);

            glRotatef(a, 0.0f, 0.0f, 1.0f);

            glScalef(particle->distance/50.0f,particle->distance/50.0f,1.0f);

            GLQuad("star", -16.0f, -16.0f, 16.0f, 16.0f);

            glPopMatrix();

            // Воздействие

Информация о работе Система часток