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

Вход на сайт

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

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

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

dobryj den, popytalas otkryt prikreplionnyj fail ctoby posmotret kak rabotaet, no mne ego ne pokazyvaet vydajet osibku. Pochemu?
Очень интересно! ии сайт крутой жалко что умирает(
У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.

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

Рейтинг@Mail.ru Яндекс.Метрика
Язык программирования: 
C/C++
Среда программирования: 
microsoft visual studio 2013

#include <glut.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
 
using namespace std;
float angle = 0.0;//параметр отвечающий за движение по оси х
float q = 0.0;//счетчик для Возврата волны
float w = 1.0;//параметр увеличивающий пи
int t = 500;//кол-во линий
float x;//координаты x
float y;//координаты y
 
//сохранение пропорций
void proporsion(int w, int h)
{
	if (h==0)
	{
		h=1;
	}
	float ratio = float(w)/h;
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(45,ratio,500,500);
	glMatrixMode(GL_MODELVIEW);
}
 
//рисование
void paint(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// очистка буфера
 
	glLineWidth(3);//толщина линии
 
	glPushMatrix();//сохранение матрицы
	glScalef(0.3, 0.3, 1.0);//масштабирование
	glRotatef(6, 0, 0, 1);//поворот
	glTranslatef(angle, 0, 0);//перемещение
	glBegin(GL_LINE_STRIP);//рисуем линии
	glColor3ub(205, 102, 29);//цвет
	//флаг
	for (int i = 0; i <= t; i++)
	{
		float a = (float)i / (float)t * 3.1415f * (3.5 * w);//градус
		x = a*2-5;
		y = cos(x)/2+5;
		glVertex2f(x, y);
 
		x = a*2-5;
		y = cos(x)/2-5;
		glVertex2f(x, y);
 
	}
	glEnd();
	glPopMatrix();//восстановление матрицы
 
	//стороны
	//левая
	glBegin(GL_QUADS);
	glColor3ub(255,255,255);
	glVertex2f(-5, 5);
	glVertex2f(-1.35, 5);
	glVertex2f(-1.35, -5);
	glVertex2f(-5, -5);
	glEnd();
	//правая
	glBegin(GL_QUADS);
	glColor3ub(255,255,255);
	glVertex2f(5, 5);
	glVertex2f(5.0, -5);
	glVertex2f(2.0, -5);
	glVertex2f(2.0, 5);
	glEnd();
 
 
	glutSwapBuffers();
	//system("pause");
 
}
//установка таймера
void Timer(int)
{
	angle -= 0.5;//движение
	w +=0.03;//увеличение градуса
	q ++;//счетчик
	if(q == 13)
	{
		angle = angle + 6.5;//возвращение в начальное положение
		q = 0;
		w = 1.0;
	}
 
	glutTimerFunc(100,Timer,0);//обновлять экран каждые 100мсек
	glutPostRedisplay();
}
 
int main(int argc, char **argv) {
 
	// инициализация
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);//double: буфер рисования и буф сторонних вычислений
	glutInitWindowPosition(100, 100);//позиция окна
	glutInitWindowSize(500, 500);//размеры окна
	glutCreateWindow("флаг");//название окна
	glClearColor(1.0, 1.0, 1.0, 1.0);//цвет окна
	glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0);//установка границ
 
	glutDisplayFunc(paint);//вызов функции рисования
	glutReshapeFunc(proporsion);//вызов функции сохранения пропорций
	glutTimerFunc(0,Timer,0);//вызов таймера
	glutMainLoop();//основной цикл
	return 1;
}

Прикрепленный файлРазмер
Bruns_Flag.rar544.61 кб