К основному контенту

Сообщения

Ray marching и не только

Давненько я не баловался фракталами, а руки что-то чешутся... Видимо пора сотворить что-то и поделиться с миром ) Но всё меняется, вернее давно поменялось, фракталы уже давно рисуются шейдерами, как правило фрагментными. И то что я когда то делал (ковёр Серпинского, остора Коха и другое - на основе линий) - увы, уже не впечатляет ;) Скрины 3d фракталов впечатляют и завораживают, глядя на некоторые даже не верится, что их сотворил алгоритм. Для визуализации поверхности, которая не определена полигонами, мы попробуем использовать ray marching (raymarching, марширующий луч, марш луча, ну в общем за точность перевода не ручаюсь), а результат думаю скоро сами увидим )) Важно заметить, что эта техника используется не только для рисования фракталов. И так, в чём же суть? Всё очень просто.  Допустим у нас есть, некая поверхность, точка наблюдателя (позиция камеры, глаза), есть луч, направленный из позиции наблюдателя. Теперь мы начинаем продвигаться по лучу (маршировать). На каждом ша
Недавние сообщения

Релиз OpenGL 4.6

Уже все думали, что OpenGL умер, ну или погружается в сон, а вот и выстрелило)) В ядро были включены следующие расширения: GL_ARB_indirect_parameters GL_ARB_pipeline_statistics_query GL_ARB_polygon_offset_clamp  GL_KHR_no_error - позволяет отключать код проверки ошибок GL_ARB_shader_atomic_counter_ops - атомарные счётчики GL_ARB_shader_draw_parameters GL_ARB_shader_group_vote GL_ARB_gl_spirv - использование SPIR-V в OpenGL GL_ARB_spirv_extensions GL_ARB_texture_filter_anisotropic - анизотропная фильтрация для текстур GL_ARB_transform_feedback_overflow_query Так же добавили расширений : GL_KHR_parallel_shader_compile WGL_ARB_create_context_no_error GXL_ARB_create_context_no_error Спецификация OpenGL 4.6 Спецификация GLSL 4.6 NVIDIA уже представила бета версию драйвера , с поддержкой новой версии OpenGL 4.6, по ходу дела - nvidia пытается воскресить opengl, ну или хотя бы продлить его существование... Многие уже пытались поставить крест на этом г

Замеряем скорость выполнения команд OpenGL

Самый простой вариант, это обозначить тестируемый блок команд вызовами  glBeginQuery (GL_TIME_ELAPSED, id)   и    glEndQuery (GL_TIME_ELAPSED) . Результат получаем командой  glGetQueryObjectui64v или  glGetQueryObjectuiv , в зависимости от разрядности счётчика, 32 бит может и не хватить (в наносекундах, как никак). Важное замечание, что за меряется только только затраченное на выполнение команд OpenGL. Вариант №1: GLuint id; GLuint64 elapsedTime; glGenQueries( 1 , &id ); // Начало блока glBeginQuery(GL_TIME_ELAPSED, id); //Тут пишем код, который надо проверить //Окончание проверяемого блока glEndQuery(GL_TIME_ELAPSED); // Тут могут быть другие команды OpenGL, скорость которых не надо замерять // получаем затраченное время в наносекундах glGetQueryObjectui64v(id, GL_QUERY_RESULT, & elapsedTime); Вариант №2: GLuint queryStart, queryEnd; // query id GLuint64 startTime, endTime; GLuint64 elapsedTime; // затраченное время в наносе

Вводная

Решил потихоньку сливать в сеть, свои разные эксперименты в сфере программирования. Меня больше интересует 3D графика и игрострой, так что всё будет крутиться около этих составляющих. Ну и C++, OpenGL, GLSL и прочая братия - будут присутствовать ))