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

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

Построения
на плоскости (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 2010

#include "stdafx.h"
#include <glut.h>
#include <math.h>
 
#define PI 3.14159265358979323846
 
float WinWidth = 600.0;
float WinHeight = 600.0;
 
float c=100.0; //расстояние до фокуса
int segments=10; //детализированность окружности
float r=75.0; //радиус окружности
float var=0.0;
int direction=-1; //направление движения по оси абсцисс
int signY=-1; //контроль знака ординаты
 
float Gety(float x) {
	return signY*sqrt(sqrt(pow(c,4)+4*pow(x,2)*pow(c,2))-pow(x,2)-pow(c,2));
}
 
void drawCircle(float x, float y, float r, int amountSegments) {
	glLineWidth(5.0); //ширина линий
	glEnable(GL_ALPHA_TEST); //подключение glAlphaFunc
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //смешание цветов
	glEnable(GL_BLEND); //подключение glBlendFunc
	glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); //приоритет качества
        glEnable(GL_LINE_SMOOTH); //сглаживание линий
	glBegin(GL_LINE_LOOP); //отрисовка окружности
	for(int i=0;i<amountSegments;i++) {
		float angle=2.0*PI*float(i)/float(amountSegments);
		float dx = r*cosf(angle);
		float dy = r*sinf(angle);
		glVertex2f(x+dx,y+dy);
	}
	glEnd();
	glDisable(GL_ALPHA_TEST);
	glDisable(GL_BLEND);
	glDisable(GL_LINE_SMOOTH);
}
 
void Draw() {
	glClear(GL_COLOR_BUFFER_BIT); //очистка окна
	glColor3ub(239,0,0); //цвет
	for(int i=0; i<=360; i+=45) {
		glPushMatrix();
		glRotatef((float)i, 0.0, 0.0, 1.0); //вращение
		drawCircle(var,Gety(var),r,segments);
		glPopMatrix();
	}
	glutSwapBuffers(); //вывод на экран
}
 
void Timer(int value) {
	if(var>=0&&direction== 1) signY=-1;
	if(var>=0&&direction==-1) signY= 1;
	if(var<0 &&direction== 1) signY= 1;
	if(var<0 &&direction==-1) signY=-1;
 
	if(abs(var)>sqrt(2.0)*c&&direction==-1) {
		var++;
		direction*=-1;
	}
	else if(abs(var)>sqrt(2.0)*c&&direction==1) {
		var--;
		direction*=-1;
	}
	glutPostRedisplay(); //вызов ф-ции рисования
 
	if(direction==-1) var--;
	else var++;
	glutTimerFunc(abs(var*PI/2/c)+7,Timer,0); //установка таймера
}
 
void Initialize() {
	glClearColor(0.0, 0.0, 0.0, 1.0); //установка цвета фона
	glMatrixMode(GL_PROJECTION); //работа с проекционной матрицой
	glLoadIdentity(); //загрузка единичной матрицы
	gluOrtho2D(-WinWidth/2, WinWidth/2, -WinHeight/2, WinHeight/2); //определяем двухмерную ортографическую проекцию
	glMatrixMode(GL_MODELVIEW); //работа с модельно-видовой матрицей
}
 
int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
	glutInitWindowSize(WinWidth, WinHeight);
	glutInitWindowPosition(100, 100);
	glutCreateWindow("LemniscateFlower");
	glutDisplayFunc(Draw); //Draw() отвечает за рисование
	glutTimerFunc(0,Timer,0); //инициализация таймера
	Initialize();
	glutMainLoop();
	return 0;
}

Прикрепленный файлРазмер
kontrolskiy_lemnicircles.zip153.07 кб