
- •Содержание
- •Очистка буферов графического устройства
- •Избирательная очистка буферов
- •Устранение скрытых дефектов приложения
- •Общие сведения о примитивах
- •Введение в hlsl
- •Типы данных hlsl
- •Функции и семантики hlsl
- •Техники, проходы и профили hlsl
- •IncludeHandler – объект, используемый для обработки директив #include в fx-файле. Так как наш файл не содержит директив #include, мы будем использовать значение null
- •Визуализация объекта, использующего эффект
- •Запускающее приложение
Избирательная очистка буферов
Теперь попробуем применить более сложную перегрузку метода Clear() для избирательной очистки экрана и нарисовать с ее помощью шахматную доску:
public void Clear(Microsoft.Xna.Framework.Graphics.ClearOptions options, Microsoft.Xna.Framework.Graphics.Color
color, float depth, int stencil, Microsoft.Xna.Framework.Rectangle[] regions)
options - набор битовых флагов, указывающих, какие буферы необходимо очистить. Для очистки экранного буфера используется флаг Target перечисления ClearOptions. Остальные флаги DepthBuffer и Stencilэтого перечисления используются для очистки соответственно буфера глубины и буфера шаблона, и будут рассмотрены далее
color - цвет, которым будет закрашен буфер. Задаeтся с использованием структурыMicrosoft.Xna.Framework.Graphics.Color, являющейся аналогом структуры System.Drawing.Color. Необходимость дублирования обусловлено стремлением разработчиков Microsoft сделать XNA Framework переносимой на другие платформы
depth - значение, которым будет заполнен буфер глубины
stencil - значение, которым будет заполнен буфер шаблона
regions - массив структур Microsoft.Xna.Framework.Rectangle, задающих прямоугольные области экрана, которые должны быть очищены. Области экрана задаются в оконных координатах клиентской области формы - начало координат расположено в ее левом верхнем углу
Для рисования шахматной доски вначале мы очистим экран белым цветом, затем создим массив областей экрана, соответствующих клеткам доски коричневого цвета и ещe раз очистим экран, но уже коричневым цветом.
Модифицируйте перекрытый метод OnPaint() следующим образом
protected override void OnPaint(PaintEventArgs e)
{
// Очищаем экран белым цветом
device.Clear(Microsoft.Xna.Framework.Graphics.Color.WhiteSmoke);
// Создаeм массив областей закраски, соответствующих коричневым клеткам
Microsoft.Xna.Framework.Rectangle[] rects = new Microsoft.Xna.Framework.Rectangle[32];
int k = 0; // Счетчик элементов массива
// Перебираем коричневые клетки шахматной доски
for (int j = 0; j < 8; j++) // Строки шахматной доски
for (int i = j % 2; i < 8; i += 2) // Столбцы шахматной доски
{
// Заносим в массив параметры рисования очередной клетки
rects[k] = new Microsoft.Xna.Framework.Rectangle(
i * this.ClientSize.Width / 8, // Отступ по горизонтали
j * this.ClientSize.Height / 8, // Отступ по вертикали
this.ClientSize.Width / 8, // Ширина клетки
this.ClientSize.Height / 8); // Высота клетки
k++; // Увеличиваем счетчик
}
// Закрашиваем все области из массива rects коричневым цветом
device.Clear(ClearOptions.Target, Microsoft.Xna.Framework.
Graphics.Color.Brown, 0.0f, 0, rects);
// Копируем задний буфер на экран
device.Present();
base.OnPaint(e);
}
Запустите приложение - на экране появится окно, раскрашенное как шахматная доска