1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

OpenGL и raytracer engine. help!!!

Тема в разделе "Графика в играх", создана пользователем Melvin, 26 фев 2008.

Модераторы: Артер
  1. Melvin

    Melvin Пользователь сайта

    С нами с:
    16.03.2006
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    2
    Доброе время суток! Уважаемые знатоки, помогите разобраться с этой проблемой! Прошу прощения, если не в нужную тему форума воткнулся!

    Что есть: OpenGL пространство и рейтрейсерный движок.

    Что нужно: Ориентируя камеру, т.е. манипулируя видовой и проекционной матрицами получить ориентацию луча в рейтресерном движке. Проще, даны две матрицы видовая и проекционная. Тупо читаемые из OpenGL glGetDoublev…. в рейтрейсере я должен как-то ориентировать луч также как и в OpenGL с учетом матриц из opengl. Не забывайте, что рейтрейсер отдельный от opengl приложения, передаются только матрицы и объекты.

    Моя идея:
    пусть mtx_mdl – видовая, mtx_proj – проекционная
    mtx_result = mtx_mdl * mtx_proj -- перемножаем и заносим результат в mtx_result
    Inverse(mtx_result) -- инвертируем
    ray_orig – начало луча
    ray_dir – направление
    dx, dy – принадлежат интервалу [-1, 1], т.е. относительные координаты экрана
    ray_orig.x = dx
    ray_orig.y = dy
    ray_orig.z = -1 -- откуда
    ray_orig = ray_orig * mtx_result
    ray_dir.x = dx
    ray_dir.y = dy
    ray_dir.z = 1 -- куда
    ray_dir = ray_dir * mtx_result
    ray_dir = ray_dir – ray_orig -- само направление
    Normalize( ray_dir ) -- нормализация

    Итог: как вы понимаете, толкового ничего не получилось! Если ручками луч задавать, а не через шматрицы, то все хорошо и красиво! Кстати, косяки в мат. библиотеке исключены. Вопрос в другом, как и какой правильный подход, применить к решению этой задачи( по возможности с примером )! Спасибо за оказанную помощь!

    P.S. Пожалуйста не отвечайте – “А посмотри там …. там давно все решено и за тебя сделано” или что-то подобное.
     
  2. GhostCoderPPetrov

    GhostCoderPPetrov Пользователь сайта

    С нами с:
    01.07.2007
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    а какой используешь RayTracer?

    Для какого эффекта тебе понадобился RayTracer?
     
  3. GhostCoderPPetrov

    GhostCoderPPetrov Пользователь сайта

    С нами с:
    01.07.2007
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    пусть mtx_mdl – видовая, mtx_proj – проекционная
    mtx_result = mtx_mdl * mtx_proj -- перемножаем и заносим результат в mtx_result
    Inverse(mtx_result) -- инвертируем
    ray_orig – начало луча
    ray_dir – направление
    dx, dy – принадлежат интервалу [-1, 1], т.е. относительные координаты экрана
    ray_orig.x = dx
    ray_orig.y = dy
    ray_orig.z = -1 -- откуда
    ray_orig = ray_orig * mtx_result
    ray_dir.x = dx
    ray_dir.y = dy
    ray_dir.z = 1 -- куда
    // ИЗМЕНИЛ
    global_ray_dir = ray_dir * mtx_result
    global_ray_orig = ray_orig * mtx_result // НУЖНА ТАКЖЕ RAY ORIG пропустить через обратную матрицу
    result_ray_dir = global_ray_dir – global_ray_orig -- само направление // ВЫЧИСЛЯЕМ НАПРАВЛЕНИЕ ЛУЧА В МИРОВЫХ КООРДИНАТАХ
    Normalize( result_ray_dir ) -- нормализация

    Думаю, что так будет работать.
    Можешь рассказать поподробней что за проект?
     
Модераторы: Артер

Поделиться этой страницей