Важная информация

User Tag List

Показано с 1 по 7 из 7

Тема: Билборды в трëхмерном пространстве.

  1. #1
    Guru Аватар для ALKO
    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,257
    Спасибо Благодарностей отдано 
    76
    Спасибо Благодарностей получено 
    183
    Поблагодарили
    86 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Билборды в трëхмерном пространстве.

    Допустим, есть у меня процедура скейла спрайта условная SpriteScale(*img, X,Y, zoom)
    Как корректнее подготовить параметры X, Y, Zoom для имитации поворота камеры на 360 градусов, а также перемещения еë в пределах одной плоскости (входящие параметры camPosX, camPosY, camAngle). В общем, как в вульфе/думе, только без учëта рендеринга стен, интересуют исключительно спрайты. Алгоритм сортировки не важен.
    Желательно пояснение высокоуровневым псевдо-кодом.
    Последний раз редактировалось ALKO; 10.02.2021 в 20:01.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALKO Посмотреть сообщение
    Допустим
    несколько не ясно
    тебе нужно подобрать масштаб спрайта в зависимости от угла поворота игрока\положения спрайтов на экране?

    тода тебе нужен тот же cos a (где a угол пуляния луча оно же некоторое фиксированное значения для каждого столбца экрана)
    который ты используешь для коррекции полученных длин перед выплевыванием на экран

    ага по моему тебе нужно все и сразу
    Последний раз редактировалось NEO SPECTRUMAN; 10.02.2021 в 20:49.

  4. #3
    Guru Аватар для ALKO
    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,257
    Спасибо Благодарностей отдано 
    76
    Спасибо Благодарностей получено 
    183
    Поблагодарили
    86 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Коррекция масштаба не нужна. Скейл будет пререндеренным. (Передаются числа от 1.. до N, и в зависииости от этого выбирается мип-мапа)
    Куда больше интересует именно позиционирование.

  5. #4
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ну как правильно вычислять я не уверен

    но можно посчитать так

    найти разницу в координатах между камерой и спрайтом dX dY

    дальше находим растояние до спрайта
    L = sqr(dX^2+dY^2)

    дальше находим угол между игроком и спрайтом относительно всей карты
    arctan (dX/dY) (arctan это типа арктангенс чот не могу сспомнить как он пишотсо)
    не сложно догадатсо что процедура arctan может выдавать ответ в пикселях а не в мерзских углах

    дальше уже добавлем текующих угол камеры
    и смотрим попадает ли спрайт в видимый сектор или нет

    угол это X на экране
    растояние еще наверно ноужно будет скорректировать косинуосом угла камеры и можно выплевывать на экран
    (если не скорректировать спрайт при вращении камеры будут тупо двигаться не меняя размера и это будет выглядить как унылоегуафно уныло и не перспективно
    но коррекция делается быстро даже по меркам chip8 : )




    для Y проделать все тоже самое или центровать по центру если его нет...

    ну а сортировать можно по еще не скорректированному L
    и выводить от меньшего к большего
    что даст нужное перекрытие одного другим
    Последний раз редактировалось NEO SPECTRUMAN; 10.02.2021 в 21:21.

  6. Этот пользователь поблагодарил NEO SPECTRUMAN за это полезное сообщение:

    ALKO (10.02.2021)

  7. #5
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    дальше находим угол между игроком и спрайтом относительно всей карты
    ctan (dX/dY) (ctan это типа котангенс чот не могу сспомнить как он пишотсо)
    Нужен не котангенс, а арктангенс с нюансами типа деления на ноль и отрицательных значений.

    Но можно проще.
    "найти разницу в координатах между камерой и спрайтом dX dY", а потом повернуть на угол поворота камеры игрока:
    x = dx*cos(a) - dy*sin(a)
    y = dx*sin(a) + dy*cos(a)
    (ну, мож что-то инвертировать надо, не помню)
    "и смотрим попадает ли спрайт в видимый сектор или нет"

  8. Этот пользователь поблагодарил Bolt за это полезное сообщение:

    ALKO (10.02.2021)

  9. #6
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bolt Посмотреть сообщение
    Нужен не котангенс, а арктангенс
    до именно он
    очепятко\оговорка
    поправил

    - - - Добавлено - - -

    у меня на калькуляторе он записан как tan^(-1)

  10. #7
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    364
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •