ПрограммированиеФорумГрафика

Прозрачность, альфа-проверка, DirectX9 (2 стр)

Страницы: 1 2 3 Следующая »
#15
3:25, 27 фев 2016

Delfigamer
> А разве не D3DBLEND_INVSRCALPHA?
Точно, и в первом параметре я тоже ошибся, там D3DBLEND_ONE должно быть :)

#16
10:00, 27 фев 2016

Mikle
> А в PNG точно ВЕСЬ спрайт жёлтый, а не только те места, где альфа ненулевая?
Да, было тупо все в одном. Исправил. Т.е. я создал желтый фон, создал для него прозрачную маску, в которой нарисовал звездочку: по сути отметил непрозрачную часть. Затем включаю альфа-тест:

    DeviceDirect.SetRenderState(D3DRS_ALPHATESTENABLE, 1);
    DeviceDirect.SetRenderState(D3DRS_ALPHAREF, 8);
    DeviceDirect.SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);

Все работает. Как надо. Даже фильтрацию не надо отключать.
Andrey
> Достаточно сравнения квадратов расстояния до камеры. Но в любом случае будут
> ошибки при перекрытии полигонов.
Квадратов расстояния от чего до камеры? Т.е. сначала вывести все непрозрачное, а уже потом выводить прозрачное от дальних к ближним, да еще в этот момент z-буфер отключить? И как лучше всего это вычислить?

#17
11:32, 27 фев 2016

Ramm
> Квадратов расстояния от чего до камеры?
от объектов до камеры.
>Т.е. сначала вывести все непрозрачное, а уже потом выводить прозрачное от дальних к ближним, да еще в этот момент z-буфер отключить?
отключить запись в Z Буфер, Z буфер отключать не нужно.
> И как лучше всего это вычислить?
Что вычислить? квадрат расстояния?

float distSq = dot(camPos, objectPos);
#18
12:23, 27 фев 2016

Andrey
> квадрат расстояния?
До каждой вершины полигона? Или пересечения биссектрис треугольников?

#19
12:27, 27 фев 2016

Ramm
> До каждой вершины полигона? Или пересечения биссектрис треугольников?
ты по 1 полигону рисуешь что-ли? под позицией объекта понимают позицию внутри матрицы трансформации.

#20
13:34, 27 фев 2016

Andrey
> ты по 1 полигону рисуешь что-ли? под позицией объекта понимают позицию внутри
> матрицы трансформации.
Прости, но я не догоняю...

#21
21:14, 27 фев 2016

Andrey
> float distSq = dot(camPos, objectPos);

Мдя...

Vec3 x = objectPos - camPos;
float sqrDist = dot(x,x);

#22
23:03, 27 фев 2016

innuendo
Ух ты описался, конечно же разница векторов нужна. Глянька ты, кроме тесселяции и всяких AA и понтов ты еще что-то знаешь :) Растешь!
Ramm
> Прости, но я не догоняю...
что именно не понятно?

#23
23:29, 27 фев 2016

Andrey
> кроме тесселяции и всяких AA

Что-то ещё есть в 3D ? А, импортёр из макса в свой формат :)

#24
12:36, 28 фев 2016

innuendo
> Vec3 x = objectPos - camPos;
> float sqrDist = dot(x,x);
Я правильно понимаю, что camPos - текущее положение камеры в пространстве,
dot(x,x) - это скалярное произведение векторов, наверное? Получается квадрат расстояния от камеры до objectPos. А что такое objectPos? Позиция объекта? Как можно выразить позицию полигона одной точкой?

#25
12:38, 28 фев 2016

Ramm
> А что такое objectPos? Позиция объекта?

Да

> Как можно выразить позицию полигона одной точкой?

Никак. Это техника per-object, а не per-polygon.

Можно курнуть BSP

#26
14:31, 28 фев 2016

innuendo
> Никак. Это техника per-object, а не per-polygon.
> Можно курнуть BSP
Правильно понимаю, что у нас есть, например, полупрозрачные прямоугольники (например, стекла на карте), и так как алгоритм грубый, то нам важно их среднее удаление от камеры (например, точка пересечения диагоналей) и расположение друг относительно друга, чтобы они располагались так, чтобы расстояние между ними было больше, чем погрешность алгоритма? И сортировать полигоны все равно придется.

#27
18:07, 28 фев 2016

innuendo
> Никак. Это техника per-object, а не per-polygon.
Все верно.
> Можно курнуть BSP
Мдя... Не путай человека. Причем тут это??? Если можно все проще решить?
Ramm
> Правильно понимаю, что у нас есть, например, полупрозрачные прямоугольники
> (например, стекла на карте), и так как алгоритм грубый, то нам важно их среднее
> удаление от камеры (например, точка пересечения диагоналей) и расположение друг
> относительно друга, чтобы они располагались так, чтобы расстояние между ними
> было больше, чем погрешность алгоритма?
Полупрозрачные прямоугольники это единый объект сетка(mesh) он может быть привязан к объекту, у которого есть позиция в пространстве. Сам мешь должен находиться в начале координат, точнее его геометрический центр. Тогда имея матрицу трансформации можно рисовать его в разных местах и учитывать расстояние от его до камеры и т.д.
> И сортировать полигоны все равно придется.
Если камера статична то можно 1 раз более менее правильно отсортировать полигон меша и перезаписать буферы. Но все равно будет местам неверное перекрытие, а отсюда результат блендинга и сортировкой это не решится. Но это очень редкие задачи.
Обычно пренебрегают этим и рисуют группу прозрачных треугольников объеденных в mesh, предварительно сортируют меши в составе объектов в соответствующем порядке удаления от камеры в зависимости от прозрачности.

#28
20:56, 28 фев 2016

Andrey
> Не путай человека. Причем тут это??? Если можно все проще решить?

Человек хочет per-polygon...

#29
20:57, 28 фев 2016

Ramm
> И сортировать полигоны все равно придется.

Если сильно хочется - кури OIT DX11 style

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.