Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
1-1102528136
Руслана
2004-12-08 20:48
2004.12.26
Перестала запускаться Delphi7


3-1101663252
Ярослав
2004-11-28 20:34
2004.12.26
Добавление записей в таблицу IB


1-1102528398
Leaner
2004-12-08 20:53
2004.12.26
Присоединение к проекту файла: *tlb


1-1102582279
Maxim_S~~
2004-12-09 11:51
2004.12.26
прогресс при загрузке программы


1-1102470358
Viktop
2004-12-08 04:45
2004.12.26
Сохранение настроек Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский