Форум программистов, компьютерный форум, киберфорум
DirectX
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 10

Как выбрать какую часть в поверхности рисовать через буфер трафарета (Stencil Buffer)?

06.11.2016, 17:27. Показов 1555. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как описывают это разные источники, чтобы пометить что-то в буфере трафарета, нужно отключить запись в Z-буфер и основной буфер (front buffer), а после рисовать лишь в буфере трафарета.
Додумался лишь до создания сетки, описывающую нужную мне область front buffer'a, и визуализации ее прям на месте этого переднего буфера.
Чувствую костыли где-то рядом...
Миниатюры
Как выбрать какую часть в поверхности рисовать через буфер трафарета (Stencil Buffer)?  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2016, 17:27
Ответы с готовыми решениями:

Stencil Buffer не работает
Приветствую, у меня проблема с stencil buffer'ом. void RenderScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ...

Буфер трафарета
Есть какое-то тело, например, цилиндр, разбитое на треугольники (тесселированное). Хочу нарисовать только контур тела. Пытаюсь...

Как сделать видимым только часть изображения посредством трафарета SVG
Здравствуйте! Делаю сайт, в процессе возникла проблема: Нужно сделать изображение, по умолчанию размытое, чётко видна только та...

2
61 / 54 / 21
Регистрация: 19.10.2013
Сообщений: 117
07.11.2016, 11:24
Использование буфера трафарета довольно запутано.

1. Необходимо, при инициализации 3D устройства, не забыть его создать. Создается он вместе с буфером глубины:
C#
1
2
3
4
5
Device dr; //3D устройство
PresentParameters ppr = new PresentParameters(); //Параметры 3D устройства
...
ppr.EnableAutoDepthStencil = true;
ppr.AutoDepthStencilFormat = DepthFormat.D24S8; //Формат буферов
2. Во время ввывода, если требуется, нужно разрешить его использование:
C#
1
dr.RenderState.StencilEnable = true;
3. Не забывайте его чистить, или заполнять исходными значениями:
C#
1
2
//Очистка буфера глубины, фона и трафарета 
dr.Clear(ClearFlags.ZBuffer | ClearFlags.Target | ClearFlags.Stencil, Color.White, 1f, 0);
У метода Clear есть перегрузки для очистки/заполнения только нужной прямоугольной области.

4. Если нужно заполнить буфер трафарета во время вывода, можно поступить так:
C#
1
2
3
4
dr.RenderState.ReferenceStencil = 1;
dr.RenderState.StencilFunction = Compare.Always;
dr.RenderState.StencilPass = StencilOperation.Replace;
mask.DrawSubset(0);
В данном случае силуэт объекта mask в буфере трафарета будет заполнен единицами.

5. Если нужно использовать трафарет при выводе, можно поступить так:
C#
1
2
3
dr.RenderState.ReferenceStencil = 1;
dr.RenderState.StencilFunction = Compare.Equal;
myp.DrawSubset(0);
В данном случае объект myp будет отрисован только там, где в буфере трафарета единицы.

Вот простой пример, - один объект отображается в пределах силуэта другого (C# + MDX + VS2012).
sbm.zip
0
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 10
07.11.2016, 14:30  [ТС]
KolDub, знаю как создается (1), как разрешить его (2), как его очистить конкретным значением (3), знаю этот способ его заполнения (4) и как его в конце использовать при визуализации сцены (5).

Цитата Сообщение от KolDub Посмотреть сообщение
У метода Clear есть перегрузки для очистки/заполнения только нужной прямоугольной области.
Вот этого, правда, не знал.
Но одно но: мне нужна не прямоугольная область, а произвольная. Такая, как на рисунке, помеченная "ID3DXMesh", например.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.11.2016, 14:30
Помогаю со студенческими работами здесь

Буфер трафарета для сцены с несколькими объектами
Сделать вырез в фигуре с использованием буфера трафарета несложно, в сети примеров хватает. Но что-то у меня некорректно работает для...

Что такое Buffer (буфер) в Delphi 7 и как им пользоваться?
Собственно вопрос в сабже, но уточню: есть такие функции (методы) как ReadBuf, WriteBuf, SendBuffer, ReceiveBuffer и иже с ними... Так...

Какую тему выбрать для курсовой. Часть 2.
Можно ли за 1,5 месяца создать программку, которая управляет ногами футболиста с мячом, а при нажатии бьет. Трудно ли или как если ты...

Вычислить поток вектора через часть поверхности
Вычислить поток вектора f=4xi+{y}^{2}j+2zk через часть поверхности 3x+5y+2z=6, лежащую в первом октанте. Получается \int \int 4xdydz +...

Где ошибка: ClearBuffer(Buffer,sizeof(Buffer)); WRITE(Buffer,test,20,ALL);
Cho ne pravilno v sledyushem code: #define ALL; ........ ClearBuffer(Buffer,sizeof(Buffer)); WRITE(Buffer,test,20,ALL); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru