Программист
Контакты

Наибольший вклад в теги

Все теги (18)

Лучшие ответы пользователя

Все ответы (14)
  • Стоит ли учить OpenGL 1?

    MrGobus
    @MrGobus
    Иван
    Да стоит.
    OpenGL делится на 2 ветки CORE PROFILE и COMPATIBILITY PROFILE

    CORE ввели в версии OpenGL 3 и выше и позволяет добиться большей производительности за счет использования шейдеров, но все, освещение, текстурированные и многое другое вам придется делать самому организуя связь между вашей программой и шейдером. Тудаже придется добавить знание GLSL (язык на котором пишут шейдер). Также напомню, что не все железо поддерживает этот модный профиль.

    COMPATIBILITY профиль существует потому, что OpenGL это индустриальный стандарт и обратно совместим со всеми предыдущими версиями. Вы может легко создавать 3д сцены без глубокого знания математики 3D.

    Итого, если вы решили прикоснутся к 3Д для понимания или строить простенькие графики, крутить модельки и т.п. COMPATIBILITY PROFILE для вас.

    Если же есть желание «наклонить линейку», вы легко воспринимаете матрицы (как умножать и оперировать), можете рассчитать освещение вершины или текселя по фонгу или еще как то вам в CORE PROFILE.
    Ответ написан
  • Простой 3D редактор окружения типа minecraft?

    MrGobus
    @MrGobus
    Иван
    блендер, там нет ничего особо сложного, более того есть приятный питон (скрипты), а редакторы игр сразу не подойдут, у них своя спецфика.
    Ответ написан
  • Как познать C++?

    MrGobus
    @MrGobus
    Иван
    В будущем (4-5 лет) я хочу стать программистом (C# или Java)
    и зачем тебе тогда C++ ???

    Вообще как показывает опыт все решает практика и опыт, нет возможности взять вот так и научится прочитав книжку например. Надо писать писать и еще раз писать, и вот в определенный момент ты узришь свет истинны, для тебя станут логичными классы stl, а код вроде int x = flag?10:25; станет для тебя детским лепетом =)
    Ответ написан
  • Почему у меня OpenGL работает некорректно или вообще не работает?

    MrGobus
    @MrGobus
    Иван
    При создании окна вы указываете GLUT_DOUBLE, что означает что будет включен режим двойной буферизации, то есть картинка рисуется в памяти машины а потом выводится на экран с целью избежать мерцания и видимой прорисовки. Для того, чтобы изображение появилось на экране при завершении построения кадра нужно вызывать функцию смены кадра, в случае с глут это вроде была glutSwapBuffers.
    В вашем примере это после glFlush();
    Ответ написан
  • Как на WebGL сделать отображение точек с информацией на 3D модели?

    MrGobus
    @MrGobus
    Иван
    Схема примерно такая

    Часть первая : Определение координат точки.
    Raycasting (пересечение луча и модели) - позволяет найти ближайшую (иногда все) точки модели где луч ее пересек. Перебирает грани модели (обычно треугольники) и по сути сводится к задаче по пересечению луча и треугольника ноги которой растут к пересечению с плоскостью.
    Математика вопроса описана тут: www.ray-tracing.ru

    Обычно луч выпускается по клику мыши координаты которой браузер отдает относительно window (нам кстати надо относительно канвы, хе хе хе). Затем координаты клика переводим из пикселей в относительные (от -1 до 1), получаем 3D вектор добавив 1 по оси z, затем умножаем на инверсию произведения матриц проекции и камеры благодаря чему получаем вектор направления в мировых координатах и уже из него делаем raycating.

    Не забываем что координаты зачастую получаем в мировых координатах и их желательно перевести в локальные хотя задачи бывают разные.

    Часть вторая : Получение координат точки на канве (экране)
    Для модели контрольные точки должны быть заданны в так называемых локальных координатах, то есть относительно модели. Для перевода их в экранные нужно провести следующий порядок вычислений.

    матрица проекции * матрица трансформации модели * координаты точки

    В некоторых зачах порядок матриц может меняться, например может быть добавлена матрица камеры, анимации и еще какие то преобразования. Кстати в разнообразных движках (например three.js) для подобных вычислений имеются уже готовые средства (но тут документация вам в помощь)

    В результате получим координаты от -1 до 1 и все что останется это понять где они на канве
    (v * 0.5 + 0.5) * canvaSize

    если непонятно то имеется в виду
    (v.x * 0.5 + 0.5) * c.width
    (v.y * 0.5 + 0.5) * c.height

    Теперь когда есть координаты все что осталось это нарисовать там что вам нужно и все =)
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (18)