|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
31.05.2009, 17:03 | #21 |
Пользователь
Регистрация: 31.05.2009
Сообщений: 19
|
в уроках 3 и 5 не грузятся текстуры...грузится только в единственном примере - где у куба есть круглые вогнутости (хз как правильно назвать)
|
16.06.2009, 12:23 | #22 |
Заблокирован
Регистрация: 06.04.2009
Сообщений: 130
|
Те недостающие файлы собрал по кусочкам. Если кому-то надо - пишите, а то щас не могу выложить. Че-то не закачивается. пишет ошибка базы данных
Последний раз редактировалось Maxs; 16.06.2009 в 18:50. |
16.06.2009, 19:36 | #23 |
Заблокирован
Регистрация: 06.04.2009
Сообщений: 130
|
У меня возник вопрос: как в уроке 3 про рисование треугольника добавить еще один треугольник? В линиях - понял (расширить массив и поменять число примитивов. Здесь же это не помогает).
Код:
Последний раз редактировалось Maxs; 16.06.2009 в 20:11. |
17.06.2009, 09:12 | #24 |
Заблокирован
Регистрация: 06.04.2009
Сообщений: 130
|
Тот квадрад с текстурой (mesh). Не грузит модель. Говорит Could not find mesh\1.x Я уж всяко пробовал, даже в самом файле DXFunc.pas где функция LoadMesh ставил имя файла напрямую с диска С(Туда загрузил файл). Похоже дело не в файле . Видимо где-то в другом месте, т.к. в функция LoadMesh выводит это сообщение если один из параметров неверен. Вот тот код при загрузке модели:
Код:
|
19.06.2009, 19:42 | #25 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
В Direct3D нет тех glBegin(); glEnd(); И это немного затрудняет его первоначальное понимание, но и в opengl использование этих функций приводит только к потери скорости.
Для вывода вершин нужно использовать массив и отправлять данные сразу пачкой. В Direct3D только так и в OGL 3.0 тоже. Раз он не показывает текстуры, это значит, что он и их не находит и этому подтверждение не нахождение модели. Попробуй положить модель в C:\ и указать полный путь"C:\1.x". А ошибка возникает потому, что модель не загружена, память для массива не выделена, а мы пытаемся это еще и нарисовать |
19.06.2009, 23:10 | #26 | |
Заблокирован
Регистрация: 06.04.2009
Сообщений: 130
|
Цитата:
Последний раз редактировалось Maxs; 19.06.2009 в 23:13. |
|
20.06.2009, 08:57 | #27 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
Честно я уже забил на использование DirectX и Delphi - уж очень сильно извращаться приходилось и перешел на Си и OpenGL. И извращаться стало проще - в Си методов больше =)
И на OpenGL можно более наглядней понять все тонкости работы с 3D. А вообще попробуй сам написать загрузчик моделей, хороший формат - это *.obj. Постараюсь написать небольшой урок по загрузки 3D модели из файла. |
20.06.2009, 09:39 | #28 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
Самое первое что хочу пояснить - это матрицы проекции. Существует несколько способ задать матрицу. Ее можно задать ортогональную или перспективную и определить направление оси Z.
D3DXMatrixPerspectiveFovLH(matProje ction, pi/4, Aspect, 0.1, 2000.0); Задает перспективную матрицу Параметры: 1. Сама матрица 2. Где-то читал, что это какой угол обзора или что там, но при 45 градусах картинка редрерится самая хорошая, при изменение этого параметра можно получить это: 3. Обычно width/height, можно сказать, что определяет систему координат, например, если указать 1, то вся форма будет иметь координаты (-1;-1; 1;1) и не важно квадратная она и вытянутая, таким образом меняются пропорции 3D объектов. 4 и 5 передняя и задняя плоскости отсечениея, т.е. ближе и дальше указанных глубин ничего рисоваться не будет. Чтобы все было OK, нужно пересчитывать матрицу проекции при изменении размера окна: Код:
D3DXMatrixOrthoLH(matProjection,Cli entWidth,ClientHeight,0.1,1000); 1. Сама матрица 2 и 3 Ширина и высота системы координат, можно запросто установить замеры формы и после сдвинуть матрицу от центра в левый верхний угол, и мы получим координатную сетку как и всегда. И да ее еще перевернуть нужно: Код:
|
20.06.2009, 10:06 | #29 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
Теперь пара нюансов на счет задания вершин. К сожалению или к счастью в Direct3D есть интерфейс куда нужно загрузить все данные об вершинах и только через него можно выводить изображение на экран.
Код:
Но для того чтобы нарисовать квадрат, можно задавать вершины буквой Z, точно также как она и пишется. Код:
|
20.06.2009, 10:16 | #30 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
Код:
PS. В OpenGL все гораздо проще и удобнее сделано. Код:
Код:
D3DFVF_XYZ - говорит что в одной ячейки имеется 3 float координаты(single для delphi) D3DFVF_DIFFUSE - и еще что есть у этой вершины цвет. Код:
D3DPT_TRIANGLESTRIP - указывает на то, что модель состоит из треугольников 0 - номер вершины с которой нужно начинать 2 - кол-во примитивов(треугольников) Про флаги размещения в памяти можно прочесть тут http://www.nestor.minsk.by/kg/2008/46/kg84602.html Последний раз редактировалось Kostia; 20.06.2009 в 10:26. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Direct3D: создание карт и ландшафтов | challengerr | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 4 | 02.05.2009 02:15 |
Перспектива в Direct3D | Ulex | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 2 | 11.03.2008 01:04 |
вопрос по использованию конструкции if | zetrix | Microsoft Office Excel | 0 | 31.10.2006 07:52 |