Работа с расширениями OpenGL с использованием NVIDIA OpenGL SDK 5.1. (Часть 4) (4 стр)
Автор: Сергей Гайдуков
Другие полезные функции
В заключение обзора библиотеки nv_math приведём список некоторых полезных функций, которые могут заметно облегчить вам жизнь в некоторых случаях.
Линейная интерполяция
Линейная интерполяция осуществляется с использованием функции lerp, которая может интерполировать как скалярные величины, так и векторы. Оба варианта функции имеют следующий вид lerp([величина t в диапазоне от 0 до 1], [граница диапазона 1], [граница диапазона 2]). Фактически функция отображает значения из пользовательского диапазона на диапазон 0..1. Рассмотрим простой пример: пусть у нас имеется текстура 512x512 и нам надо узнать, какому текселю текстуры соответствует координата текстуры (0.15, 0.25). Это можно сделать следующим образом:
int tx=ceil(lerp( 0.15, 0, 511)); int ty=ceil( lerp( 0.25, 0, 511));
Правда этот пример не совсем корректный, т.к. из-за использования фильтрации текстур каждому пикселю экрана обычно соответствует несколько текселей текстуры.
Геометрические расчеты
В эту группу входят 4 функции: вычисление площади треугольника (nv_area), вычисление периметра треугольника (nv_perimeter), вычисление координат вписанной (nv_find_in_circle) и описанной (nv_find_circ_circle) окружностей и их радиусов. Треугольник задаётся 3-мя вершинами.
Математические функции
Функции приближённого вычисления косинуса угла ffast_cos и fast_cos с максимальными абсолютными погрешностями 1.18*10-3 и 2.3*10-9 соответственно. Эти функции быстрее стандартной функции cos примерно в 2.14 и 1.47 раз соответственно (так написано в файле nv_algebra.cpp).
Кроме того, в хозяйстве не помешает и функция nv_random, возвращающая случайное число из диапазона -1..1.
Исходный код примеров: ExNV_4.rar (13 kB).
#расширения OpenGL, #NVIDIA, #nv_math, #OpenGL, #PBuffer, #SDK, #векторы, #математика
25 февраля 2002 (Обновление: 17 сен 2009)