Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Вниз

Помогите мне в D3D   Найти похожие ветки 

 
lokid7   (2003-07-21 12:07) [0]

У меня тут проблема, хочу вот построить тайловую карту ( в D3D), но не выходит. Самая главная проблема - это выбор FVF флага.
Вот в чем проблемы:
1. Если использую D3DFVF_XYZ, то выводить тайлы на треугольники значительно труднее, чем D3DFVF_XYZRHW, они получаются искаженными, т.е. струю квадрат - выходит прямоугольник
2. Если пользуюсь D3DFVF_XYZRHW, то что-то глючат текстуры.
Кто может помогите разобраться с флагами, какой же лучше использовать, чтобы выводить тайлы в 3д, а если кому нелень объясните мне, как приспособить то их в хозяйстве.


 
NailMan   (2003-07-21 14:00) [1]

Начнем с того, что:

D3DFVF_XYZ - это нетрасформированные координаты, тоесть применяются для всех 3Д объектов в 3Д-мире. Содержит 3 Single числа(12байт). Координаты отсчитываются по ширине экрана. Соответственно 1 единица - 1 ширина экрана.

D3DFVF_XYZRHW - это отрансформированные координаты. Оттрансформированные в экранной плоскости. Они "весят" 16б.
3 single на x,y,z(z обычно =0) и RHW(Single)=1. Координаты тут соответствуют пиксельным координатам, тоесть (0,0) - левый верхний угол, (Width, height) - правый нижний.

Можешь посмотреть как выглядят анимированные текстуры на экранных спрайтах(не iD3DXSprite, а на нормальных треугольниках).

http://nailman.narod.ru/zakroma/UT_GUI_Demo.rar

(750 Кб)

Там всего 3 слоя (Z=0, Z=0.1, Z=0.2) спрайтов с одинаковой текстурой. В реалтайме изменяю только UV координаты вершин.


 
lokid7   (2003-07-21 17:53) [2]

Nail Man
Посмотрел.
Вы не могли бы подсказать, как можно избавиться от такого эффекта: рисуешь квадрат из треугольников, а на экран выводить прямоугольник (окно квадратным сделать не предлагать :-), как мне предложили некоторые)


 
NailMan   (2003-07-21 18:28) [3]

Если ты делаешь двухмерку, то юзай экранные спрайты(D3DFVF_XYZRHW) - они в этом смысле проще. Если делать через D3DFVF_XYZ, то тебе придется выставлять матрицу камеры в "ноль" и подбирать масштаб/координаты спрайтов в пространстве, чтобы квадрат выглядел квадратом. Поверь мне это значительно гемморойней. Хотя для вышеприведенных эффектов можно юзать трансформации текстурных координат через матрицы, а не модификацией вертексного буфера, но все же гемор это.

Кстате какаим методом рисуешь D3DPT_TRIANGLESTRIP или D3DPT_TRIANGLELIST?


 
lokid7   (2003-07-21 21:32) [4]

Пробоваль рисовать карты стрипом :-), но в конце концов перещел на D3DPT_TRIANGLELIST.
Значит можно и нужно заделать координаты под определенное разрешение.
А кстати ты не можешь объяснить, как пользоваться D3DXMatrixOrtho (надеюсь не ошибся в написании).
Да кстати, а ты не знаешь, где можно скачать хелп фалы из SDK 8.1 или 8.0?


 
NailMan   (2003-07-22 09:46) [5]

Ну такой функцией я не пользовался, поэтому особо не знаю ее. Собсно для проецирования чего-то трехмерного в плоскость экрана(типа маленькая моделька корабля мишени и т.д.), я применяю D3DXVec3Project.

Насчет самого хелпа - точно сказать не могу.


 
lokid7   (2003-07-23 20:13) [6]

NailMan
А ты не можешь посоветовать прораммульку для разбиния модели на треуголники, и чтобы это программа поддерживала по-больше форматов.
Не знаешь кстати, где можно скачать описание форматов 3DS и DXF


 
NailMan   (2003-07-24 09:42) [7]

А что есть разбиение модели на треугольники? Я что-то не совсем понял. Тебе надо получить массив треугольников что-ли?

Я у себя в игре юзаю свой формат модели, который получаю их *.X файлов, посредством самого D3D. Типа гружу в iD3XMesh и вытаскиваю оттудова VB и IB.

Не знаешь кстати, где можно скачать описание форматов 3DS и DXF
http://morgeyz.narod.ru/3ds.htm

Про DXF забудь - он ничего не умеет хранить полезного. Даже текстуры.


 
lokid7   (2003-07-24 10:48) [8]

NailMan
Спасибо.
Ты не можешь подсказать, как строить карты, если можно дай ссылку, где это можно посмотреть


 
MeF88   (2003-07-24 15:38) [9]

1. Почитай кучу документов на тему Direct3D.
2. D3DXMatrixOrthoOffCenterLH(matProj,0,800,600,0,-1000,1000); - устанавливает ортографическую проекцию, причем точка 0,0 в верхнем левом углу. 800 и 600 - размеры. -1000,1000 - грубина.
(Объясняю конечно не совсем верно..., но для начала сойдет). Причем все размеры нормальные, как если использовать D3DFVF_XYZRHW, т.е. если рисуешь два триангла с вершинами (0,0)(0,30)(30,0)(30,30), то получаешь квадрат с шириной 30 писилей.
3. Я обычно для спрайтов использую:
const D3DFVF_SPRITEVERT = (D3DFVF_XYZ or D3DFVF_DIFFUSE or D3DFVF_TEX1); Так как они позволяют использовать матрицы преобразований.
4. Для заголовков и примеров по Direct3D: http://clootie.narod.ru/
5. Создание тайловой карты в 3д - так же как и в 2д, т.е. читай инфу на delphigfx.mastak.ru, вот только геморойно Вертексный Буфер заполнять.
6. Заходи на http://www.xdev.ru/ - обучение Direct3D, правда на С++, но вообщем-то какая разница... Если знаешь Delphi, без проблем поймешь и С++ примеры.
7. На мой взгляд, 2д ландшафт в 3д изврат - делай лучше просто 3д ландшафт из карты высот.
8. И вообще, на что тебе и-нет, если не можешь найти элементарную инфу. Да хотя бы www.gamedev.com


 
MeF88   (2003-07-24 15:44) [10]

Да и чуть не забыл, купи себе книжку по DirectX в проектах Delphi.


 
lokid7   (2003-07-24 22:46) [11]

MeF88
Есть такая книга у меня, но там все в основном поверхностно, а за советы БОЛЬШОЕ СПАСИБО.

Я недавно начал работать с моделями столкнулся с такой проблемой: при выводе модели в ~12000 треугольников у меня значительно падает FPS с 500 до 10, и у меня возник вопрос как же тогда выводятся модельки в играх, да еще вместе с уровнями? Может что-то я нетак делаю?


 
NailMan   (2003-07-25 09:43) [12]

Во первых какая у тебя видеокарта?

Для D3D верно следующее утверждение(сам проверял): наиболее оптимально рендерить за 1 вызов(DrawPrimitive или DrawIndexedPrimitive) ~700-900 треугольников. Во всяком случае 200+. Соответственно это утверждение применимо к рендеру на видюхах с аппаратным TnL. На софтваре(SOFTWARE_VERTEXPROCESSING) это только ухудшит производитльность. Таким образом модельку следует делать ~5-6 тыс. трианглов. Если больше, то при большом числе моделей будет только хуже.

Еще немаловажный момент - это опитимизация, тоесть рендер через фрустум и сортировка треугольников или кусков(как у меня).
И также надо для каджой модельки вручную удалять всегда невидимые трианглы на стадии моделирования, иначе они тоже будут обрабатываться.

Вобщем, моделирование для игр - это отдельная песня и довольно сложная. Здесь нужен компромисс между сложностью модели и скоростью ее рендера.




 
Ev_genus   (2003-07-25 18:22) [13]

lokid7
Основные тормоза обычно из-за преобразования вершин. Поэтому количество граней еще не решает, надо знать количество вершин. Если у тебя по 3 вершини на грань, так я и не удевляюсь 10-ю фпс"ам. Смотри пример Optimized Mesh из DXSDK.
Еще важным фактором является место где ты храниш данные. Оперативка иногда полезна, но не надо переоценивать возможности AGP.


NailMan
Для D3D верно следующее утверждение(сам проверял)
Это для какой карточки? Только не говори что для любой.

рендер через фрустум и сортировка треугольников или кусков
А можно подробнее а то я не совсем понял.


 
lokid7   (2003-07-25 20:48) [14]

NailMan
Видяга у меня радон с 64 метрами (но сам комп - пылесос), но это неглавное.
Просто я модель танка расскопал, довольно детализированого, и решил потренироваться с модельками, вот так.
Ты говоришь выводить за раз 100-200+ треугольников, а как же мне тогда выводить модель почастям??? (если она монолитная).
Ev_genus
Модель выводится по отдельным треугольника, потому что импортирующая программка разбивает только так.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.028 c
9-16023
Michael Makushev
2003-07-10 12:40
2004.02.06
Основание (опять же часть 1)


3-16131
Andrey V.
2004-01-15 14:49
2004.02.06
Соединение с базой ИБ.


4-16783
Bers
2003-11-28 12:40
2004.02.06
Команда RunAs...


1-16302
kaginava
2004-01-28 14:39
2004.02.06
Определить изменение файла


14-16679
Ske4er
2004-01-17 15:13
2004.02.06
©





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский