Окно на весь экран
Окно создания куба
размер цвет позиция угол по вертикальной оси кнопка создать
Окно рисования пути
кнопка начать дальше мышью кнопка завершить скорость
Окно проигрывания кнопка старт
Дальше следует приложить усердие к вспоминанию функций opengl для создания камеры и рисованию полигонов.
презтупай к розрободке.
и пешы эщо.
slava_mib
Спасибо к разработке приступлю попожже так как не имею пк а пока с вашего позволения позволю себе продолжить подготовку.
glutInit(&argc, argv);
//а инициализация окна
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
//б двойная буферизация
glutInitWindowSize(800, 600);
//в размер окна
glutInitWindowPosition(0, 0);
//г позиция окна
glutCreateWindow("Cube World");
//д заголовок окна
glutDisplayFunc(renderingFunction);
//е функция рендеринга
glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
//ж очистительный цвет
glutMainLoop();
//и главный цикл
glClear(GL_COLOR_BUFFER_BIT);
//й очистка переднего буфера
glutSwapBuffers();
//к вывод картинки
Мы не хотим сейчас углубляться в детали, но вам необходимо создать Vertex Array Object и установить его текущим:
GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);
А
Итак, все что нам нужно – это 3 точки в трехмерном пространстве, чтобы создать треугольник:
static const GLfloat g_vertex_buffer_data[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
точка с координатами (-1, -1) будет находиться в левом-нижнем углу экрана, точка (1, -1) в правом нижнем, а точка (0, 1) будет находиться посередине по горизонтали и вверху по вертикали.
Б
Следующим шагом будет передача данных о нашем треугольнике в OpenGL. Для этого мы создаем буфер:
GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(
GL_ARRAY_BUFFER,
sizeof(g_vertex_buffer_data),
g_vertex_buffer_data,
GL_STATIC_DRAW);
В
Теперь, в главном цикле, где до этого мы ничего не выводили, наконец можно вывести треугольник :
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(
0,
3,
GL_FLOAT,
GL_FALSE,
0,
(void*)0
);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
Г
Итак, давайте напишем наш первый вершинный шейдер.
Первая строка в нем говорит компилятору, что мы будем использовать синтаксис OpenGL 3.
Вторая строка объявляет входные данные:
layout(location = 0) in vec3 vertexPosition_modelspace;
“layout(location = 0)” указывает на буфер из которого мы будем получать атрибут vertexPosition_modelspace. Каждая вершина может иметь несколько атрибутов, такие как: позиция, один или несколько цветов, текстурные координаты и другие. мы устанавливаем параметр location в такое же значение, которое мы использовали в качестве первого параметра в glVertexAttribPointer. указываем, каким входным данным соответствует какой буфер
“vertexPosition_modelspace” будет содержать позицию вершины для каждого прохода вертексного шейдера. Название может быть любым.
Ключевое слово “in” означает, что этот атрибут является входными данными.
gl_Position.xyz = vertexPosition_modelspace;
gl_Position.w = 1.0;
gl_Position – одна из нескольких встроенных в GLSL переменных. В данном случае мы просто присваиваем ей полученное из буфера значение.
#version 330 core
out vec3 color;
void main(){
color = vec3(1,0,0);
}
Для нашего первого фрагментного шейдера мы сделаем очень простую вещь – установим цвет каждого фрагмента в красный. (Не забудьте, у нас будет 4 фрагмента на каждый пиксель, так как мы используем 4х сглаживание)