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

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

Построения
на плоскости (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++
Среда программирования: 
Microsoft Visual C++ 2010 Express

#include "stdafx.h"
#include <glut.h>
#include <math.h>
#include <stdlib.h>
#define PI 3.1415926535898
float WinWid = 600.0, WinHei = 600.0;//размеры экрана
float R=200.0;
float Angle;
float cnt=0;
float xc,yc;
int p;
float rWhite[8] = {0,16,32,48,65,48,32,16};//массив белых радиусов для каждого круга
float rBlack[8] = {65,48,32,16,0,16,32,48};//массив чёрных радиусов для каждого круга
 
bool ChangeBlack=true, ChangeWhite=true;
 
void CIRCLE(float Xc, float Yc, float R, float color)//функция прорисовки круга
{
	glBegin(GL_TRIANGLE_FAN);
	float angle=0.0;
	if(color==0)glColor3f(0.0, 0.0, 0.0);
	if(color==1)glColor3f(1.0, 1.0, 1.0);
	for (int i = 0; i < 100; i++)
	{
		angle = 2*PI*i/100;
		glVertex2f(Xc+R*cos(angle),Yc+R*sin(angle));
	}
	glEnd();
}
void Draw()//функция прорисовки всего изображения
{
	glClear(GL_COLOR_BUFFER_BIT);//очистка буферов
	glPushMatrix();//сохраняем матрицу
 
 
	for(Angle=0;Angle<360;Angle+=45){//рисуем круги каждые 45 градусов с радиусом 200
	p=Angle/45;	
		if(ChangeWhite)//изменение белого круга
			{
				if(rWhite[p]<65)rWhite[p]++;
				if(rWhite[p]==65)
				{
					rBlack[p]=0;
					ChangeWhite=false;
					ChangeBlack=true;
				}
			}
	if(ChangeBlack)//изменение чёрного круга
			{
				if(rBlack[p]<65)rBlack[p]++;
				if(rBlack[p]==65)
				{
					rWhite[p]=0;
					ChangeBlack=false;
					ChangeWhite=true;
				}
			}
 
		xc=R*cos((Angle-cnt)*PI/180);//координаты центра круга
		yc=R*sin((Angle-cnt)*PI/180);//
 
		if(ChangeWhite)//при изменении белого круга
		{
		CIRCLE(xc,yc,rBlack[p],0);
		CIRCLE(xc,yc,rWhite[p],1);
		}
		if(ChangeBlack)//при изменении чёрного круга
		{
		CIRCLE(xc,yc,rWhite[p],1);
		CIRCLE(xc,yc,rBlack[p],0);
		}
	}
	glPopMatrix();//
	glutSwapBuffers();//меняем буферы
}
 
void Initialize()//инициализация
{
	glClearColor(0.25, 0.25, 0.25, 0.0);//цвет фона
	glMatrixMode(GL_PROJECTION);//тип использумой матрицы
	glLoadIdentity();
	glOrtho(-WinWid/2, WinWid/2, -WinHei/2, WinHei/2, -200.0, 200.0);//выбор системы координат
	glMatrixMode(GL_MODELVIEW);
}
void Timer(int)//функция таймера
{
	cnt++;//
	glutPostRedisplay();
	glutTimerFunc(30, Timer, 0);
 
}
 
int main(int argc, char** argv)
{
	glutInit(&argc, argv);//инициализируем переменные
	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
	glutInitWindowSize(WinWid, WinHei);//выбор размеров окна
	glutInitWindowPosition(50,50);//выбор позиции окна
	glutCreateWindow("DEMO");//название окна
	glutDisplayFunc(Draw);//вызов функции прорисовки
	glutTimerFunc(30, Timer, 0);//вызов функции таймера
	Initialize();
	glutMainLoop();
	return 0;
}

Прикрепленный файлРазмер
Marokhovskaya_Circles.zip850.41 кб