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

Вход на сайт

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

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

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

Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...
Пример, к которому вы оставили комментарий строит именно то самое изображение на языке с#, которое вам необходимо. Отличается только цветовая палитра.

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

Рейтинг@Mail.ru
Язык программирования: 
C/C++
Среда программирования: 
Visual Studio 2015

#include <glut.h>
 
int X = 200;//размер экрана
int XS = 100;//грань куба
 
int Angel1 = 0;
int Angel2 = 0;
int Angel3 = 0;
int Angel4 = 0;
 
void Draw()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glPushMatrix();//матрица для анимации : сохраняем
	glRotatef(Angel1, 1, 0, 0);
	glRotatef(Angel2, 0, 1, 0);
	glRotatef(Angel3, 0, 0, 1);
	glRotatef(Angel4, 1, 0, 0);
 
	glLineStipple(1, 0X00FF);    // устанавливаем маску
	glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);//далее сглаживаем линии
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glEnable(GL_LINE_SMOOTH);
	glLineWidth(4);//далее строим каркас внутри кубика
	glBegin(GL_LINES);
	glColor3d(0, 0, 0);
	glVertex3f(-XS, -XS, -XS);
	glVertex3f(XS, XS, -XS);
	glVertex3f(XS, -XS, -XS);
	glVertex3f(-XS, XS, -XS);
	glEnd();//ok
	glLineWidth(3);
	glBegin(GL_LINES);
	glColor3d(0, 0, 0);
	glVertex3f(-XS, -XS, XS);
	glVertex3f(XS, XS, XS);
	glVertex3f(XS, -XS, XS);
	glVertex3f(-XS, XS, XS);
	glEnd();//ok
	glLineWidth(3);
	glBegin(GL_LINES);
	glColor3d(0, 0, 0);
	glVertex3f(XS, -XS, -XS);
	glVertex3f(-XS, -XS, XS);
	glVertex3f(XS, -XS, XS);
	glVertex3f(-XS, -XS, -XS);
	glEnd();//ok
	glLineWidth(3);
	glBegin(GL_LINES);
	glColor3d(0, 0, 0);
	glVertex3f(XS, XS, -XS);
	glVertex3f(-XS, XS, XS);
	glVertex3f(XS, XS, XS);
	glVertex3f(-XS, XS, -XS);
	glEnd();//ok
	glLineWidth(3);
	glBegin(GL_LINES);
	glColor3d(0, 0, 0);
	glVertex3f(-XS, -XS, -XS);
	glVertex3f(-XS, XS, XS);
	glVertex3f(-XS, XS, -XS);
	glVertex3f(-XS, -XS, XS);
	glEnd();//ok
	glLineWidth(3);
	glBegin(GL_LINES);
	glColor3d(0, 0, 0);
	glVertex3f(XS, -XS, -XS);
	glVertex3f(XS, XS, XS);
	glVertex3f(XS, XS, -XS);
	glVertex3f(XS, -XS, XS);
	glEnd();//ok
 
	glEnable(GL_LINE_STIPPLE); // разрешаем рисовать прерывистую линию
	glLineWidth(1);
	glBegin(GL_LINE_LOOP);//далее строим сам кубик 
	glColor3d(0, 0, 0);
	glVertex3f(-XS, -XS, -XS);
	glVertex3f(XS, -XS, -XS);
	glVertex3f(XS, XS, -XS);
	glVertex3f(-XS, XS, -XS);
	glVertex3f(-XS, -XS, -XS);
	glEnd();
	glBegin(GL_LINE_LOOP);
	glColor3d(0, 0, 0);
	glVertex3f(-XS, -XS, XS);
	glVertex3f(XS, -XS, XS);
	glVertex3f(XS, XS, XS);
	glVertex3f(-XS, XS, XS);
	glVertex3f(-XS, -XS, XS);
	glEnd();
	glBegin(GL_LINES);
	glColor3d(0, 0, 0);
	glVertex3f(-XS, -XS, XS);
	glVertex3f(-XS, -XS, -XS);
	glVertex3f(XS, -XS, XS);
	glVertex3f(XS, -XS, -XS);
	glVertex3f(XS, XS, XS);
	glVertex3f(XS, XS, -XS);
	glVertex3f(-XS, XS, XS);
	glVertex3f(-XS, XS, -XS);
	glEnd();
	glDisable(GL_LINE_STIPPLE);     
	glDisable(GL_LINE_SMOOTH);
	glPopMatrix();//сбрасываем нашу матрицу
	glutSwapBuffers();
}
 
void Timer(int)//uнст-ция по анимации
{
	if (Angel1 < 90) 
		Angel1++;
	else 
	{
		if (Angel2 < 90) 
			Angel2++;
		else 
		{
			if (Angel3 < 90) 
				Angel3++;
			else 
			{
				if (Angel4 < 90)
					Angel4++;
				else
				{
					Angel1 = 0;//обнуляем
					Angel2 = 0;
					Angel3 = 0;
					Angel4 = 0;
				}
			}
		}
	}
	//Angel2++;
	glutPostRedisplay(); //обновляем экран
	glutTimerFunc(20, Timer, 0);
}
 
void Initialize()
{
	glClearColor(1.0, 1.0, 1.0, 1.0);
	glMatrixMode(GL_PROJECTION);//тип матрицы - проекции
	glLoadIdentity();//сброс матриц
	glOrtho(-X, X, -X, X, -X, X);//сетка
	glMatrixMode(GL_MODELVIEW);
}
 
int main(int argc, char** argv)//кол арг в командн строке,их опис в виде указателя на строка
{
	//инициализация
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
	glutInitWindowSize(X*2, X*2);
	glutInitWindowPosition(200, 200);
	glutCreateWindow("Kube");
	glutDisplayFunc(Draw);
	glRotatef(55, 1, 0, 0);//поворачиваем наш кубик так, чтобы рисунок совпал в звездочку
	glRotatef(45, 0, 0, 1);
	glutTimerFunc(20, Timer, 0);//анимация таймер ф-я нужна в милисек.
	Initialize();
	glutMainLoop();/* Запуск механизма обработки событий */
	return 0;
}

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