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

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

Построения
на плоскости (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 <glut.h>
#include <math.h>
#define GL_PI 3.1415
 
GLfloat OX = 200;
GLfloat OY = 200;
GLfloat OZ = 200;
 
GLfloat xRot = 50.0f;
GLfloat yRot = 20.0f;
GLfloat x, y, z, angel;
 
GLfloat sizes[2];//размер точек
GLfloat step;//запоминаем поддерживаемый инкремент точек
GLfloat curSize;//размер текущ точки
 
 
void Draw()
{
	glClear(GL_COLOR_BUFFER_BIT);//очищаем окно исп тек цвет очистки
	glBegin(GL_LINE);
	glNormal3f(0.0, 1.0, 0.0);//нормаль для освещения не будет стоять на месте,
	//она будет поворачиваться вместе с спиралькой под таким же углом
	//можно зафиксировать с помощью glPushMatrix() и glPopMatrix()
	glEnd();
	glPushMatrix();//запоминаем матрицу
	glRotatef(xRot, 0.0f, 1.0f, 0.0f);
	glRotatef(yRot, 0.0f, 1.0f, 1.0f);
	glGetFloatv(GL_POINT_SIZE_RANGE, sizes);//минимальный поддерживаемый размер точки будет возвращен в Sizes [0], а максимальный поддерживаемый размер будет записан в Sizes [ 1 ]
	glGetFloatv(GL_POINT_SIZE_GRANULARITY, &step);//найти наименьший поддерживаемый инкремент между размерами пикселей
	//задаем исходный размер точек
	curSize = sizes[0];
	z = -100.0f;	
	for (angel = 0.0f; angel <= (2.0f*GL_PI)*3.0f; angel += 0.1f)
	{
		x = 100.0f*sin(angel);
		y = 100.0f*cos(angel);
		glPointSize(curSize);
		glBegin(GL_POINTS);
		glColor3ub(255, 128, 0);//золотой
		glVertex3f(x, y, z);//точки спиральки
		glEnd();
		z += 1.0f;
		curSize += step;
	}
	glEnd();
	glPopMatrix();//сброс матрицы
	glutSwapBuffers();//очищаем очередь текущих команд и переключаем буферы
}
 
void Timer(int)
{
	xRot++;
	glutPostRedisplay();//можно заменить на функцию Draw()
	glutTimerFunc(20, Timer, 1);
}
 
void Timer2(int)
{
	yRot++;
	glutPostRedisplay();
	glutTimerFunc(10, Timer2, 1);
}
 
void Init()
{
	glClearColor(0.0, 0.0, 0.0, 1.0);
	glMatrixMode(GL_PROJECTION);//тип матрицы - проекции
	glLoadIdentity();//сброс матриц
	glOrtho(-OX, OX, -OY, OY, -OZ, OZ);//сетка 3Д с началом координат в центре
	glMatrixMode(GL_MODELVIEW);
 
}
 
float ambient[] = {0.3, 0.3, 0.3, 1.0};
float diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
float black[] = {0.0, 0.0, 0.0, 1.0};
float lpos[] = {OX, 0, 0, 1.0};
 
int main(int argc, char** argv)//кол-во аргументов в командной строке,их описание в виде указателя на строку
{
	//инициализация
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
	glutInitWindowSize(2*OX, 2*OY);
	glutInitWindowPosition(500, 200);
	//glShadeModel(GL_SMOOTH);//режим сглаживания цветов по умолчанию FLAT-не гладко а поп последнему
	glutCreateWindow("3D scene");
	//Регистрация
	glutDisplayFunc(Draw);
	glutTimerFunc(20, Timer, 1);
	glutTimerFunc(10, Timer2, 1);
	glEnable(GL_POINT_SMOOTH);//режим сглаживание точек из квадратных в круглые
 
	glEnable(GL_LIGHTING);//освещение
	glLightModelfv(GL_LIGHT_MODEL_AMBIENT, black);//убираем рассеянный свет
	glEnable(GL_LIGHT0);//один источник света
	glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);//тусклый рассеянный свет
	glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);//диффузный белый 
	glLightfv(GL_LIGHT0, GL_POSITION, lpos);//расположен в точке lpos
	glEnable(GL_COLOR_MATERIAL);//освещаем окрашенный предмет без текстур
	glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);//спереди и сзади, ведь предмет анимированый, потом указываем, что свет и диффузный и рассеянный
 
	Init();
	glutMainLoop();/* Запуск механизма обработки событий */
	return 0;
}

Прикрепленный файлРазмер
hahulina_demo_spiralka.zip13.31 кб