Ответ: Xors3D. Шейдеры. Урок первый
Цитата:
______________________________ Запихал ретурн после каждого условия и понял что мой код не работает вообще. То есть освещение не флипается там где надо, у меня флипается всё. ______________________________ Кажется понял что я не так сделал. Но как сделать правильно не понял. |
Ответ: Xors3D. Шейдеры. Урок первый
У каждой переменной есть область видимости (scope), которая обычно задается фигурными скобками {}. Объявленная внутри них переменная не может использоваться вне своей зоны видимости. Поэтому можно вынести объявление lit за пределы конструкции if-else:
Код:
float lit; |
Ответ: Xors3D. Шейдеры. Урок первый
|
Ответ: Xors3D. Шейдеры. Урок первый
Цитата:
|
Ответ: Xors3D. Шейдеры. Урок первый
Цитата:
Как ещё можно сделать подобную штуку? Попробовать считать свет для обеих сторон? |
Ответ: Xors3D. Шейдеры. Урок первый
Цитата:
нужно в VSOutput вставить. в глобале только то, что одинаково на весь шейдер. в VSOutput у тебя то, что приходит в пиксельный шейдер из VS интерполированное, и VFACE дополнительно из растеризатора - это инфа попиксельная. |
Ответ: Xors3D. Шейдеры. Урок первый
Цитата:
Если так то переменная "whatFace" не найдена: |
Ответ: Xors3D. Шейдеры. Урок первый
ну потому что теперь ты её должен читать как input.whatFace. так же как и всё, что ты читаешь из VSOutput.
|
Ответ: Xors3D. Шейдеры. Урок первый
Цитата:
Дебагер говорит инвалид: Цитата:
|
Ответ: Xors3D. Шейдеры. Урок первый
VFACE нету на входе в вершинный шейдер - он вычисляется автоматически между вершинным и пиксельным шейдером. Поэтому он не может быть в структуре VSInput.
Попробуй сначала убрать whatFace из VSInput а в вершинном шейдере ничего не присваивай output.whatFace или присвой 0. А уже из пиксельного ты можешь обратиться к ней как input.whatFace и в ней уже будет содержаться нужное значение. Должно работать. Однако если вдруг компилятор всё-равно скажет что нет такой семантики (хотя вроде не должен), тогда тебе придется разделить VSOutput на две разные структуры - VSOutput и PSInput, и во второй добавишь VFACE. |
Ответ: Xors3D. Шейдеры. Урок первый
Цитата:
Цитата:
|
Ответ: Xors3D. Шейдеры. Урок первый
Цитата:
+ не надо ничего разделять, просто блин оставь так struct VSOutput { float4 position : POSITION0; float3 normal : TEXCOORD1; float2 texCoords : TEXCOORD0; float whatFace : VFACE } |
Ответ: Xors3D. Шейдеры. Урок первый
Цитата:
Так тоже сделала в первую очередь: Дебагер говорит: Цитата:
|
Ответ: Xors3D. Шейдеры. Урок первый
попробуй тогда убрать его из VSOutput, а вместо этого PSMain поменять типа
float4 PSMain(VSOutput input, float whatFace : VFACE) : COLOR { |
Ответ: Xors3D. Шейдеры. Урок первый
Цитата:
Нифига не понимаю, попробовал в шейдерах других игр покопаться, не нашёл. |
Часовой пояс GMT +4, время: 04:43. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot