![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
noKEmoH |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
ну у меня векторы и вершины используют одну структуру основной элемент которой m[3]; Хотя можно и написать для вершин и векторов отдельные классы.
|
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
noKEmoH, это значит ты неправильно архитектуру строишь. Всё должно быть логично, ибо программирование - это логика в чистом виде.
Не надо никаких классов вершин. Просто когда ты будешь делать класс модели, заводи указатель на тип float и пиши в память вершины. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Хорошее начинание, годится для написания небольшого трактата на тему "сферический конь в вакууме".
Можно присоединиться? ![]() Движок "сферический конь в вакууме (СКВВ) для DirectX": 1. СКВВ состоит из основных подсистем: графика, физика, игровая логика (AI если угодно), звук, работа с данными (загрузка-выгрузка ресурсов). Рассматриваем только графику, остальное пока отбросим. 2. Графическая подсистема функционально представляет собой бесконечный цикл, в котором отрисовывается кадр. Структурно это набор классов, где присутствуют следующие основные понятия:
Для каждого 3D объекта в сцене рендерер выполняет:
7. Что ещё нужно для отрисовки геометрии. Вершина состоит из произвольного (определяемого программистом) набора данных (position, normal и т.п.), можно представлять её себе как массив из разного типа элементов. Например: Vector3 (XYZ вектор из 3х float-ов), Single (один флоат), Vector4, ushort и другие. Для указания формата вершины, вводится понятие vertex declaration - массив описателей формата и семантики каждого элемента вершины. Без установки Vertex declaration на девайс отрисовать вершинный буфер нельзя 8. Как считать мировую матрицу и что это вообще такое. Для преобразования координат вершины в экранные координаты, выполняется трансформация "local->world->view->projection", где "local" - это координаты вершины взятые из вершинного буфера, "world" - координаты после мировой трансформации или мировые координаты. Мировые координаты - это позиция вершины в общем 3D пространстве сцены. Все 3D объекты содержат текущую позицию в мировом пространстве. Матрица трансформации для перевода в мировые координаты расчитывается как произведение трёх матриц: масштабирование, поворот, сдвиг. Первое действие соответствует размеру 3D объекта, второе - ориентации в пространстве, третье - позиции в мировых координатах. Оставшиеся две трансформации "view" и "projection" соответствуют камере и размерам окна на экране. 9. Что делает вершинный шейдер для вычисления экранных координат. В вершинный шейдер попадают данные одной вершины, разбитые на элементы (position, normal и т.п.), взятые из вершинного буфера в соответствии с форматом указанным в vertex declaration. Шейдер получает position (это вектор из 3 или 4 флоатов) и трансформирует с пом. матрицы "local->world->view->projection" (обычно local пропускают и называют эту матрицу worldViewProjection). Матрица worldViewProjection считается способом описанным выше и представляет собой матрицу 4x4 флоатов. Результат трансформации - вектор XYZW, где первые три координаты делённые на четвёртую дают позицию на экране и значение Z для теста глубины. Этот вектор ещё называют однородными координатами или position in clip space или position in homogenous clip space. Матрица worldViewProjection (как и другие данные, на усмотрение программиста) передаётся в шейдер через набор глобальных переменных - из называют константами шейдера. 10. Что делает пиксельный шейдер для вычисления цвета пиксела. Пиксельшейдер принимает доп. данные от вершинного шейдера и имеет в своём распоряжении доступ к текстурам а также константам пиксельшейдера. На основании этого можно к примеру взять пиксел из текстуры по текстурным координатам принятым из вертексшейдера, "осветить" умножением на интенсивность и цвет источника света и вывести в результат. 11. Ну и так далее, рандомные мысли приходящие в голову. -------------------- ![]() |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
mr.DUDA, никакого рандома в этом нет. Если ты считаешь что сначала надо рассказывать людям об инициализации окна, не имея базовых классов, вставлять фразы типа "а вот это мы напишем потом" - то пожалуйста напиши свою статью, но ведь ты этого не сделал
![]() -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Rickert, если со строк начинать, то большой шанс завязнуть в деталях и так никогда и не добраться до верхнего уровня. Цель моего поста - показать что можно просто объяснить народу основные принципы программирования 3D-графики, хотя бы охватить главные понятия, без которых любая попытка программирования превратится в копипаст. Скомпилировать чужой код и увидеть как он работает это хорошо, но написать свой - ещё лучше.
![]()
Про инициализацию не говорилось ни слова, было упоминание что девайс связан с окном, в порядке объяснения что за девайс такой. В таком же духе всё можно разложить по полочкам, потом набросать простой пример игрового цикла ну и так далее. Ни в коем случае не буду мешать, на собственную статью у меня усидчивости не хватит ![]() P.S. если не в тему влез, могу удалить свой пост ![]() -------------------- ![]() |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
mr.DUDA,
уже на это намекалось, как я понял, статья пишется для себя, а не как учебник. |
|||
|
||||
Rickert |
|
||||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
Значит ты предолгаешь строить дом с крыши? ![]() Невнимательно читал: 1/5 кода я оставляю за читателем, и если он его не напишет сам - то не сможет ничего делать дальше. Копи/паст тут не прокатит. К тому же объяснений принципов и теории люди в яндексе и гугле найти могут. Я конечно велосипедист, но не до такой степени.
С этим согласен, к этому и идём. В споре рождается истина, мой друг ![]() -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
||||
|
|||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
Rickert,
нет, он предлагает начать с понятия "дом", "несущщие стены", "фундамент", а не с понятий "кирпич", "дверная ручка" и "решетка для вентиляции" ![]() |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
не считаешь что начать с кирпича и бетона логичнее? -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
Нет, конечно, я считаю для начала "От и ДО" должны ввести понятия "дом", "фундамент". А потом уже переходить к кирпичам и дверным ручкам.
PS Конечно это только мое имхо. Это сообщение отредактировал(а) AntonN - 6.11.2008, 13:00 |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
AntonN, дом и фундамент из чего строят? Из кирпичей или из домов и фундаментов?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
дом стоят по плану.
не нужно так однобоко смотреть. ADD В общем, если нет желания понять и пересмотреть свою точку зрения, предлагаю оффтоп прекратить ![]() Это сообщение отредактировал(а) AntonN - 6.11.2008, 20:05 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Смотря для чего, опять же. И для кого объяснять.. Если для строителя-ремесленника, то можно показать что такое кирпич и из чего делается раствор, и как они совмещаются. Ну и дальше как кирпичи укладывать между собой и как стену ложить. Отсюда наверное можно объяснить, как дом строится, но на примере конкретного дома (в котором мы стенку вначале строили из кирпичей), и более-менее понять как там остальные части сделаны и склеены. Но на такой дом уйдёт много времени, т.к. строителю придётся показывать не только как кирпич кладут, а ещё и как провода устроены (электричество провести, розетки поставить), из чего трубы делают (канализацию и водопровод провести), как обои клеить наиболее оптимальным способом, где какую краску и шпаклёвку использовать, какие уголки для плинтусов юзать, как правильно двери навешивать... ну и так далее, улавливаешь идею? Это на годы растянется, и толку - чуть! С другой стороны, давай-ка мы объясним что такое архитектурный проект, как вообще проектируются здания, из чего состоят, какие этапы при строительстве проходят и какие материалы в общем требуются на постройку. На примере отдельного сарая покажем как сооружение возводят и какую технику используют. На общем примере здания растусуем, какие подходы используют для строительства произвольного здания. Разницу видишь? От общего к частностям а не наоборот - вот правильный подход. Если ты не в состоянии охватить общую картину, донести её в сжатом виде к аудитории, значит тебе придётся рано или поздно столкнуться с тем что ты упрёшься в вопрос "а что дальше?". От строк, списков и более сложных вопросов выйти на охват всего игрового движка - очень маловероятно; двигаясь в обратном направлении - запросто. -------------------- ![]() |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
Вообще пусть каждый пишет так, как считает нужным
![]() Я выбрал такой путь - как мне кажется так дома не строили ещё. А что получится на выходе - увидим. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
noKEmoH |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
Rickert короче чтобы не цеплялись, на главной странице напиши примерную структуру классов с описанием, что и зачем нужно, и все будет
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |