|
Xors3D Графический движок с поддержкой DirectX9 |
13.08.2014, 16:17
|
#166
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
error X3018: invalid subscript 'whatFace'
|
теперь она же не из структуры input приходит, а отдельно.
так что замени input.whatFace на просто whatFace ниже.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.08.2014, 16:30
|
#167
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,019
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
Сообщение от Mr_F_
теперь она же не из структуры input приходит, а отдельно.
так что замени input.whatFace на просто whatFace ниже.
|
Большое спасибо, всё работает
Какая разница между записью данных в структуру:
struct VSOutput {
float4 position : POSITION0;
float3 normal : TEXCOORD1;
float2 texCoords : TEXCOORD0;
float whatFace : VFACE;
};
И тут:
float4 PSMain(VSOutput input, float whatFace : VFACE) : COLOR {
?
Почему в первом случае надо писать input, а во втором нет?
|
(Offline)
|
|
13.08.2014, 17:04
|
#168
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
Какая разница между записью данных в структуру
|
по большому счёту никакой, только структуру ты ретурнишь, и типа считается что ты её должен до конца заполнить поэтому.
Почему в первом случае надо писать input,
|
потому что у тебя в PS объявлена переменная, которая называется "input". и она содержит поля структуры.
VSOutput input, float whatFace
|
VSOutput, float - тип переменной
input, whatFace - имя
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.08.2014, 17:55
|
#169
|
Мастер
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений (для 631 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
2Arton
struct A { ... }; это описание структуры, то есть как шаблон, реальный объект при этом не создается.
Объект структуры создается так:
A object; - то есть сначала тип, потом имя объекта.
Если нужно обратиться к полю созданного объекта:
object.value;
Теперь вот смотри, в графическом конвеере не всё делают шейдеры. То есть в частности между вершинным и пиксельным тоже происходят скрытые вычисления. То есть это я к тому что если структура VSOutput у тебя определена один раз, то объекта два. Сначала создаешь output в вершинном шейдере и записываешь туда явно вычисленные значения, затем происходят скрытые вычисления, и в пиксельный шейдер тебе возвращается уже другой объект, даже если он того же типа, значения полей будут другими - это важно понимать. В данном случае ты одной структурой описал объекты для выходных вершинных и входных пиксельных данных, но иногда бывают другие ситуации, когда данные различаются и нужно например объявлять отдельно VSOutput и PSInput.
Также вот в такая запись:
float4 PSMain( float4 pos : POSITION0, float whatFace : VFACE ) {...}
будет эквивалентна такой:
struct PSInput {
float4 pos : POSITION0;
float whatFace : VFACE;
};
float4 PSMain( PSInput input ) {...}
Во втором случае мы все входные параметры описали одной стрктурой и передали в качестве аргумента все параметры как один объект.
Только внутри функции уже нужно обращаться к параметрам как к полям объекта input.pos и т. д.
Точно также мы можем объявить и выходную структуру, например в данном случае будет:
struct PSOutput {
float4 col : COLOR0;
};
В данном случае для одного параметра это избыточно, но механизм я думаю ясен.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.08.2014, 18:15
|
#170
|
ПроЭктировщик
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений (для 91 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
Почему нельзя использовать цвет в качестве числа???
index=tex2D(MixSampler,input.texCoords).r;
Colorka=tex2D(TS[index],input.texCoords);
|
(Offline)
|
|
24.08.2014, 18:20
|
#171
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
какую ошибку пишет?
|
(Offline)
|
|
24.08.2014, 18:27
|
#172
|
ПроЭктировщик
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений (для 91 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
Ошибку не выдает, просто отказывается закрашивать модель текстурой. в Итоге получается серая моделька.
Идея была такая: Картинка[R,G,B,A]
R-индекс первой текстуры
G-индекс второй текстуры
B-коэффициент смешивания
одиннадцать текстур TS[0],TS[1]..TS[10]
|
(Offline)
|
|
24.08.2014, 20:34
|
#173
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
Ошибку не выдает, просто отказывается закрашивать модель текстурой. в Итоге получается серая моделька.
|
в ксорсе можно включить лог.
в лог пишутся ошибки компиляции шейдеров.
читай их.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.08.2014, 22:40
|
#174
|
ПроЭктировщик
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений (для 91 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
Can't create effect from file 'Resurses\Shaders\EXP\EXP.fx'!
E:\SkinBattle - копия\Resurses\Shaders\EXP\EXP.fx(165,61): error X3000: syntax error: unexpected token ')'
|
(Offline)
|
|
25.08.2014, 00:37
|
#175
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
ну и что, по-твоему, здесь написано?)
|
(Offline)
|
|
25.08.2014, 04:00
|
#176
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,019
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
Скачай дебагер-то, всяко сподручнее чем лог.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.08.2014, 10:30
|
#177
|
ПроЭктировщик
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений (для 91 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
Я уже поржал над собой ')'
index=tex2D(MixSampler,input.texCoords).r;
Colorka=tex2D(TS[index],input.texCoords);
Вот настоящая ошибка
Ошибка X3512: сэмплер индекс массива должен быть буквенное выражение
(174): ID3DXEffectCompiler :: CompileEffect: Был выражение об ошибке компиляции
ID3DXEffectCompiler: Компиляция не удалось
|
(Offline)
|
|
25.08.2014, 11:42
|
#178
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
а, ну да. в ps3_0 и ниже нельзя использовать честное динамическое индексирование в массив, увы. в вертексном можно.
ты можешь запихать текстуры в атлас или 3д текстуру и вместо индекса смещать текстурные координаты.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
|
|
25.08.2014, 11:57
|
#179
|
ПроЭктировщик
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений (для 91 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
Я решил смешивать текстуры без шейдеров, так как текстуры статичны и не особо большого размера
Пример
IncludeFile "Xors3D.pbi":xGraphics3D(0,0,16,0,#False)
Global Image=xCreateImage(512,512)
Global Dim ImageList(40)
For i=0 To 40
ImageList(i)=xLoadImage("Str(i)+".jpg")
Next
Procedure Mixer(PosX,PosY,Image1,Image2,K.f)
If PosX>#False And PosY>#False And PosX<1024 And PosY<1024
RGB1=xReadPixel(PosX,PosY,xImageBuffer(ImageList(Image1)))
R1=Red(RGB1):G1=Green(RGB1):B1=Blue(RGB1)
RGB2=xReadPixel(PosX,PosY,xImageBuffer(ImageList(Image2)))
R2=Red(RGB2):G2=Green(RGB2):B2=Blue(RGB2)
K1.f=K
K2.f=1-K
xColor((R1*K1+R2*K2)/2,(G1*K1+G2*K2)/2,(G1*K1+G2*K2)/2)
xSetBuffer(xImageBuffer(Image))
xRect (PosX,PosY,1,1,1)
xSetBuffer(xBackBuffer())
EndIf
EndProcedure
For x=0 To 512
For y=0 To 512
Mixer(x,y,0,13,1,0.5)
Next
Next
xSaveImage(image,"123.bmp")
Repeat
xUpdateWorld()
xRenderWorld()
xDrawImage(Image,0,0)
xFlip()
xCls()
ForEver
Код довожу до ума так как алгоритм смешивания на самом деле сложнее
|
(Offline)
|
|
13.09.2014, 10:25
|
#180
|
ПроЭктировщик
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений (для 219 пользователей)
|
Ответ: Xors3D. Шейдеры. Урок первый
Остался у кого-нибудь урок по шейдерам? помню это pdf файл, но у емня он задевался куда-то
Прошу выложите кто-нибудь, или на почту [email protected]
Заранее спасибо)
__________________
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:31.
|