Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка объекта из .х файла 
:(
    Опции темы
Гость_fer
  Дата 6.2.2005, 15:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите люди я вообщем загружаю объект из .х файла( обычный прямоугольнник параллельный оплоскости yz) на нём наложенна текстура так вот мне надо пробежаться по каждому текселю текстуры так вот как это сделать ?
  Вверх
Mephisto
Дата 18.2.2005, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Правда всё на вб, но в общем понять можно. Разберись со всеми туториалами, классная инфа.

Оригинал
Использование .x файлов
Утилиту, конвертирующую файлы .3ds в файлы формата .x Вы можете скачать с этого сайта.

Программа, которую мы напишем в этой части довольно сильно отличается от программы из предыдущей части. В коде модуля формы будут следующие объявления:

Dim g_DX As New DirectX8
Dim g_D3DX As New D3DX8
Dim g_D3D As Direct3D8
Dim g_D3DDevice As Direct3DDevice8
Dim g_Mesh As D3DXMesh ' Наш 3d объект
Dim g_MeshMaterials() As D3DMATERIAL8 ' Данные о материалах 3d объекта
Dim g_MeshTextures() As Direct3DTexture8 ' Текстуры 3d объекта
Dim g_NumMaterials As Long

Const g_pi = 3.1415

Как видите здесь нет объявления буффера трёхмерных вершин и пользовательского типа трёхмерных вершин, потому что мы их не используем. Зато здесь есть объявления 3d объекта g_Mesh; массивов g_MeshMaterials и g_MeshTextures, в которых будет содержаться информация, нужная при рендеринге 3d объекта; а также переменной g_NumMaterials, в которой будет сохраняться количество материалов 3d объекта.

Сильные изменения произошли также и в функции InitGeometry, код котрой приведён ниже:

Function InitGeometry() As Boolean
On Local Error Resume Next

Dim MtrlBuffer As D3DXBuffer
Dim i As Long

Set g_Mesh = g_D3DX.LoadMeshFromX(App.Path + "\Tiger.x", D3DXMESH_MANAGED, _
g_D3DDevice, Nothing, MtrlBuffer, g_NumMaterials)
If g_Mesh Is Nothing Then Exit Function

ReDim g_MeshMaterials(g_NumMaterials)
ReDim g_MeshTextures(g_NumMaterials)

Dim strTexName As String

For i = 0 To g_NumMaterials - 1
' Копирование материала из буффера MtrlBuffer в массив g_MeshMaterials
g_D3DX.BufferGetMaterial MtrlBuffer, i, g_MeshMaterials(i)

' Установка окружающего цвета материала (D3DX этого не делает)
g_MeshMaterials(i).Ambient = g_MeshMaterials(i).diffuse

' Создание текстуры
strTexName =
g_D3DX.BufferGetTextureName(MtrlBuffer, i) If
strTexName <> "" Then
Set g_MeshTextures(i) = g_D3DX.CreateTextureFromFile(g_D3DDevice, App.Path + "\" + strTexName)
End If
Next

Set MtrlBuffer = Nothing

InitGeometry = True
End Function

Загрузка 3d объекта, или по-английски Mesh, происходит с помощью метода LoadMeshFromX объекта g_D3DX. Первый параметр метода - имя .x файла для загрузки; второй - комбинация флагов, задающих опции создания 3d объекта; третий параметр - устройство, использующуеся для рендеринга этого 3d объекта; четвёртый параметр - буффер, заполняемый данными о соседях поверхостей в 3d объекте (нами не используется); пятый параметр - буффер, заполняемый данными о текстурах и материалах 3d объекта; шестой параметр - количество частей 3d объекта (каждая часть - это набор примитивов, для которых используется один и тот же материал и одна и та же текстура).

В этом примере используется файл tiger.x, в котром сохранена модель тигра, а также файл tiger.jpg с тектурой для этой модели. Вы же можете использовать любой другой .x файл.

Далее в цикле для каждой части 3d объекта происходит копирование материала из буффера MtrlBuffer в массив g_MeshMaterials с помощью метода BufferGetMaterial объекта g_D3DX. Кроме того происходит заполнение массива g_MeshTextures текстурами, созданными из файлов, имена которых извлекаются из буффера MtrlBuffer с помощью метода BufferGetTextureName.

В конце функции InitGeometry происходит уничтожение объекта MtrlBuffer, так как он нам больше не потребуется.

Теперь, когда 3d объект загружен вместе с материалами и тектурами осталось его только отрендерить. Это и делает изменившаяся процедура Render.

Public Sub Render()
Dim i As Long

g_D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, &HFF&, 1, 0

' Начало сцены
g_D3DDevice.BeginScene

SetupMatrices

' 3d объекты разделены на части (subsets).
' У каждой части свой материал и текстура.
' Рендеринг 3d объекта по частям в цикле:
For i = 0 To g_NumMaterials - 1
' Установка материала и текстуры для каждой части
g_D3DDevice.SetMaterial g_MeshMaterials(i)
g_D3DDevice.SetTexture 0, g_MeshTextures(i)
' Прорисовка части 3d объекта
g_Mesh.DrawSubset i
Next

' Конец сцены
g_D3DDevice.EndScene

g_D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub

Думаю, всё должно быть ясно, так как процедура прокомментирована.

В процедуру SetupMatrices внесём следующие изменения:

1. Чтобы объекты сцены вращались вокруг оси OY замените строку, вращавшую объекты сцены вокруг вектора (1;1;1) , этой строкой:

D3DXMatrixRotationY matWorld, Timer / 4

2. Чтобы камера была ближе к 3d объекту замените код, изменявший матрицу обзора, этим кодом:

D3DXMatrixLookAtLH matView, vec3(0, 3, -3), _
vec3(0, 0, 0), _
vec3(0, 1, 0)

Осталось только заменить код процедуры CleanUp, которая теперь также очищает массивы g_MeshTextures и g_MeshMaterials, новым кодом:

Sub Cleanup()
Erase g_MeshTextures
Erase g_MeshMaterials

Set g_Mesh = Nothing
Set g_D3DDevice = Nothing
Set g_D3D = Nothing
End Sub

Программа готова! Запустив её на выполнение, Вы можете видеть вращающегося тигра, загруженного из файла tiger.x.

Это сообщение отредактировал(а) Mephisto - 18.2.2005, 15:56
PM   Вверх
Maniac
Дата 4.4.2006, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хоть бы написал на каком языке пишешь, какую цель преследуешь (можд кто подскажет другой способ). Но конкретные реализации могут быть только для конкретного языка)
PM MAIL   Вверх
Ryoga
Дата 4.4.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Гость_fer @ 6.2.2005, 15:27)
мне надо пробежаться по каждому текселю текстуры  так вот как это сделать ?

эээ, "тексель" - это, вроде "пиксель текстуры"... тогда я не совсем понимаю, что хотят сделать... smile
что конкретно имеется ввиду под "пробежаться по каждому текселю"?
PM MAIL   Вверх
Maniac
Дата 5.4.2006, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Ryoga @ 4.4.2006, 13:55 Найти цитируемый пост)
эээ, "тексель" - это, вроде "пиксель текстуры"... тогда я не совсем понимаю, что хотят сделать...
что конкретно имеется ввиду под "пробежаться по каждому текселю"?


помоему имелось ввиду пройтись по текстуре поточечно, только вот для каких целей?
PM MAIL   Вверх
$tatic
Дата 22.9.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может здесь помогут пиксельные шейдеры?
Или просто текстуру загрузить как картинку и обрабатывать средствами 2D графических библиотек?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




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


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

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