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

Вход на сайт

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

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

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

Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.
Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки: import turtle def kanter(x, y, d):     if d > 1:         turtle...
Как реализовать в данном примере границы расчёта?

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

Рейтинг@Mail.ru Яндекс.Метрика
Среда программирования: 
Microsoft Visual Studio Express 2012

#include <glut.h> 
#include <Windows.h> //для задержки между вращениями
 
float angle = 90.0f; //вводим угол на который будем поворачивать
float mas[4] = {1.0, 0.0, 0.0, 0.0}; //переменные {флаг, х, у, z} для изменения вектора вращения
 
//функция прорисовки
void drawCube(void){ 
 
glEnable(GL_LINE_SMOOTH); //для сглаживания
glEnable (GL_BLEND); 
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glHint (GL_LINE_SMOOTH_HINT, GL_NICEST);
 
glColor3f(0.0, 0.0, 0.0); //определяем цвет линий
 
glLineWidth(2.0); //для толщины внутренних диагональных линий
  glBegin(GL_LINES); //прорисовка внутренних диагональных линий
	glVertex3f( 0.0,    0.3,  0.425);
	glVertex3f( 0.425, -0.3,  0.0);
	glVertex3f( 0.425,  0.3,  0.0);
	glVertex3f( 0.0,   -0.3,  0.425);
	glVertex3f( 0.0,    0.3,  0.425);
	glVertex3f( 0.0,    0.3, -0.425);
	glVertex3f( 0.425,  0.3,  0.0);
	glVertex3f(-0.425,  0.3,  0.0);
	glVertex3f( 0.0,    0.3,  0.425);
	glVertex3f(-0.425, -0.3,  0.0);
	glVertex3f(-0.425,  0.3,  0.0);
	glVertex3f( 0.0,   -0.3,  0.425);
	glVertex3f( 0.0,   -0.3, -0.425);
	glVertex3f( 0.0,   -0.3,  0.425);
	glVertex3f( 0.425, -0.3,  0.0);
	glVertex3f(-0.425, -0.3,  0.0);
	glVertex3f( 0.0,   -0.3, -0.425);
	glVertex3f( 0.425,  0.3,  0.0);
	glVertex3f( 0.425, -0.3,  0.0);
	glVertex3f( 0.0,    0.3, -0.425);
	glVertex3f( 0.0,   -0.3, -0.425);
	glVertex3f(-0.425,  0.3,  0.0);
	glVertex3f( 0.0,    0.3, -0.425);
	glVertex3f(-0.425, -0.3,  0.0);
  glEnd();
 
	glLineWidth(0.6); //толщина внешних линий ребер	
	glEnable(GL_LINE_STIPPLE); //функция прорисовки прерывистых линий
	glLineStipple(1, 0x00F0); //длина и расстояние между штрихами
	glBegin(GL_LINES); //прорисовка	внешних линий ребер	
	glVertex3f( 0.0,    0.3,  0.425);
	glVertex3f( 0.0,   -0.3,  0.425);
	glVertex3f( 0.0,   -0.3,  0.425);
	glVertex3f( 0.425, -0.3,  0.0);
	glVertex3f( 0.425, -0.3,  0.0);
	glVertex3f( 0.425,  0.3,  0.0);
	glVertex3f( 0.425,  0.3,  0.0);
	glVertex3f( 0.0,    0.3,  0.425);
	glVertex3f( 0.0,    0.3,  0.425);
	glVertex3f(-0.425,  0.3,  0.0);
	glVertex3f(-0.425,  0.3,  0.0);
	glVertex3f( 0.0,    0.3, -0.425);
	glVertex3f( 0.0,    0.3, -0.425);
	glVertex3f( 0.425,  0.3,  0.0);	 
	glVertex3f(-0.425,  0.3,  0.0);
	glVertex3f(-0.425, -0.3,  0.0);
	glVertex3f(-0.425, -0.3,  0.0);
	glVertex3f( 0.0,   -0.3,  0.425);	
	glVertex3f( 0.0,   -0.3, -0.425);
	glVertex3f(-0.425, -0.3,  0.0);	 
	glVertex3f( 0.425, -0.3,  0.0);
	glVertex3f( 0.0,   -0.3, -0.425);
	glVertex3f( 0.0,   -0.3, -0.425);
	glVertex3f( 0.0,    0.3, -0.425);	 
  glEnd();
    glDisable(GL_LINE_STIPPLE); //отключаем функцию прорисовки прерывистых линий
}
 
//меняем вектор вращения
void change(float *arr){
 
	if(arr[0] == 1.0){
	 arr[1] = -0.2125;
	 arr[2] =  0.0;
	 arr[3] = -0.2125;
	 arr[0] =  2.0;
	 return;
	}
 
	 if(arr[0] == 2.0){
	 arr[1] =  0.2125;
	 arr[2] =  0.0;
	 arr[3] = -0.2125;
	 arr[0] =  3.0;
	 return;
	}
 
	if(arr[0] == 3.0){
	 arr[1] = 0.0;
	 arr[2] = -1.0;
	 arr[3] = 0.0;
	 arr[0] = 1.0;
	 return;
	}
}
 
//функция прорисовки
void renderScene(void) {
	glClearColor(1.0, 1.0, 1.0, 1.0); //затираем рисунок фоном
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //очистка буфера цвета и глубины
	glLoadIdentity();//обнуление трансформации
 
	glTranslatef(0.0, 0.0, 1.0); //для нормальной видимости куба
 
	if (mas[2] == -1.0){ //установка камеры в положение вверх ногами
		   gluLookAt( 0.0f, 0.6f, 0.85f, //координаты камеры
		   0.0f, 0.0f,  0.0f, //координаты центра
		   0.0f, -1.0f,  0.0f); //координаты вектора направления
	}
	else { //установка камеры в нормальном положении
		   gluLookAt(0.0f, 0.6f, 0.85f,
		   0.0f, 0.0f,  0.0f,
		   0.0f, 1.0f,  0.0f); 
	}
 
	if (angle != 90.0f)  
	   angle += 0.3125f; //увеличиваем угол до 90 градусов
	else { 
		angle = 0.0; //обнуляем угол после полного поворота на 90 градусов
		change(mas); //изменяем вектор вращения
		Sleep(300); //задержка между вращениями куба
	}	
 
	Sleep(2);//задержка во время поворота куба
	glRotatef(angle, mas[1],  mas[2], mas[3]);//функция вращения куба, (угол, х, у, z)	
	drawCube();//отрисовка куба
	glutSwapBuffers(); //смена буфферов 
}
 
//главная функция
int main(int argc, char **argv) {
 
	//инициализация GLUT и создание окна
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
	glutInitWindowPosition(100,100);
	glutInitWindowSize(600,600);
	glutCreateWindow("Cube");
 
	glutDisplayFunc(renderScene); //функция отрисовки всей сцены
	glutIdleFunc(renderScene); //функция для создания анимации 
 
	glutMainLoop(); //графический цикл 
 
	return 1;
}

Прикрепленный файлРазмер
Ivanova_cube.rar262 кб