Войти
colimason

Cube World простой редактор мира из кубов + проехаться по ломаной.

Автор:

Преступлю к разработке простейшего редактора, пока что буду всячески описывать, это возможно очень просто, но это мое хобби.

#3D, #Cube, #race, #redactor, #simple, #world

23 августа 2014

Комментарии [17]

Страницы: 1 2 Следующая »
#1
13:42, 23 авг 2014

Окно на весь экран
Окно создания куба
    размер цвет позиция угол по вертикальной оси кнопка создать
Окно рисования пути
    кнопка начать дальше мышью кнопка завершить скорость
Окно проигрывания кнопка старт

#2
21:00, 23 авг 2014

Дальше следует приложить усердие к вспоминанию функций opengl для создания камеры и рисованию полигонов.

#3
23:28, 23 авг 2014

презтупай к розрободке.
и пешы эщо.

#4
15:07, 24 авг 2014

slava_mib
Спасибо к разработке приступлю попожже так как не имею пк а пока с вашего позволения позволю себе продолжить подготовку.

#5
15:10, 24 авг 2014

http://www.opengl.org/wiki/Getting_started#Writing_an_OpenGL_Application Воспользуюсь документацией

#6
15:36, 24 авг 2014

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);
//ж очистительный цвет

#7
15:41, 24 авг 2014

glutMainLoop();
//и главный цикл

glClear(GL_COLOR_BUFFER_BIT);
//й очистка переднего буфера

glutSwapBuffers();
//к вывод картинки

#8
15:38, 25 авг 2014

Мы не хотим сейчас углубляться в детали, но вам необходимо создать Vertex Array Object и установить его текущим:

GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);

А

#9
15:42, 25 авг 2014

Итак, все что нам нужно – это 3 точки в трехмерном пространстве, чтобы создать треугольник:

// Массив 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) будет находиться посередине по горизонтали и вверху по вертикали.
Б

#10
15:53, 25 авг 2014

Следующим шагом будет передача данных о нашем треугольнике в OpenGL. Для этого мы создаем буфер:

// Это будет идентификатором 
// нашего буфера вершин
GLuint vertexbuffer;

// Создадим 1 буфер и поместим в 
// переменную vertexbuffer его идентификатор
glGenBuffers(1, &vertexbuffer);

// Сделаем только что созданный буфер текущим
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);

// Передадим информацию о вершинах в OpenGL
glBufferData(
GL_ARRAY_BUFFER, 
sizeof(g_vertex_buffer_data), 
g_vertex_buffer_data, 
GL_STATIC_DRAW);

В

#11
16:02, 25 авг 2014

Теперь, в главном цикле, где до этого мы ничего не выводили, наконец можно вывести треугольник :

// Указываем, что первым буфером 
// атрибутов будут вершины
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(
   0,                  
// Атрибут 0. Подробнее об этом
// будет рассказано в части,
// посвященной шейдерам.
   3,                  // Размер
   GL_FLOAT,           // Тип
   GL_FALSE,           
// Указывает, что значения не нормализованы
  0,                  // Шаг
   (void*)0            // Смещение массива в буфере
);

// Вывести треугольник!
glDrawArrays(GL_TRIANGLES, 0, 3); 
// Начиная с вершины 0, всего 3 вершины -> 
// один треугольник

glDisableVertexAttribArray(0);


Г

#12
16:22, 25 авг 2014

Итак, давайте напишем наш первый вершинный шейдер.

Первая строка в нем говорит компилятору, что мы будем использовать синтаксис OpenGL 3.

#version 330 core

Вторая строка объявляет входные данные:

layout(location = 0) in vec3 vertexPosition_modelspace;

“layout(location = 0)” указывает на буфер из которого мы будем получать атрибут vertexPosition_modelspace. Каждая вершина может иметь несколько атрибутов, такие как: позиция, один или несколько цветов, текстурные координаты и другие. мы устанавливаем параметр location в такое же значение, которое мы использовали в качестве первого параметра в glVertexAttribPointer. указываем, каким входным данным соответствует какой буфер
“vertexPosition_modelspace” будет содержать позицию вершины для каждого прохода вертексного шейдера. Название может быть любым.
Ключевое слово “in” означает, что этот атрибут является входными данными.

#13
16:27, 25 авг 2014
gl_Position.xyz = vertexPosition_modelspace;
gl_Position.w = 1.0;

gl_Position – одна из нескольких встроенных в GLSL переменных. В данном случае мы просто присваиваем ей полученное из буфера значение.

#14
16:30, 25 авг 2014
  
#version 330 core
out vec3 color;

void main(){
    color = vec3(1,0,0);
}  

Для нашего первого фрагментного шейдера мы сделаем очень простую вещь – установим цвет каждого фрагмента в красный. (Не забудьте, у нас будет 4 фрагмента на каждый пиксель, так как мы используем 4х сглаживание)

Страницы: 1 2 Следующая »
colimason

Тема в архиве.