Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изучаю DirectX 9.0 for Managed code по Миллеру, есть непонятные моменты, нужны ваши комм 
:(
    Опции темы
mrMoRiC
Дата 15.4.2007, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Приветствую всех! Ещё раз)) 
Ну что ж, книга действительно сильная.Она достойна того, чтобы её прочитали. 
Но автор правильно предупредил в начале, что для тех, кто раньше совсем
не работал с DirectX, она(книга) будет трудновата. И я увы не оказался исключением из этого правила.
Надеюсь на то, что мне здесь помогут.

Итак:

1).Создание класса устройства, которое свяжет нас с драйвером нашей видеокарты.Автор говорит, что это первостепенная задача. Ну хорошо, я согласен. Далее автор предлагает такую процедуру:

Код
Public Device as new Device(adapter as integer, _
                            deviceType as DeviceType, _
                            renderWindowHandle As IntPtr, _
                            behaviorFlags As CreateFlags, _
                            ParamArray presentationParameters() PresentParameters)


adapter - манипулятор устройства (0 - устройство поумолчанию). Но я не понял, манипулятор каких устройств только видеокарт?или вообще всех? Если всех, то зачем это может понадобиться? И ещё, что значит устройство поумолчанию? По умолчанию для чего?

deviceType - не понял чем отличается DeviceType.Software От DeviceType.Reference. Объясните?


renderWindowHandle - тут всё понятно, просто указатель на handle оуна вывода.


behaviorFlags - тут тоже вроде ясно всё. Единственное но: зачем выставлять флаг SoftwareVertexProcessing, если скажем, в параметре DeviceType я уже задал DeviceType.Software?

ParamArray presentationParameters - здесь пока сильно не разбирался, но то, что уже использовал понятно. Потом может попрошу разъяснить.

2). CustomVertex - встроенная конструкция для хранения вершин.

CustomVertex.PositionColored - описывает координаты и цвет вершин, если мы используем 3D пространство.

CustomVertex.TransformedColored - описывает коордигаты и цвет верщин, если мы используем, как я понял, статическое поле зрения. И не собираемся вертеть наш Transformed объект.

Что я не понял, так это можно ли всё-таки в TransformedColored как-то работать с камерой,
или нет совсем. То есть, как вообще ограничивает нас TrancformedColored, остаётся ли при его
использовании 3D пространство или оно 2D? TransformedColored.Position использует структуру Vector4.
New Vector4 принимает параметры : valueX, valueY, valueZ, valueW
с первыми тремя всё понятно А для чего нужен valueW ?

3). Почему в книжны примерах автор передаёт такие параметры в структуру Vextor3 (1.0f, -1.0f, 3.0f)    
Что означает f на конце, зачем оно нужно?

4). Не понял значения понятия МАТРИЦА ПРЕОБРАЗОВАНИЙ. ЧТО ЭТО ТАКОЕ?

5). Теперь про камеру:
    
Автор указывает читателю, что перед применением камеры нужно использовать две функции:

Код

Device.Transform.Projection = Matrix.PerspectiveFovLH(fieldOfViewY As Single, aspectRatio As Single, znearPlane As Single, zfarPlane As Single)
        
Device.Transform.View = Matrix.LookAtLH(cameraPosition As Vector3, cameraTarget As Vector3, cameraUpVector As Vector3)


Со второй почти всё ясно: она настраивает позицию камеры, цель на которую она повёрнута, а третий параметр мне не понятен.

С первой сложнее: как я понял, она задаёт усечённую пирамиду, в пределах, которой работает камера. И если объект просмотра выходит за границы
 усечённой пирамиды, то он не отрисовывается. Короче мы видим только внутренне пространство. Кроме этого, если я не ошибаюсь, то камера находится в вершине этой пирамиды, если бы её не усекли. Вот.
                  Но параметры мне понятны не совсем, а именно:
                  
                  fieldOfViewY - что мы задаём здесь ?
                  aspectRatio - тоже не понятно ?
                  znearPlane - ближняя плоскость усеч пирамиды (меньшая)
                  zfarPlane - дальняя плоскость усеч пирамиды (большая)
                  

Прошу все, пожалуйста помогите разобраться. Кстати, можно будет эти вопросы в FAQ добавить.
                  
  
PM MAIL   Вверх
mr.DUDA
Дата 15.4.2007, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Для начала - Модератор: Пожалуйста, один топик - один вопрос.

 smile 

Теперь отвечаю по порядку.

1. adapter - номер графического девайса. Всегда 0, если только на компе не несколько видеокарт.

насчёт разницы между Software и Reference не знаю, но M$ говорят что reference поддерживает все фичи D3D и используется для отладки в случаях непонятных проблем проявляющихся на hardware device

SoftwareVertexProcessing поддерживается и на уровне hardware девайсов, просто отключаются блоки управляющие трансформацией вершин, вот и всё


2. 

Цитата(mrMoRiC @  15.4.2007,  01:28 Найти цитируемый пост)
Что я не понял, так это можно ли всё-таки в TransformedColored как-то работать с камерой,или нет совсем. То есть, как вообще ограничивает нас TrancformedColored, остаётся ли при егоиспользовании 3D пространство или оно 2D? TransformedColored.Position использует структуру Vector4.New Vector4 принимает параметры : valueX, valueY, valueZ, valueWс первыми тремя всё понятно А для чего нужен valueW ?

Небольшой ликбез. Вообще, стоило бы почитать матчасть по графике прежде чем садиться за D3D. Ну да ладно.

Камера - чисто твоё, умозрительное понятие. На самом деле, никакой камеры нет. Чтобы отрисовать объект в 3D, нужно перевести координаты каждой вершины из изначальных позиций в координаты на экране. Координаты каждой вершины умножаются на матрицу world/view/projection, после чего X и Y соответствуют конкретной точке на экране, а Z - глубине точки. Зная позицию воображаемой камеры, с помощью Matrix.LookAtLH создаём видовую матрицу (view matrix). Проективную матрицу создают на основе near/far plane и размеров экрана (метод Matrix.PerspectiveLH). Мировая матрица создаётся исходя из воображаемой позиции центра объекта в сцене, а также его поворота и масштабирования (метод Matrix.Transformation). Получив все три необходимые матрицы, в зависимости от того как именно рендерится сцена - с использованием шейдеров или без - нужно либо выставить их в Device.Transform, либо передавать в шейдер через параметры.

Насчёт компоненты W в векторах - читать про homogeneous coordinates.

3. Суффикс "f" соответствует типу данных float. Читать про синтаксис C#.

4. Про матрицы см. выше


--------------------
user posted image
PM MAIL WWW   Вверх
mrMoRiC
Дата 15.4.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, хороший форум. Действуете оперативно!

Насчёт пункта два, скажу честно не понял. Наверно, потому что только поступаю в универ и не знаком ещё, как вы говорите с матчастью по графике. Отсюда вопрос, где достать матчасть по графике? 

Но остались без ответа вопросы:

Цитата

Автор указывает читателю, что перед применением камеры нужно использовать две функции:

Код

Device.Transform.Projection = Matrix.PerspectiveFovLH(fieldOfViewY As Single, aspectRatio As Single, znearPlane As Single, zfarPlane As Single)
        
Device.Transform.View = Matrix.LookAtLH(cameraPosition As Vector3, cameraTarget As Vector3, cameraUpVector As Vector3)
 
 
Со второй почти всё ясно: она настраивает позицию камеры, цель на которую она повёрнута, а третий параметр мне не понятен.

С первой сложнее: как я понял, она задаёт усечённую пирамиду, в пределах, которой работает камера. И если объект просмотра выходит за границы
 усечённой пирамиды, то он не отрисовывается. Короче мы видим только внутренне пространство. Кроме этого, если я не ошибаюсь, то камера находится в вершине этой пирамиды, если бы её не усекли. Вот.
                  Но параметры мне понятны не совсем, а именно:
                  
                  fieldOfViewY - что мы задаём здесь ?
                  aspectRatio - тоже не понятно ?
                  znearPlane - ближняя плоскость усеч пирамиды (меньшая)
                  zfarPlane - дальняя плоскость усеч пирамиды (большая)
                  





PM MAIL   Вверх
mr.DUDA
Дата 15.4.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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





--------------------
user posted image
PM MAIL WWW   Вверх
mrMoRiC
Дата 16.4.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



По вашей ссылке попал в тему, где обсуждают движки и OpenGl

А про матчасть ничго нет smile 
PM MAIL   Вверх
mrMoRiC
  Дата 22.4.2007, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сейчас, читаю учебник по матрицам и векторам в математике и действительно, начинаю во
многом понимать автора этой книги. Спасибо вам, что сразу посоветовали учить DirectX с математической стороны.

Однако, сейчас меня не оставляет в покое мысль, что кроме знания мат части по графике нужно хорошо разбираться в терминах и технологиях, о которых пишет автор. Например Миллер мимоходом употребляет новые для меня слова Двойной буфер/буферизация, сваппинг (swapeffect)  и т.д...
Я такой человек, что мне нужно знать, когда применять SwapEffect.Discard,  когда Copy, и т.п. Я смотрел другие книжки, даже англицкие (причём для чайников!), но и в них авторы не объясняют этих терминов!! Так где же запастись этой теорией? Может почитать что-нибудь про видеокарты вообще? Посоветуйте, вы же это умеете smile 
PM MAIL   Вверх
mr.DUDA
Дата 22.4.2007, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Тут уже книги не помогут, читайте "DirectX Documentation for C++" (именно для С++ а не для Managed который урезали), в содержании раздел "DirectX Graphics / Direct3D 9 / Programming Guide / Getting Started", там по каждому термину подробно разжёвано что и как. В managed DirectX используются те же самые термины.


--------------------
user posted image
PM MAIL WWW   Вверх
mrMoRiC
Дата 22.4.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вам спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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