Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для Snysmyrik
1 / 1 / 1
Регистрация: 28.06.2012
Сообщений: 39

C++ и RGB. Алгоритм определения цветов для шейдеров. Как сделать шейдер непрозрачным?

05.12.2013, 11:32. Показов 1462. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, я сам C++ не знаю вообще мне крайне сложно разобраться в чужом коде, очень надеюсь на помощь!

Насколько я понял, в этом коде реализуются алгоритм определения цветов для шейдеров и, соответственно, ведется расчет для каждой переменной (R,G,B,A), где A - прозрачность. мне необходимо сделать шейдеры непрозрачные, то есть определить A= 1.0. Помогите пожалуйста!
glSlang
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#define SEPARATE_BLOOM 1
 
sampler2D BlurredImage;
 
#if SEPARATE_BLOOM
sampler2D BlurredImageSeperateBloom;
#endif
 
// Tone-mapping parameters.
sampler2D AdaptedLuminance;
float MiddleGrey;
float Lwhite;
 
// Colour adjustment parameters.
float Brightness;
float Contrast;
float Saturation;
float3 DesaturatedColour;
 
#if USE_COLORGRADING
sampler2D ColorGradingLUT;
#endif // USE_COLORGRADING
 
// The per-color weighting to be used for luminance calculations in RGB order.
static const half3 LuminanceVector = float3(0.3, 0.59, 0.11);
 
// Calculate DOF and bloom for the pixel.
float3 ApplyDOFAndBloom(half4 FocusedSceneColorAndDepth, float2 UV)
{
#if SEPARATE_BLOOM
    // Sample DoF colour and blurred foreground circle of confusion.
    half4 DOFColorAndWeight = MAX_SCENE_COLOR * tex2D(BlurredImage,UV);
 
    half UnblurredForegroundCoC = CalcForegroundUnfocusedPercent(FocusedSceneColorAndDepth.a);
    half BlurredForegroundCoC = DOFColorAndWeight.a;
 
    // Combine blurred and unblurred CoC to get max area CoC.
    half ForegroundCoC = saturate(2 * max(UnblurredForegroundCoC, BlurredForegroundCoC) - UnblurredForegroundCoC);
 
    // Combine foreground and background.
    half CoC = max(ForegroundCoC, CalcBackgroundUnfocusedPercent(FocusedSceneColorAndDepth.a));
 
    // Lerp between blurred and unblurred based on CoC.
    half3 Result = lerp(FocusedSceneColorAndDepth.rgb, DOFColorAndWeight.rgb, CoC);
 
    // Add in bloom contribution.
    Result += MAX_SCENE_COLOR * tex2D(BlurredImageSeperateBloom, UV).rgb;
    return Result;
 
#else
 
    half FocusedWeight = saturate(1 - CalcUnfocusedPercent(FocusedSceneColorAndDepth.a));
 
    //Scale color back up as it was compressed to the [0-1] range to fit in the fixed point filter buffer
    half4 UnfocusedSceneColorAndWeight = MAX_SCENE_COLOR * tex2D(BlurredImage, UV);
 
    half  WeightSum = max(FocusedWeight + saturate(UnfocusedSceneColorAndWeight.a), 0.001);
    float3 BloomResult = (FocusedSceneColorAndDepth.rgb * FocusedWeight + UnfocusedSceneColorAndWeight.rgb) / WeightSum;
 
    return BloomResult;
#endif
}
 
// SJT: Perform tone mapping on a pixel.
half3 ToneMap(float3 WorldColour)
{
    half fAdaptedLuminance = tex2D(AdaptedLuminance, float2(0.5f, 0.5f)).r;
    
    half Lworld = dot(WorldColour, LuminanceVector);
    half Exposure = MiddleGrey / (fAdaptedLuminance + 0.001f);
 
    half Ladapted = Lworld * Exposure;
    half Ldisplay = (Ladapted * (1 + Ladapted / (Lwhite * Lwhite))) / (1.0f + Ladapted);
 
    return WorldColour * Ldisplay / (Lworld + 0.0001);
}
 
// SJT: Basic colour adjustment.
half3 ColourAdjust(half3 InColour)
{
    half3 Result = InColour;
 
    // Saturate before we do anything to prevent whackiness from values outside [0,1]
    Result = saturate(Result);
 
    // (De)saturate.
    Result = lerp(dot(Result, LuminanceVector) * DesaturatedColour, Result, Saturation);
 
    // Contrast adjustment (cubic).
    Result = Result - Contrast * (Result - 1) * Result * (Result - 0.5);
 
    // Brightness adjustment (addition).
    Result = Result + Brightness;
 
    return Result;
}
 
void Main(
    in float2 UV : TEXCOORD0,
    in float2 SceneUV : TEXCOORD1,
    out float4 OutColor : COLOR0
    )
{
    half4 FocusedSceneColorAndDepth = CalcSceneColorAndDepth(SceneUV);
 
    // Apply depth of field and bloom.
    float3 DOFBloomResult = ApplyDOFAndBloom(FocusedSceneColorAndDepth, UV);
 
    // SJT: Tone map the HDR colour.
    half3 ToneMappedColour = ToneMap(DOFBloomResult);
 
#if USE_COLORGRADING
    half3 AdjustedColour = ColorLookupTable(ColorGradingLUT, ToneMappedColour);
#else
    // SJT: Perform colour adjustment.
    half3 AdjustedColour = ColourAdjust(ToneMappedColour);
#endif // USE_COLORGRADING
 
    // Gamma correction.
    // DISABLED: This wasn't used when the UI is shown (i.e. most of the time!),
    // and costs a big chunk of time, so I've disabled it.
    //half3 LinearColor = AdjustedColour * GammaColorScale + GammaOverlayColor;
    //OutColor = float4(pow(saturate(LinearColor), GammaInverse), FocusedSceneColorAndDepth.a);
    OutColor = float4(AdjustedColour, FocusedSceneColorAndDepth.a);
    
    
    
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2013, 11:32
Ответы с готовыми решениями:

Залить прозрачным цветом непрозрачные линии и прямоугольники на канве
Доброго времени суток есть ли какой то способ залить прозрачным цветом непрозрачные линии и...

Удалить (сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной из четырех сторон
Помогите, пожалуйста, отредактировать эту программу. Нужно переписать код, чтобы использовались...

Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева
Поле размером NxM заполнено прозрачными и непрозрачными кубиками. Найти все столбцы поля, все...

1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
05.12.2013, 12:01
Ну и при чем тут C++ ?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.12.2013, 12:01
Помогаю со студенческими работами здесь

прозрачная форма, непрозрачный текст
Доброго времени суток. Тружусь над созданием прозрачной формы, сквозь которую можно клацать, на...

Не работает пример с шейдерами Франка D. Luna
Что-то не работает пример из книги Франка Д. Луна из части 3 главы 16 о шейдерах в проекте все...

Книга по шейдерам
Народ подскажите пожалуйста хорошие книжки по вершинным и пиксельным шейдерам. Заранее спасибо )

Разработка шейдеров
vec3 n = normalize(Normal); vec3 l = normalize(LightDirection); vec3 v = normalize(Viev); float...

Подкиньте код шейдера на GLSL для Qml-я, чтоб во круг мышки какие - нибуть искорки сыпались )
В общем виду я мышку, а во круг неё искры или звёздочки сыпятся... Нет ничего годового? Нужно для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru