Эквивалент XNA glColor - PullRequest
       11

Эквивалент XNA glColor

1 голос
/ 22 сентября 2010

Я пришел из страны OpenGL, поэтому я похож на функции glColor и то, как они работают с текстурами, которые выводятся с использованием методов смешивания GL по умолчанию.Кажется, я не могу заставить GraphicsDevice.BlendFactor работать как glColor, но я не могу использовать правильные настройки смешивания.Без использования шейдеров возможно ли получить эквивалентную функциональность в XNA?

Например, я хотел бы установить текущий цвет RGB (1, 0, 0), и я хотел бы, чтобы появилось белое облакокрасный, если выводится.

Ответы [ 2 ]

3 голосов
/ 22 сентября 2010

Нет способа установить цвет на устройстве.Цвет (даже в OpenGL) - вещь для каждой вершины.Просто случается, что OpenGL позволяет вам установить значение по умолчанию для всех вершин.

Если вы используете SpriteBatch в XNA, то он обрабатывает всю магию с вершинами, и большинство его Draw(...) перегрузок имеют *Параметр 1005 *.

Если вы отправляете вершины на карту самостоятельно, убедитесь, что ваш формат вершин включает компонент Color. Вот учебник о том, как создать собственный формат вершин (хотя он не включает компонент Color).

В качестве альтернативы вы можете просто использовать один из встроенных форматов, например VertexPositionColor или VertexPositionColorTexture.

Стоит отметить, что в XNA нет "без шейдеров".Вы можете использовать BasicEffect (или один из других встроенных эффектов), который выполняет ожидаемые действия с данными о цвете, то есть оттеняет текстуру.И SpriteBatch тоже использует внутренний шейдер.

2 голосов
/ 20 октября 2010

Вы также можете использовать настройки Fog и Alpha BasicEffect (или другого эффекта), чтобы рисовать текстуры фиксированного цвета и по-прежнему использовать их исходные альфа-значения (я использую его для таких вещей, как создание объекта, мигающего белым цветом, когда его ударилипулей).

Пример:

// Draw a silhouette in solid orange at 75% opacity
basic_effect.FogColor = new Vector3( 1.0f, 0.5f, 0.0f );
basic_effect.Alpha = 0.75f;
basic_effect.FogEnabled = true;
basic_effect.FogStart = 1;
basic_effect.FogEnd = 0;
... draw triangles ...
...