![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
PRF |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 13.10.2007 Репутация: нет Всего: нет |
Здравствуйте. У меня есть каркасная сцена, для отрисовки я использую DirectX, только для отрисовки! Зачем я это делаю, лучше не спрашивайте, предмет у нас компьютерная графика, для отрисовки можно было использовать все что хочешь!
Вот есть задание: 1) удалить нелицывые грани полигональных моделей (удалять их или просто не рисовать , разницы нет) 2) отсечение не проецируемых ребер Хочу использовать алгоритм Z - буфера. Но как применить его к Directx я не знаю! Я для отрисовки фигуры использую индексы, а алгоритм Z буфера предполагает проход по всей картинки(по экрану), я так понял, по пикселям и присвоения цвета тому пикселю которому надо)) ну так в кратце, короче завязано на всем экране и цвете. А если я для отрисовки использую DirectX , да еще притом использую индексы. Есть какие нибудь идея как можно реализовать Z буфер? просто идейку подкиньте пожалуйста. Спасибо. |
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 1 Всего: 10 |
Какая разница, индексированные у тебя примитивы или нет? Индексация просто оптимизирует меш.
Раз ты используешь DirectX, то он у тебя уже реализован, и по умолчанию используется. Если хочется им управлять, D3DRS_ZFUNC в помощь -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
PRF |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 13.10.2007 Репутация: нет Всего: нет |
Мне надо самому написать удаление нелицевый граней. Алгоритм я взял Z - буфера. Я знаю, что он есть в directx уже.
Вот и спрашиваю, как вообще его можно реализовать, там же вроде бы надо иметь цветовую составлявляющую каждого пикселя экрана.. |
|||
|
||||
C/L |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 31.7.2004 Где: Самара Репутация: нет Всего: 1 |
Удаление не лицевых граней и z-буфер совершенно разные вещи, предназначенные для разных целей. Z-буфер применяется для правильного наложения примитивов друг на друга - те кто ближе должны накладываться на тех кто дальше. Таким образом примитивы могут быть нарисованы в любом порядке и даже пересекаться, т.к. при отрисовке каждого пиксела сравнивается глубина текущего пиксела экрана и глубина рисуемого. Особенность: проверку проходит каждый пиксел. Отсечение нелицевых поверхностей в DirectX осуществляется проверкой порядка обхода точек уже спроецированного треугольника - он может быть по часовой и против часовой стрелки и в зависимости от этого DirectX решает выводить данный треугольник или нет. Если пронумеровать все точки треугольника и посмотреть с одной стороны - последовательный обход по порядку их номеров будет по часовой стрелке, а если посмотреть с другой стороны - против часовой. А проверка обхода как раз происходит уже после проецирования, т.е. после умножения вертексов треугольника на все матрицы вида, проекции... Особенность: проверку проходит треугольник. Если все примитивы сцены - закнутые области "без дырок", без других каких нибудь извратов, можно отключить проверку обхода и обойтись одним z-буфером, так как нелицевые поверхности обычно расположены дальше лицевых, но это не оптимально. А вот осуществить z-буфер самому на CPU и отказаться от аппаратной поддержки видеокарты - это будет жутко тормозно. Так как в этом случае скорее всего потребуется написать собственный рендеринг. Это сообщение отредактировал(а) C/L - 15.5.2009, 09:02 |
|||
|
||||
PRF |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 13.10.2007 Репутация: нет Всего: нет |
ммм.. спасибо, ага я тут уже почитал, что все это аппаратно реализуется, z - буфер, и программно это будет плохо сделать!
а не подскажите тогда алгоритм удаления не лицевых граней, я вот тут вроде бы алгоритм Робертса нашел, но что то я его не понимаю???. (( |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |