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

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

Построения
на плоскости (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 Яндекс.Метрика
Язык программирования: 
C/C++
Среда программирования: 
Visual Studio 2015

#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>
#include <iostream>
 
 
const int winW = 350; // Ширина окна
const int winH = 350; // Высота окна
 
using namespace std;
 
int main() {
	sf::RenderWindow window(sf::VideoMode(winW, winH), "CMYK-CMYK-CMYK");
 
	sf::Color cl_c(0, 255, 255, 85); //Cyan
	sf::Color cl_m(255, 0, 255, 85); //Magenta
	sf::Color cl_y(255, 255, 0, 85); //Yellow
 
	int radius = 12; // Радиус шарика
 
	vector <sf::CircleShape> all_cir; // Вектор окружностей
 
	for (int i = 0; i < 7; ++i) {
		for (int j = 0; j < 7; ++j) {
			// Создаем по три окружности, каждого цвета.
			sf::CircleShape c1(radius);
			c1.setPosition(sf::Vector2f(50*j, 50*i));
			c1.setFillColor(cl_y);
			all_cir.push_back(c1);
 
			sf::CircleShape c2(radius);
			c2.setPosition(sf::Vector2f(50 * j, 50 * i));
			c2.setFillColor(cl_m);
			all_cir.push_back(c2);
 
			sf::CircleShape c3(radius);
			c3.setPosition(sf::Vector2f(50 * j, 50 * i));
			c3.setFillColor(cl_c);
			all_cir.push_back(c3);
		}
	}
 
 
 
	bool back = 0;
	int distance = 30; // Дистанция, на котору будут разбегаться окружности
	while (1) {
		sf::Event event;
		while (window.pollEvent(event)) {
			// События закрытия окну по клику на крестик и по нажатию Esc
			if (event.type == sf::Event::Closed || event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
				return 0;
		}
 
		window.clear(sf::Color::White); // Очищаем окно
 
		for (int i = 0; i < all_cir.size() - 2; i += 3) {
			if (i % 2 == 0) { // Четные и нечетные окружности двигаются в противоположных направлениях
				if (!back) { 
					sf::Vector2f p = all_cir[i].getPosition();
					all_cir[i].setPosition(p.x, p.y + 0.5); // Движение вверх
					p = all_cir[i + 1].getPosition();
					all_cir[i + 1].setPosition(p.x + 0.5, p.y - 0.5); // Движение вправо и вниз
					p = all_cir[i + 2].getPosition();
					all_cir[i + 2].setPosition(p.x - 0.5, p.y - 0.5); // Движение влево и вверх
				}
				else { // Движение в обратную сторону
					sf::Vector2f p = all_cir[i].getPosition();
					all_cir[i].setPosition(p.x, p.y - 0.5); // Движение вниз
					p = all_cir[i + 1].getPosition();
					all_cir[i + 1].setPosition(p.x - 0.5, p.y + 0.5); // Движение влево и вверх
					p = all_cir[i + 2].getPosition();
					all_cir[i + 2].setPosition(p.x + 0.5, p.y + 0.5); // Движение вправо и вниз
				}
 
			}
			else {
				if (!back) {
					sf::Vector2f p = all_cir[i].getPosition();
					all_cir[i].setPosition(p.x, p.y - 0.5); // Движение вниз
					p = all_cir[i + 1].getPosition();
					all_cir[i + 1].setPosition(p.x - 0.5, p.y + 0.5); // Движение влево и вверх
					p = all_cir[i + 2].getPosition();
					all_cir[i + 2].setPosition(p.x + 0.5, p.y + 0.5); // Движение вправо и вниз
				}
				else {
					sf::Vector2f p = all_cir[i].getPosition();
					all_cir[i].setPosition(p.x, p.y + 0.5);  // Движение вверх
					p = all_cir[i + 1].getPosition();
					all_cir[i + 1].setPosition(p.x + 0.5, p.y - 0.5); // Движение вправо и вниз
					p = all_cir[i + 2].getPosition();
					all_cir[i + 2].setPosition(p.x - 0.5, p.y - 0.5); // Движение влево и вверх
				}
			}
 
		}
		distance--;
		sf::sleep(sf::microseconds(10060)); // Далаем паузу, иначе анимация слишком быстрая
		for (int i = 0; i < all_cir.size(); i++) // Отрисовываем круги
			window.draw(all_cir[i], sf::BlendMultiply); // sf::BlendMultiply - наложение цветов
		window.display(); // Отображаем то, что нарисовали.
 
		if (distance == 0) { // Если отдалились на необходимое расстояние, меняем направление движения
			back = 1 - back;
			distance = 30;
		}
	}
}

Прикрепленный файлРазмер
CMYK dots.zip783.03 кб