Помогите с *.X объектом

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Помогите с *.X объектом

Сообщение longwair » 29.11.2010 (Пн) 20:51

Помогите с *.X объектом. Есть два объекта Поле.Х и Кубик.Х, помогите в проект с Полем добавить Кубик и что бы он мог перемещаться по осям Х Y Z. Архив с объектами прилагаю. Ну или хотя бы дайте пару ссылок к подобным темам. Порылся тут ничего подобного не нашёл.
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Помогите с *.X объектом

Сообщение BV » 30.11.2010 (Вт) 1:23

Во-первых, загрузи кубик так же, как и поле. Во-вторых, выбери один из вариантов манипуляции с объектом: манипуляция вершинами или манипуляция локальной мировой матрицей объекта. Если первое, то смотри набор D3DVec-функций, если второе, то создай дополнительную матрицу для объекта, и для перемещения используй D3DXMatrixTranslation. В функции рендеринга просто устанавливай локальную матрицу объекта на момент его рендеринга, а затем возвращай общую
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Помогите с *.X объектом

Сообщение longwair » 30.11.2010 (Вт) 3:05

Ну с кубиком разобрался, появился он на поле). А вот как передвигать его никак не врублюсь, даже не знаю с чего начать.Хоть что нибудь напишите от чего можно было бы оттолкнуться или примерчик ещё лучше. Не пойму как именно кубик прикрепить к D3DVec
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Помогите с *.X объектом

Сообщение BV » 30.11.2010 (Вт) 3:20

Модель описывается классом ID3DXMesh, который предоставляет метод для манипуляции вершинами, LockVertexBuffer. Имея на руках массив вершин ты можешь манипулировать ими, как векторами от условного центра сцены, произвольной точки в пространстве
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Помогите с *.X объектом

Сообщение longwair » 30.11.2010 (Вт) 10:42

Я понял, что ничего не понял (
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Помогите с *.X объектом

Сообщение Mikle » 30.11.2010 (Вт) 11:31

Что-то вроде:
Код: Выделить всё
Private Sub Render()
  d3dDevice.Clear D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, 0, 1, 0
  d3dDevice.BeginScene

  MatrixIdentity Mtrx
  d3dDevice.SetTransform D3DTS_WORLD, Mtrx
  Pole.DrawSubset 0
  MatrixTranslation Mtrx, Sin(Timer), Cos(Timer), 0
  d3dDevice.SetTransform D3DTS_WORLD, Mtrx
  Kubik.DrawSubset 0

  d3dDevice.EndScene
  d3dDevice.Present
End Sub

Это на DX9, на восьмёрке может отличаться синтаксис.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Помогите с *.X объектом

Сообщение BV » 30.11.2010 (Вт) 12:00

longwair, http://msdn.microsoft.com/en-us/library/bb205749.aspx
В качестве флагов ты должен передать 0. Функция вернет буфер вершин во втором параметре. Что бы построить описание вершин, ты должен знать свойства материала своей модели. Или просто ориентироваться на GetFVF. Но для изменения позиции достаточно просто считать каждые первые 4 * 3 байт вектором, остальные поля можно опустить. Размер буфера определяется как GetNumVertices * GetNumBytesPerVertex
Остается тебе только выполнить цикл с шагом GetNumBytesPerVertex, и выполнить трансформацию координат каждой вершины в буфере.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Помогите с *.X объектом

Сообщение Mikle » 30.11.2010 (Вт) 12:05

BV
Зачем всё это???
longwair
У тебя в начале кода в коментариях ересь написана.
d3dpp.AutoDepthStencilFormat - это формат Z-(и стенсил)буфера. Никакого отношения к Hight Color(16 bit) не имеет.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Помогите с *.X объектом

Сообщение longwair » 30.11.2010 (Вт) 12:27

Mikle
Так то не я писал, я в качестве примера взял распространённый в сети пример Tiger, так вот кто его делал тот и писал всю ту ересь, А я как то и внимания не обратил. Просто добавил свои Mesh-ы, и выкинул сюда.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Помогите с *.X объектом

Сообщение BV » 30.11.2010 (Вт) 13:42

Mikle писал(а):BV
Зачем всё это???

То есть как, зачем? Автор спросил, я ответил
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Помогите с *.X объектом

Сообщение Mikle » 30.11.2010 (Вт) 13:47

Я про это:
BV писал(а):выбери один из вариантов манипуляции с объектом: манипуляция вершинами или манипуляция локальной мировой матрицей объекта.

Конечно второй вариант, первый применяется только в особых случаях, он тормознее, кроме того он сложнее.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Помогите с *.X объектом

Сообщение longwair » 02.12.2010 (Чт) 19:45

Нашёл на каком то сайте игру пин понг, по ихнему принципу сделал что бы кубик перемещался по осям, но как это обычно и бывает столкнулся с проблемой. Не могу теперь понять как затекстурить кубик, посмотрите может кто что посоветует. И ещё как можно реализовать здесь же что бы кубик крутился вокруг своей оси.

Управлять кубиком- W A S D
Выход- Escape
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Помогите с *.X объектом

Сообщение Mikle » 03.12.2010 (Пт) 11:10

longwair писал(а):Не могу теперь понять как затекстурить кубик

А я вижу в твоём проекте его затекстуренным.
longwair писал(а):как можно реализовать здесь же что бы кубик крутился вокруг своей оси.

Как обычно - матрицей.
Почитай эту тему:
viewtopic.php?f=6&t=34270
Там в каждом втором примере объект вращается вокруг какой-нибудь оси. Кроме того объяснено, как совмещать вращение с перемещением.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Помогите с *.X объектом

Сообщение longwair » 03.12.2010 (Пт) 11:22

Mikle
Кубик почему то принимает текстуру поля а должен текстуру кубика в папке она есть.

Ура!!! Получилось по примеру №4 из твоей книги. А ведь скачал её года пол назад, и не додумался "тормоз" заглянуть туда. Кубик передвигается и вращается вокруг своей оси. Огромное спасибо

Но с текстурой не получается так и остаётся она как у поля.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Помогите с *.X объектом

Сообщение BV » 03.12.2010 (Пт) 17:14

Гм. Так ты посмотри, что у тебя в InitGeometry происходит. Там загружаются текстуры только для первого загруженного меша, в данном случае, поле.x (кстати, именовать файлы кириллицей -- плохая практика)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Помогите с *.X объектом

Сообщение longwair » 03.12.2010 (Пт) 18:19

А не должна ли текстура прописываться для кубика в функции CreateGameMesh?

На счёт имени кириллицей, не знаю затруднений нет пока что :) главное что бы текстура по буржуйски прописывалась.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Помогите с *.X объектом

Сообщение Mikle » 03.12.2010 (Пт) 19:31

Добавь переменную для текстуры:
Код: Выделить всё
Dim Tex As Direct3DTexture8

Добавь строку для её уничтожения в CleanUp,
Код: Выделить всё
Set Tex = Nothing

Загрузи её из файла:
Код: Выделить всё
Set Tex = g_D3DX.CreateTextureFromFile(g_D3DDevice, App.Path + "\Kubik.tga")

Перед рендером кубика включи её:
Код: Выделить всё
g_D3DDevice.SetTexture 0, Tex

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Помогите с *.X объектом

Сообщение longwair » 03.12.2010 (Пт) 19:46

Mikle
Огромное спасибо всё работает и с текстуркой :)
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList  
cron