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

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

Построения
на плоскости (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 Яндекс.Метрика
Среда программирования: 
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 кб