Уроки, алгоритмы, программы, примеры

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Microsoft Visual Studio
Статья по теме: 

Спрайтовая анимации на C++
Прежде чем приступать к реализации задачи, необходимо ознакомиться с этой статьей
http://grafika.me/node/518

Код программы: 

 

#include <SFML/Graphics.hpp>
using namespace sf;
int ground = 150;
 
class PLAYER { /* создаем класс PLAYER( нам нужно чтобы движения персонажа осуществлялись под действием  гравитации) */
 
public:
	float dx, dy; // скорость
	FloatRect rect; //  здесь rect(x, y, widht, height)
	bool onGround; /*  onGround- переменная, которая показывает, находится ли персонаж на земле */
	Sprite sprite; // сюда будем загружать картинку
	float currentFrame; //  текущий кадр для анимации
 
	PLAYER(Texture &image)
	{
		sprite.setTexture(image); // в конструктор класса загружаем картинку
		rect = FloatRect(0, 0, 40, 50); /* указываем первоначальные координаты x=0, y=0, ширина-40, высота-50 */
 
		dx = dy = 0;
		currentFrame = 0;
	}
 
	void update(float time)
	{
		rect.left += dx*time; // rect.left-есть координата х, перемещаем ее на dx*time
 
		if (!onGround) dy = dy + 0.0005*time; /* если мы не на земле, то падаем с ускорением ( ускорение -0.005 умножаем на время получаем скорость) */
		rect.top += dy*time; // rect.top - есть координата у
		onGround = false;
 
		if (rect.top > ground) 
		{ rect.top = ground; dy = 0; onGround = true; } // мы на земле
 
		currentFrame += 0.005*time; // скорость анимации
		if (currentFrame > 6) currentFrame -= 6; // всего у нас 6 кадров
		if (dx > 0) sprite.setTextureRect(IntRect(40 * int(currentFrame), 244, 40, 50)); /* меняем первую координату, то есть рисунок текстуры сдвигается каждый раз на 40( при движении направо- правая анимация */
          if (dx < 0) sprite.setTextureRect(IntRect(40 * int(currentFrame) + 40, 244, -40, 50)); // при движении налево- зеркальная
 
   sprite.setPosition(rect.left, rect.top); // выводим наш спрайт в позицию x, y 
 
		dx = 0;
	}
};
 
int main()
{
	RenderWindow window(VideoMode(200, 200), "SFMLworks"); / создаем окно 200 на 200 с именем SFMLworks */
 
	Texture t;
	t.loadFromFile("images/fang.png"); // загружаем картинку
	float currentFrame = 0;
 
	PLAYER p(t); // загружаем текстуру
 
	Clock clock; /* засекаем время с последнего тика( чтобы привязка персонажа была ко времени, а не к мощности процессора) */
 
	while (window.isOpen())
	{
		float time = clock.getElapsedTime().asMicroseconds(); /* создаем переменную время, getElapsedTime() - дать прошедшее время( возьмем  его в микросекундах) */
 
	clock.restart(); // перезагружает часы
	time = time / 800; //здесь происходит регулировка скорости движения персонажа
 
		Event event;
		while (window.pollEvent(event))
		{
 
			if (event.type == Event::Closed)
				window.close(); // обрабатываем событие закрытия окна
		}
if (Keyboard::isKeyPressed(Keyboard::Left)) // если клавиша нажата и клавиша налево
		{
			p.dx = -0.1; // при нажатии налево- ускоряемся на -0.1
		}
if (Keyboard::isKeyPressed(Keyboard::Right)) // если клавиша нажата и клавиша направо
		{
			p.dx = 0.1; // при нажатии направо- ускоряемся на 0.1
 
		}
		if (Keyboard::isKeyPressed(Keyboard::Up)) // вверх
		{
			if (p.onGround) { p.dy = -0.4; p.onGround = false; } // если мы на земле, то только тогда можем осуществить прыжок
		}
 
		p.update(time); // загружаем время
		window.clear(Color::White); // очищаем экран
 
		window.draw(p.sprite); // рисуем спрайт
		window.display(); // выводим на дисплей
	}
	return 0;
}

Прикрепленный файлРазмер
project3.zip1.39 Мб