![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| mrMoRiC |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
Приветствую всех! Ещё раз))
Ну что ж, книга действительно сильная.Она достойна того, чтобы её прочитали. Но автор правильно предупредил в начале, что для тех, кто раньше совсем не работал с DirectX, она(книга) будет трудновата. И я увы не оказался исключением из этого правила. Надеюсь на то, что мне здесь помогут. Итак: 1).Создание класса устройства, которое свяжет нас с драйвером нашей видеокарты.Автор говорит, что это первостепенная задача. Ну хорошо, я согласен. Далее автор предлагает такую процедуру:
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). Теперь про камеру: Автор указывает читателю, что перед применением камеры нужно использовать две функции:
Со второй почти всё ясно: она настраивает позицию камеры, цель на которую она повёрнута, а третий параметр мне не понятен. С первой сложнее: как я понял, она задаёт усечённую пирамиду, в пределах, которой работает камера. И если объект просмотра выходит за границы усечённой пирамиды, то он не отрисовывается. Короче мы видим только внутренне пространство. Кроме этого, если я не ошибаюсь, то камера находится в вершине этой пирамиды, если бы её не усекли. Вот. Но параметры мне понятны не совсем, а именно: fieldOfViewY - что мы задаём здесь ? aspectRatio - тоже не понятно ? znearPlane - ближняя плоскость усеч пирамиды (меньшая) zfarPlane - дальняя плоскость усеч пирамиды (большая) Прошу все, пожалуйста помогите разобраться. Кстати, можно будет эти вопросы в FAQ добавить. |
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Для начала - Модератор: Пожалуйста, один топик - один вопрос.
Теперь отвечаю по порядку. 1. adapter - номер графического девайса. Всегда 0, если только на компе не несколько видеокарт. насчёт разницы между Software и Reference не знаю, но M$ говорят что reference поддерживает все фичи D3D и используется для отладки в случаях непонятных проблем проявляющихся на hardware device SoftwareVertexProcessing поддерживается и на уровне hardware девайсов, просто отключаются блоки управляющие трансформацией вершин, вот и всё 2. Небольшой ликбез. Вообще, стоило бы почитать матчасть по графике прежде чем садиться за 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. Про матрицы см. выше -------------------- ![]() |
|||
|
||||
| mrMoRiC |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
Спасибо, хороший форум. Действуете оперативно!
Насчёт пункта два, скажу честно не понял. Наверно, потому что только поступаю в универ и не знаком ещё, как вы говорите с матчастью по графике. Отсюда вопрос, где достать матчасть по графике? Но остались без ответа вопросы:
|
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
-------------------- ![]() |
|||
|
||||
| mrMoRiC |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
По вашей ссылке попал в тему, где обсуждают движки и OpenGl
А про матчасть ничго нет |
|||
|
||||
| mrMoRiC |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
Сейчас, читаю учебник по матрицам и векторам в математике и действительно, начинаю во
многом понимать автора этой книги. Спасибо вам, что сразу посоветовали учить DirectX с математической стороны. Однако, сейчас меня не оставляет в покое мысль, что кроме знания мат части по графике нужно хорошо разбираться в терминах и технологиях, о которых пишет автор. Например Миллер мимоходом употребляет новые для меня слова Двойной буфер/буферизация, сваппинг (swapeffect) и т.д... Я такой человек, что мне нужно знать, когда применять SwapEffect.Discard, когда Copy, и т.п. Я смотрел другие книжки, даже англицкие (причём для чайников!), но и в них авторы не объясняют этих терминов!! Так где же запастись этой теорией? Может почитать что-нибудь про видеокарты вообще? Посоветуйте, вы же это умеете |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Тут уже книги не помогут, читайте "DirectX Documentation for C++" (именно для С++ а не для Managed который урезали), в содержании раздел "DirectX Graphics / Direct3D 9 / Programming Guide / Getting Started", там по каждому термину подробно разжёвано что и как. В managed DirectX используются те же самые термины.
-------------------- ![]() |
|||
|
||||
| mrMoRiC |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
Вам спасибо!
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |