forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Открываю для себя дивный мир шейдеров! (http://forum.boolean.name/showthread.php?t=20659)

CRASHER 09.11.2017 21:13

Открываю для себя дивный мир шейдеров!
 
Здравствуйте, Господа и Господины 3д графики и годно кодного иллюзионизма!)) Я вот начал понимать наконец как работает шойдеры!) Но вот моменты которые никак не могу для себя уяснить хотел бы спросить. В частности меня интересует такой возможно глупый вопрос. Для чего сколярно делят переменные и константы. Я имею в виду float,Int,double,half итд. Я знаю что они с точкой без целое не целое и что количество бит которое они содержат разное, но почему к примеру в шейдере записывают некое число как half? почему через float не записать? Я знаю, возможно это глупый вопрос, видимо я чего то не понимаю. И если к примеру взять пример с шейдером из набора примеров к Хорс, то можно увидеть как используется константа с такой битностью.

Код:

const float4x4 MatWorldViewProj;
const float4x4 MatWorld;

// Light
const float3 AmbientClr;                // Ambient Color
const float3 LightClr;                        // Light Color
const half LightInt;                        // Light Intensity

// Positions
float3 PosLight;                                // Light Position
float RngLight;                                        // Light Range
float DotLight;                                        // Light Soft

// Other
static float3 Color;
static float4 cD;
static float3 cN;

static float3 nLight;

объявили

а теперь

Код:

Color                = cD.rgb*AmbientClr+(cD*nLight*LightClr*LightInt);
применили.

Стоит поменять битность, освещения нет. Ну это можно как то объяснить, но ведь число вычисляется с числами с другой битностью.

Этот пример называется Bump Light.На тот случай если у кого он есть в запасниках и может посмотреть.

Samodelkin 11.11.2017 16:14

Ответ: Открываю для себя дивный мир шейдеров!
 
Цитата:

Сообщение от CRASHER (Сообщение 314284)
В частности меня интересует такой возможно глупый вопрос. Для чего сколярно делят переменные и константы.

Действительно глупый вопрос, ибо операция векторного деления в линейной алгебре не определена.

Цитата:

Сообщение от CRASHER (Сообщение 314284)
Стоит поменять битность, освещения нет. Ну это можно как то объяснить, но ведь число вычисляется с числами с другой битностью.

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

CRASHER 11.11.2017 18:00

Ответ: Открываю для себя дивный мир шейдеров!
 
Samodelkin, я? нет) этож пример) я его не менял)


Часовой пояс GMT +4, время: 11:31.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot