Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Метод Z - буфера! Отрисовка DirectX! 
:(
    Опции темы
PRF
Дата 14.5.2009, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 13.10.2007

Репутация: нет
Всего: нет



Здравствуйте. У меня есть каркасная сцена, для отрисовки я использую DirectX, только для отрисовки! Зачем я это делаю, лучше не спрашивайте, предмет у нас компьютерная графика, для отрисовки можно было использовать все что хочешь! 
Вот есть задание:
1) удалить нелицывые грани полигональных моделей (удалять их или просто не рисовать , разницы нет)
2) отсечение не проецируемых ребер

Хочу использовать алгоритм Z - буфера. Но как применить его к Directx я не знаю! Я для отрисовки фигуры использую индексы, а алгоритм Z буфера предполагает проход по всей картинки(по экрану), я так понял, по пикселям и присвоения цвета тому пикселю которому надо)) ну так в кратце, короче завязано на всем экране и цвете. 

А если я для отрисовки использую DirectX , да еще притом использую индексы. Есть какие нибудь идея как можно реализовать Z буфер? просто идейку подкиньте пожалуйста. Спасибо.
PM MAIL   Вверх
BorisVorontsov
Дата 14.5.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 1
Всего: 10



Какая разница, индексированные у тебя примитивы или нет? Индексация просто оптимизирует меш.

Цитата(PRF @  14.5.2009,  00:29 Найти цитируемый пост)
Есть какие нибудь идея как можно реализовать Z буфер?


Раз ты используешь 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]
PM MAIL ICQ GTalk   Вверх
PRF
Дата 14.5.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 13.10.2007

Репутация: нет
Всего: нет



Мне надо самому написать удаление нелицевый граней. Алгоритм я взял Z - буфера. Я знаю, что он есть в directx уже.
Вот и спрашиваю, как вообще его можно реализовать, там же вроде бы надо иметь цветовую составлявляющую каждого пикселя экрана.. 


PM MAIL   Вверх
C/L
Дата 15.5.2009, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: нет
Всего: 1



Цитата(PRF @  14.5.2009,  20:14 Найти цитируемый пост)
Мне надо самому написать удаление нелицевый граней. Алгоритм я взял Z - буфера. 

Удаление не лицевых граней и z-буфер совершенно разные вещи, предназначенные для разных целей. 

Z-буфер применяется для правильного наложения примитивов друг на друга - те кто ближе должны накладываться на тех кто дальше. Таким образом примитивы могут быть нарисованы в любом порядке и даже пересекаться, т.к. при отрисовке каждого пиксела сравнивается глубина текущего пиксела экрана и глубина рисуемого. Особенность: проверку проходит каждый пиксел.

Отсечение нелицевых поверхностей в DirectX осуществляется проверкой порядка обхода точек уже спроецированного треугольника - он может быть по часовой и против часовой стрелки и в зависимости от этого DirectX решает выводить данный треугольник или нет. Если пронумеровать все точки треугольника и посмотреть с одной стороны - последовательный обход по порядку их номеров будет по часовой стрелке, а если посмотреть с другой стороны - против часовой. А проверка обхода как раз происходит уже после проецирования, т.е. после умножения вертексов треугольника на все матрицы вида, проекции... Особенность: проверку проходит треугольник.

Если все примитивы сцены - закнутые области "без дырок", без других каких нибудь извратов, можно отключить проверку обхода и обойтись одним z-буфером, так как нелицевые поверхности обычно расположены дальше лицевых, но это не оптимально. А вот осуществить z-буфер самому на CPU и отказаться от аппаратной поддержки видеокарты - это будет жутко тормозно. Так как в этом случае скорее всего потребуется написать собственный рендеринг.

Это сообщение отредактировал(а) C/L - 15.5.2009, 09:02
PM MAIL WWW ICQ   Вверх
PRF
Дата 15.5.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 13.10.2007

Репутация: нет
Всего: нет



ммм.. спасибо, ага я тут уже почитал, что все это аппаратно реализуется, z - буфер, и программно это будет плохо сделать! 
а не подскажите тогда алгоритм удаления не лицевых граней, я вот тут вроде бы алгоритм Робертса нашел, но что то я его не понимаю???. ((
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.1236 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.