|
|
|
Канал Игры Мечты: «Можт хватит?» |
|
|
himem
210 EGP
  Репутация: 24 Сообщения: 343 Откуда: Дзержинск- Нижегородский Зарегистрирован: 24.01.2004
 |
|
Я ,конечно, согласен что в споре рождается истина, и большинство топов здесь к месту, НО не пора ли централизованно заняться Игрой Мечты.
Короче - я предлагаю создать в рамках этой конференции несколько FAQ - по DX,GL,3D чтобы, наконец, такие чайники как я, которые ваще ничё не понимают, смогли задать знающим людям вопросы - которые помогут сдвинуть с места наш Народный Проект "Игра Мечты".
_________________ -Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно! |
|
|
Dusk
200 EGP
   Репутация: 61 Сообщения: 412 Откуда: SPB Зарегистрирован: 30.11.2003
 |
|
Вот они, лучшие Faq'и:
ftp://download.nvidia.com/developer/SDK/8.0/NVIDIA_SDK_8_0_0802_1720.exe
ссылка
_________________ ИМХО - Истинное мнение хрен оспоришь. |
|
|
himem
210 EGP
  Репутация: 24 Сообщения: 343 Откуда: Дзержинск- Нижегородский Зарегистрирован: 24.01.2004
 |
|
2Dusk
THANKS!!!!
Да е у меня DX9SDK(full),DX8,OGL офиц.руководство в 2 т. от SGI и набл.совета по архитектуре...
У меня др вопрос : Почему OGL dll из WinXP Pro SP1 Не понимает АРВ расширения - и где взять последние версии OGL (dll v1.4 вместе с .h & .lib)
_________________ -Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно! |
|
|
Dusk
200 EGP
   Репутация: 61 Сообщения: 412 Откуда: SPB Зарегистрирован: 30.11.2003
 |
|
По DirectX я мог бы подсказать несколько моментов, OGL не знаю.
Вот тут http://www.gamedev.ru/ есть знающие люди, спрашивай там
_________________ ИМХО - Истинное мнение хрен оспоришь. |
|
|
himem
210 EGP
  Репутация: 24 Сообщения: 343 Откуда: Дзержинск- Нижегородский Зарегистрирован: 24.01.2004
 |
|
Харашо!
Тады DX:
Вопрос простой:
Хто такие шейдеры, нафиг они нужны, чем отличаются Vertex от Pixel ( Для меня нужно разжевать - я ж чайник )
И ищо - чё такое QUANTERNION - вектор чёли , а он нафиг ?
СПАСИБА заранее
_________________ -Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно! |
|
|
Dusk
200 EGP
   Репутация: 61 Сообщения: 412 Откуда: SPB Зарегистрирован: 30.11.2003
 |
|
himem : |
Харашо!
Тады DX:
Вопрос простой:
Хто такие шейдеры, нафиг они нужны, чем отличаются Vertex от Pixel ( Для меня нужно разжевать - я ж чайник )
И ищо - чё такое QUANTERNION - вектор чёли , а он нафиг ?
СПАСИБА заранее
|
Попробую объяснить в комплексе базовые моменты организации программирования 3D-графики в применении к DirectX9.
Именно базовые, самый минимум, чтобы можно было вникнуть в суть дела.
Пространство. Есть такое понятие - нормированный базис. т.е. оси X, Y, Z, каждая из которых перпендикулярна двум другим.
X: _11, _12, _13
Y: _21, _22, _23
Z: _31, _32, _33
С одной стороны, это три вектора, с другой - матрица 3x3. Добавив позицию P: _41, _42, _43 - получим матрицу 4x3.
Именно эти матрицы и использует DirectX, для удобства они размером 4x4.
DX использует - матрицу игрока - т.е. положение игрока и его базис. - это View Matrix
У каждого объекта также есть своя матрица - матрица мира объекта.Т.е. они как бы позволяют определить как повернут игрок и как повернуты
объекты в мировом пространстве.
Матрицы удобны тем, что очень легко можно переходить из одной системы(СК) координат в другую. Транспонированая матрица - матрица, у которой строки поменяны со столбцами. Переход из одной СК в другую - просто перемножение координат на обычную/транспонированную матрицу.
Проекционная матрица - экран монитора плоский, а пространство трехмерное. Вот эта матрица проецирует объекты на экран. Состоит из комбинации соотношений ширины разрешения к высоте, углов frustum'а (размеры окна, в которое игрок смотрит в пространство) и т.п.
Каждый объект преобразуется следующим образом: WORLD*VIEW*PROJ - т.е. перемножением трех матриц,
(базис объекта + позиция)*(базис игрока + позиция)*проекция на экран.
Теперь о объектах - 3D-модели в DirectX состоят из треугольников. (N-patch и RT-patch касаться не буду). Так вот, в памяти хранится набор треугольников.
Говоря конкретнее, хранятся вершины. В треугольнике три вершины - вот по три вершины они и извлекаются оттуда DirectX'ом, когда отправляются на прорисовку(Рендер). Теперь рассмтрим случай:
A----B
| / |
C--- D
Есть два треугольника - ABC и BCD. Вершины хранятся последовательно, т.е. по идее мы должны хранить A, B, C, B, C, D.
Т.е. вершину B и C мы храним дважды - это неудобно, поэтому ввели индексы. Вместо того, чтобы хранить вершины ^^^- вот так, мы создаем сразу два массива, один для вершин, а другой для их индексов. Присвоим A = 0, B = 1, C = 2, D = 3. И два треугольника в памяти будут хранится так:
вершины: A, B, C, D
индексы: 0,1,2,1,2,3
Индексы занимают ГОРАЗДО меньше памяти, чем вершины, тем самым работая с индексами, уменьшается количество передаваемых данных -> увеличивается скорость + уменьшаются размеры данных.
Теперь пару слов о вершине. Вершина - это не просто набор координат. Она может хранить самую разную информацию. Тип информации, которую хранит вершина, описывают две структуры - либо одна(FVF), либо другая, более гибкая(FVF declaration).
Например:
x,y,z - позиция
nx,ny,nz - вектор нормали
u,v - координаты текстуры
Итак, когда мы посылаем на прорисовку 3D-модель, мы задаем буфер вершин, буфер индексов, + указываем, что в вершине вообще хранится.
Буфер индексов можно не указывать, но это медленнее. Соответственно данным вершины устанавливаем некоторые другие параметры. Например если вершина хранит текстурные координаты, надо установить и саму текстуру.
В итоге, модель разбивается на треугольники, те на вершины и все это посылатся на видеокарту.
Видеокарта может работать в двух режимах - Fixed function pipeline и Programmable pipeline.
Fixed function pipeline - имеет набор заранее определенных действий, которые можно произвести с данными. Т.е. мы выбираем, что сделать с данными из ограниченного списка возможных действий.
Programmable pipeline - мы сами определяем действия, которые выполняет видеокарта. - Подразделяется на вершинную pipeline и пиксельную pipeline.
Вершинная pipeline - это Vertex Shaders.- специальные программы для видеокарты. Эта программа выполняется на каждом треугольнике. В ней мы получаем все данные вершины, как они хранятся в памяти, + матрицы трансформации. Причем не обязательно задавать сразу единую матрицу World*View*Proj. Мы можем послать матрицы по отдельности. И работать в каждом из пространств - в World, World*View, World*View*Proj. Мы можем сместить вершину, и она будет находиться уже в другом месте. Мы можем менять данные вершины, например текстурные координаты, и текстура "поползет" ,можем рассчитать не вектор падения света, а вектор отражения (бликовая модель освещения). Т.е. практически полная свобода, ограниченная лишь нашей фантазией.
Пиксельная pipeline - это Pixel Shaders. - также специальные программы для видеокарты. Но они уже работают не с вершинами, а конкретно с пикселями на экране. Вот смотрим:
A
| \
| \
B-----------C
После выполнения вершинного шейдера на экран проецируется треугольник в том виде, в каком мы его видим. Мы имеем три конкретные вершины с данными,
но пространство внутри треугольника ещё не заполнено. Вот этим и занимается пиксельный шейдер. Он принимает данные из вершинного шейдера, на основании их извлекает из текстуры конкретное значение цвета. И тут мы можем делать с цветом все, что хотим, можем что-то добавить, отнять. А ведь текстура
может быть не одна. И ведь вовсе не обязательно извлеченный цвет из текстуры понимать именно как цвет, ведь мы имеем всего лишь цифры. Заложив заранее
в текстуру/ы свои данные, мы можем применять их для изменения цвета каждого пикселя на экране, да ещё и с учетом данных из вершинного шейдера тем способом, каким мы сами захотим.
Programmable pipeline дает огромную гибкость, не ограниченную "набором" действий.
Следует учитывать - что мы можем изменять геометрию и цвета того, что мы видим, без их изменения в основной памяти, а следовательно и без участия основного процессора! Это дает огромный плюс в скорости. Но также надо обратить внимание, что в этом случае мы не можем работать например с видимой геометрией, если она была изменена. Например для просчета попаданий по треугольникам. В последнем случае можно просчитывать основным процессором "упрощенную" модель треугольников, но эти аспекты надо учитывать.
Quaternion - представь себе плоскость, и перпендикуляр к этой плоскости. Пусть перпендикуляр - это стержень от ручки, а плоскость - лист бумаги. Воткнув стержень в бумагу, ты крутишь его ладонями - крутится и плоскость. Так вот, quaternion - это и есть стержень от ручки. Другими словами, альтернатива матрицам.
Или это просто вектор - с координатами XYZ, если вектор единичный, то XYZ - представляют собой косинусы углов с осями основного базиса.
Вот, это был самый наименьший минимум понятий и представлений о DirectX9.
|
|
|
himem
210 EGP
  Репутация: 24 Сообщения: 343 Откуда: Дзержинск- Нижегородский Зарегистрирован: 24.01.2004
 |
|
Ага!
А шадеры куда загружаются - в основную память или в видео? И, главное когда и как?
_________________ -Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно! |
|
|
Dusk
200 EGP
   Репутация: 61 Сообщения: 412 Откуда: SPB Зарегистрирован: 30.11.2003
 |
|
Смотри в SDK:
D3DXAssembleShader***
IDirect3DDevice9::SetVertexShader
IDirect3DDevice9::SetPixelShader
Там все есть
_________________ ИМХО - Истинное мнение хрен оспоришь. |
|
|
himem
210 EGP
  Репутация: 24 Сообщения: 343 Откуда: Дзержинск- Нижегородский Зарегистрирован: 24.01.2004
 |
|
Спасиба!
_________________ -Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно! |
|
|
himem
210 EGP
  Репутация: 24 Сообщения: 343 Откуда: Дзержинск- Нижегородский Зарегистрирован: 24.01.2004
 |
|
2Dusk
А чё такое CUBEMAPS?
И какой смысл использования на сфере 6 текстур( как стороны куба) вместо одной (напр. 1024Х512). Как преобразовать?
Или это разные вещи?
Пожалста также разжёванно - я ж чайник
_________________ -Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно! |
|
|
Champion
146 EGP
  Репутация: 19 Сообщения: 337 Откуда: Саратов Зарегистрирован: 16.04.2004
 |
|
И что, при программировании 3D каждый раз нырять с головой в эти дебри?
Может есть какие языки программирования высокого уровня, позволяющие не вдаваться в подробности?
_________________ Не всё так просто, как на самом деле... |
|
|
Dusk
200 EGP
   Репутация: 61 Сообщения: 412 Откуда: SPB Зарегистрирован: 30.11.2003
 |
|
2Champion:
Вот ты такой язык и напиши:
Game:= TGame.Create(SUPER_MEGA_COOL_SPACE_SIM);
Game.Run;
Game.Close;
_________________ ИМХО - Истинное мнение хрен оспоришь. |
|
|
Dusk
200 EGP
   Репутация: 61 Сообщения: 412 Откуда: SPB Зарегистрирован: 30.11.2003
 |
|
Цитата: |
А чё такое CUBEMAPS
|
CUBEMAPS - это для энвайромента, вкупе с SHEREMAPS.
Энвайромент - это отражение.
Задаешь такую текстуру, и с определенной прозрачностью ее накладываешь на объект. Куб или сфера - чтобы знать, с какой стороны отражение.
Тут в 2 словах не объяснишь, смотри пример в NVSDK например, или в DXSDK.
Мой тебе совет, разберись сначала с основами, напиши простенький рендер, простую физику.
Потом переделай, сделав фабрики объектов, оформи все грамотно по классам, структурируй это дело чтобы все логично было. Сделай распределение обязанностей в движке.
Это даст время "освоится", основные понятия хотябы улягутся в голове. А так, все сразу - каша в голове будет.
_________________ ИМХО - Истинное мнение хрен оспоришь. |
|
|
himem
210 EGP
  Репутация: 24 Сообщения: 343 Откуда: Дзержинск- Нижегородский Зарегистрирован: 24.01.2004
 |
|
Каша - это легко сказано! Я тута исходник один раздобыл - и ну его ковырять(IUE) - си++ - уже практически выучил - теперь за 3Д взялся - вот тут то и проблема - текстуры на планеты накладываются как на стороны куба - и чёто этот кусок не пашет
2Champion
Зайди на IW2 - в ней движок - си подобный язык программирования и документаха е - довольно неплохо получается даже с учётом 2001 года ( если, конечно DX7 устраивает )
_________________ -Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно! |
|
|
Champion
146 EGP
  Репутация: 19 Сообщения: 337 Откуда: Саратов Зарегистрирован: 16.04.2004
 |
|
IW2?
_________________ Не всё так просто, как на самом деле... |
|
|
himem
210 EGP
  Репутация: 24 Сообщения: 343 Откуда: Дзержинск- Нижегородский Зарегистрирован: 24.01.2004
 |
|
2Champion
Independance War II -
_________________ -Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно! |
|
|
Champion
146 EGP
  Репутация: 19 Сообщения: 337 Откуда: Саратов Зарегистрирован: 16.04.2004
 |
|
To himem: Ну есть такая. А куда заходить?
_________________ Не всё так просто, как на самом деле... |
|
|
himem
210 EGP
  Репутация: 24 Сообщения: 343 Откуда: Дзержинск- Нижегородский Зарегистрирован: 24.01.2004
 |
|
Ну здрассте
конечно www.elite-games.ru/i-war2/files и скачать
IW2-EOC_Pog_Scripting_SDK.exe - там документаха ( тока на аглицком - я пытался переводить - да так до конца и не перевёл )
_________________ -Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно! |
|
|
himem
210 EGP
  Репутация: 24 Сообщения: 343 Откуда: Дзержинск- Нижегородский Зарегистрирован: 24.01.2004
 |
|
2Dusk
А чё такое "алгоритм QUADTREE" и как работает?
_________________ -Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно! |
|
|
Dusk
200 EGP
   Репутация: 61 Сообщения: 412 Откуда: SPB Зарегистрирован: 30.11.2003
 |
|
http://gamemaker.webservis.ru/articles/quartree/quartrees.html
Кстати, есть очень хорошая штука - Яндекс. Там ещё много ссылок
_________________ ИМХО - Истинное мнение хрен оспоришь. |
|
|
|
|
|
Канал Игры Мечты: «Можт хватит?» |
|