Suslik
У меня все заливается одним цветом всегда - это мало информации дает((
Цифровые никак нельзя получать оттуда значения?
helldrg
> У меня все заливается одним цветом всегда - это мало информации дает((
прояви смекалку. если значение слишком большое, помножь его на 1e-6f. если станет чёрным, то на 1e-3f. ищи, какое там именно значение и откуда оно берётся. как ты себе представляешь вывод цифрового значения, если для каждого пикселя оно своё? отладчики шейдеров существуют, но это баловство, всю жизнь цветом отладочную информацию кодировали.
Suslik
Вроде бы потихоньку стал разбираться, спасибо!
Господин Suslik можно ли вас так называть?)
Я одного не могу понять, почему так работает:
if(input.position.y % 2 > 1) color = float4(0.0f, 1.0f, 1.0f, 1.0f); else color = float4(1.0f, 1.0f, 1.0f, 1.0f); return color;
А так нет:
if(input.position.y % 2 == 1) color = float4(0.0f, 1.0f, 1.0f, 1.0f); else color = float4(1.0f, 1.0f, 1.0f, 1.0f); return color;
и input.position имеет экранные координаты т.е. если картинка находится на экране в позиции 300 по оси y, то первый пиксель в шейдере находится на 300 позиции, не подскажете как перевести в 0 ил 1 позицию
Может быть кому то еще пригодится шейдер заполняющий объект в полоску:
float4 TexturePixelShader(PixelInputType input) : SV_TARGET
{
float4 color;
float size = 50;
if(input.position.y % (1*size) > (1*size)/2)
color = float4(0.0f, 1.0f, 1.0f, 1.0f);
else
color = float4(1.0f, 1.0f, 1.0f, 1.0f);
return color;
}helldrg
> А так нет:
наверное, потому что в hlsl операция деления с плавающей точкой возвращает float-число [0..2], которое никогда(почти) не будет строго равно 1?
если погуглить, то можно действительно узнать, что в hlsl аналог fmod — это просто %. но не совсем:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb509631(v=vs.85).aspx#Additive_and_Multiplicative_Operators
The % operator is defined only in cases where either both sides are positive or both sides are negative
так что для отрицательных координат может не работать.
> Господин Suslik можно ли вас так называть?)
наркоманы, блин
Suslik
наркоманы, блин
((((
Осталось только одно прояснить
и input.position имеет экранные координаты т.е. если картинка находится на экране в позиции 300 по оси y, то первый пиксель в шейдере находится на 300 позиции, не подскажете как перевести в 0 ил 1 позицию
что бы input.position.y = 1 было позицией не начала экрана, а начала объекта
helldrg
> Я одного не могу понять, почему так работает:
> А так нет:
Потому что нельзя быть на свете красивой такой так сравнивать флоаты
Misanthrope
Действительно, спасибо
helldrg
> что бы input.position.y = 1 было позицией не начала экрана, а начала объекта
float stripPosition = inputPosition.y - objectPosition.y; return stripPosition % stripWidth > stripWidth * 0.5f ? color1 : color2;
Suslik
Я добавил в структуру еще одни координаты
struct PixelInputType
{
float4 positionGlobal : SV_POSITION;
float4 positionObject : POSITION; //в вершинном шейдере присваиваю значение input.position
};появилась такая проблема - все координаты отрицательны у объекта, т.е. например, при сравнивании надо писать так
if(input.positionObject.y > -200); //а не так if(input.positionObject.y > 200).
Не подскажете как исправить
helldrg
> Не подскажете как исправить
нет. отлаживай.
Suslik
Я без понятия как такое отладить. Почему эта линия становится изогнутой после того как нормализую локальные координаты объекта

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