Можете ли вы посмотреть образец текстуры в вершинном шейдере? - PullRequest
2 голосов
/ 15 декабря 2011

В шейдерной модели 3.0, я почти уверен, что это был нет , но я все равно хочу спросить об этом,

В шейдерной модели 5.0, вы можете выбрать текстуру в вершинешейдер?

Если я хочу сделать большое количество дополнительной информации доступной для каждой вершины, какие у меня есть варианты?

Редактировать: Очевидно, что возможно сделать вершинуВыборка текстуры, как сделано здесь , но когда я пробую ее в моей программе hlsl shader model 5, я получаю ошибку

ошибка X4532: невозможно сопоставить выражение с набором команд vs_5_0

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Да, выборка текстуры из вершинного шейдера очень легко выполняется в Shader Model 5.0 с использованием оператора [unint2] для любого объекта Texture2D.

Так, например, tex0 - это объект Texture2D в шейдерной модели 5 hlsl-программы:

Texture2D tex0 : register( t0 );

// in a vertex shader program
uint2 pos_xy = { 0, 1 } ;
texelColor = tex0[ pos_xy ] ;
0 голосов
/ 31 октября 2016

ДА, но вы должны использовать SampleLevel для выборки. Вы также можете загрузить значения непосредственно из текстуры, используя mytexture[xy_coord] или texture.Load(...), которые предоставляют значения без «выборки» (например, билинейная интерполяция).

Вы можете сэмплировать текстуру в вершинном шейдере, используя функцию SampleLevel, где вы также должны указать уровень mip-mapping, на котором вы хотите сэмплировать. Вы можете вообразить, что функция Sample использует внутреннюю функцию SampleLevel, с дополнительным преимуществом, что уровень mip-mapping выбирается автоматически, принимая локальные производные поиска координат текстуры в пространстве экрана (это позволяет выберите уровень MIP для использования).

https://msdn.microsoft.com/en-us/library/windows/desktop/bb509699(v=vs.85).aspx

...