Эффективная текстура Бикубическая интерполяция произвольных данных [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Эффективная текстура Бикубическая интерполяция произвольных данных [закрыто]

Сообщение Anonymous »

У меня есть текстура, которая может содержать произвольные данные. Я хочу попробовать эту текстуру с помощью бикубической интерполяции (билинейная недостаточно гладкая). Здесь пример данных: < /p>

Код: Выделить всё

struct Data
{
Data operator+(const Data& val) const;
bool operator==(const Data& other);
bool operator!=(const Data& other);
Data& operator=(const Data& other);
//...
private:
float m_values[16];
};
< /code>
Все необходимые операторы предоставляются. Я видел этот ответ, но он показывает, как сделать бикубическую интерполяцию VEC4. Я не знаю, как я могу расширить это, чтобы поддержать произвольные данные.template 
inline T TImage::BilinearSampling(const Math::Vec2& texCoord) const
{
const uint32_t widthMinusOne = getWidth() - 1u;
const uint32_t heightMinusOne = getHeight() - 1u;

// Bilinear interpolation.
// The sampling weights.
const Math::Vec2 C00Float = Math::Vec2(texCoord.x * (float)getWidth(), texCoord.y * (float)getHeight());
const Math::Vec2 weights = glm::fract(C00Float);

// The sampling coordinates.
const Math::Uvec2 C00 = Math::Uvec2(
Math::clamp((uint32_t)C00Float.x, 0u, widthMinusOne),
Math::clamp((uint32_t)C00Float.y, 0u, heightMinusOne));

const Math::Uvec2 C10 = Math::Uvec2(
Math::clamp(C00.x + 1u, 0u, widthMinusOne),
Math::clamp(C00.y, 0u, heightMinusOne));

const Math::Uvec2 C01 = Math::Uvec2(
Math::clamp(C00.x, 0u, widthMinusOne),
Math::clamp(C00.y + 1u, 0u, heightMinusOne));

const Math::Uvec2 C11 = Math::Uvec2(
Math::clamp(C00.x + 1u, 0u, widthMinusOne),
Math::clamp(C00.y + 1u, 0u, heightMinusOne));

// The sampling values.
const T V00 = getPixelFromPosition(C00);
const T V10 = getPixelFromPosition(C10);
const T V01 = getPixelFromPosition(C01);
const T V11 = getPixelFromPosition(C11);

// Perform the interpolation.
const auto lerp = [](T t1, T t2, float t3)  { return t1 + (t2 - t1) * t3; };

const T p0 = lerp(V00, V01, weights.y);
const T p1 = lerp(V10, V11, weights.y);

return lerp(p0, p1, weights.x);
}
так бикубик будет выглядеть так:

Код: Выделить всё

template 
inline T TImage::BicubicSampling(const Math::Vec2& texCoord) const
{
// Some code
}
Как реализовать это bicubicsampling ?

Подробнее здесь: https://stackoverflow.com/questions/796 ... trary-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Эффективная бикубическая фильтрация произвольных данных
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Бикубическая сплайн-интерполяция гауссианы
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • SFML Sprite чертеж пустой текстура текстура
    Anonymous » » в форуме C++
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Как передать много произвольных данных плавания в фрагментный шейдер с 1D -текстурой в каждом кадре? [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как передать много произвольных данных плавания в фрагментный шейдер с 1D -текстурой в каждом кадре? [закрыто]
    Anonymous » » в форуме Linux
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»