Форум: "Игры";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизФон в 3D игре Найти похожие ветки
← →
Колбасьев © (2004-08-21 18:13) [0]Как нарисовать фон, т.е. чтобы картинка рисовалась как в DirectDraw и позади трехмерной сцены? Видел например в PowerDraw есть команда SetBackground, а как это сделать в просто DirectX?
Надо нарисовать, не используя квадрат, поставленный на большом расстоянии.
← →
Darthman © (2004-08-21 19:25) [1]правильно, надо использовать как квадрат в ортогональной проекции, потом очистить z buffer и рисовать что тебе надо, картинка будет позади.
← →
Колбасьев © (2004-08-21 20:04) [2]Поподробнее, что-то не дошло...
Надо на расстоянии от себя по направлению взгляда рисовать на двух треугольниках, составляющих квадрат?
А как определить размеры квадрата (в графике (и ее матричной геометрии) я на ас)?
И еще вопрос (по моему я его уже задавал, но, увы, остался без ответа):
У меня игровое поле 50х50 клеток, по 2-а треугольника в
каждой :-) , => 2500х2х3 = 1500 вершин.
И я устанавливаю:
SetProjectionMatrix(matProj, 1, 1, 0.01, 20);
Других объектов нет, а FPS примерно 34-35. У меня GeForce 2, P3 733 МГц. По моему FPS маленькое. Раньше (но не при таком матрице проекции, вместо 20 10 :-|) было 101-102 (хотя полигонов было несколько тысяч).
Вопрос: От чего вообще зависит FPS и сильно уменьшается?
← →
Sapersky (2004-08-21 20:14) [3]Как нарисовать фон, т.е. чтобы картинка рисовалась как в DirectDraw и позади трехмерной сцены?
Использовать формат с трансформированными вершинами, например, такой:
Type
TSprVertex = record
x, y, z, rhw : Single;
c : DWord;
u, v : Single;
end;
Const
SprVertexDesc = D3DFVF_XYZRHW or D3DFVF_DIFFUSE or D3DFVF_TEX1;
x и y задавать в оконных (экранных) координатах. Значение z в диапазоне 0..1, влияет только на z-буфер. rhw должно быть равно 1.
Рисуется как обычно, но никакие матрицы на это дело, естественно, не влияют.
← →
Колбасьев © (2004-08-21 20:22) [4]Сейчас проверю... Вроде то - спасибо.
← →
Колбасьев © (2004-08-21 20:51) [5]Что-то ничего не рисуется... Заполнил буффер, установил текстуру, рисую (позже всего остального). Ничего...
1 в x и y равна размеру экрана по осям? z = 0..1 - слои? и что такое rhw?
Что конкретно значит "с трансформированными вершинами" (как они трансформированы %-|)?
← →
Darthman © (2004-08-21 22:17) [6]Ты, как я понял в Direct3D делаешь? В OpenGL я бы тебе сразу кодом подсказал как сделать, там не проблема это... Директ3Д нелюблю и не пользую просто.
← →
cyborg © (2004-08-22 08:43) [7]Отключаешь Z буффер, рисуешь прямоугольник, включаешь Z буффер.
← →
Sapersky (2004-08-22 19:06) [8]рисую (позже всего остального)
Раньше! И если используешь формат, который я здесь приводил, поставь белый цвет ($FFFFFFFF).
1 в x и y равна размеру экрана по осям?
Пример: x = 0..800, y = 0..600. Как в DirectDraw.
z = 0..1 - слои?
Значение, которое пишется в Z-буфер. Лучше отключить Z-буфер и не думать (т.е. ставить любое).
и что такое rhw?
Не помню толком. Но оно надо. И оно дожно быть равно 1.
Что конкретно значит "с трансформированными вершинами"
RTFM. Help к DX SDK или Краснова (есть на d3dengine.narod.ru ).
← →
Колбасьев © (2004-08-22 21:18) [9]
> Раньше!
Почему? Ведь нарисованное позже без буфера глубины и видно будет "поверх" остального.
У меня правда ни так, ни так не видно. Если раньше, то мелькнет 1 раз, и все. Позже - вообще ноль эффекта.
> Пример: x = 0..800, y = 0..600. Как в DirectDraw.
Это, конечно, хуже, придеться разрешение экрана выяснять...
Могу и код примерный выложить.Там строк 20-ть... Но будет ли толк.
А насчет ФПС ни кто не подскажет?
← →
NailMan © (2004-08-22 23:56) [10]Как и было сказано, надо юзать именно RHW-формат вершины. Отрнасформированным этот формат естественно считается в экранных координатах. отрансформированными и освещенными заодно.
Разрешение узнать как 2-пальца об асфальт - ты же при создании девайса сам и задаешь их. Если тебе надо иметь независимые координаты(независимо от разрешения), то тебе потребуется придумать какие-то свои относительные координаты и переводить экранные в них и обратно, но это имхо лишний гемор и тормоз.SetProjectionMatrix(matProj, 1, 1, 0.01, 20);
Если ты в проекте не будешь применять нетрансформированные примитивы(обычные или нормальные 3Д-примитивы), то можешь матрицы камеры вообще не устанавливать - нафиг надо.
Что касаемо цифер 0.01 и 20 - Это никак NearClip и Farclip? Если да, то newarclip Не должен быть менее 1, а farclip любой удобоваримый(ну не больше нескольких миллионов ;-) ). При таких маленьких значениях nearclip возможны некислые глюки с отсечениями.
Что касаемо важности RHW - обязательно надо ставить в "1". Фактически это флаг который указывает что ты юзаешь именно оттрансформированные и освещенные в экранном пространстве вершины.
Z-можно не выключать, а пользоваться этой халявой для блендинга.
Скажем быстрей всего будет рисовать(вызывать DrawPrimitive) не поквадно(по 2 треугольника образующих квад), а максимальное число квадов имеющих одну текстуру. Скажем я в своем GUI юзаю свой класс экранного спрайта. Когда я хочу отисовать какой-то элемент меню с большим числом кучсочков, я лочу вертекс-буфер(формат ессно RHW), добавляю в него квады, анлочу и вывожу все треугольники(их число при добавлении суммируется) одним вызовом DrawPrimitive.
Но в чем фишка Z-компоненты вершины в таком формате вершины? Да очень просто - эта компонента дает тебе возможность наслаивать элементы один на другой и пользовать блендинг в этом самом одновызовном рендеринге.
Скажем листбокс конструктивно у меня состоит из панели с рамкой и некоторых органов управления. При заполнении элементов панели(их около 10) в буфер спрайта я ему задаю Z=1(панель является подложкой), а всем остальным задаю Z=0, и при одном вызове DrawPrimitive все между собой правильно блендится.
Еще очень наглядно у меня эта фича реализована в подслойке моих менюшек - там 3 слоя с ползающими текстурами и у каждого слоя(один квад) своя Z координата. В итоге когда все блендится в одном вызове DrawPrimitive - это меньше тормозит нежели вызывать для каждого слоя (с одинаковыми Z) DrawPrimitive с тем же эффектом блендинга.
---
WBR, NailMan aka 2:5020/3337.13
← →
Колбасьев © (2004-08-23 11:41) [11]Спасибо. У тебя нет демки чего-нибудь твоего. Посмотреть бы...(если конечно не жалко).
← →
Колбасьев © (2004-08-23 12:56) [12]
> > Раньше!
>
> Почему? Ведь нарисованное позже без буфера глубины и видно
> будет "поверх" остального.
> У меня правда ни так, ни так не видно. Если раньше, то мелькнет
> 1 раз, и все. Позже - вообще ноль эффекта.
Тьфу... Раньше - если фон, точно. А позже - если интерфейс.
Кое-что подправил. Все рисуется. Всем большое спасибо!!!
← →
NailMan © (2004-08-24 13:35) [13]Колбасьев ©
HUD-а пока нет. Именно он есть вершина одновызовного рендера всех элементов. Я сейчас над ним упорно работаю.
Сцылка вот: http://nailman.cyborghome.ru/ut_tech_demo.htm
---
WBR, NailMan aka 2:5020/3337.13
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.032 c