![]() |
DirectX 9 доступ к вершинам объекта
Столь долгое время прошло после моего перерыва в программировании игр да и вообще программирования.
Вот решил взяться. И опять нашел, в принципе как всегда, для себя проблему, банальную. Как получить доступ к вершинам сетки объекта что бы с ними можно было производить расчеты? PS В основном это нужно для определения столкновения игрока с миром. Если кто-то знает еще сам алгоритм определения столкновения, то расскажите мне про него по подробнее. |
Ответ: DirectX 9 доступ к вершинам объекта
храни отдельно, чтобы быстро достучаться, а так lock unlock, так же как и создание.
|
Ответ: DirectX 9 доступ к вершинам объекта
Суть в том что когда я загружаю x-mesh мне надо каким-то образом поместить информацию(x,y,z,n - к примеру) о вершинах, треугольниках в массив, чтобы в дальнейшем эту информацию использовать для определения столкновений. Приведите пример команды или определенного алгоритма через который можно загрузить инф. о верш. в массив. Добавлено: Как я могу работать с вершинами объекта(перемещение и др.)? |
Ответ: DirectX 9 доступ к вершинам объекта
перемещается мировая матрица а не вершины объекта! Думаю стоит не сэмплы смотреть, а почитать умную книжку, и все встанет на свои места.
Код:
IDirect3DVertexBuffer9* vb = 0; Код:
D3DXMATRIX cObject::GetTransformMatrix() а вообще почитай http://www.netlib.narod.ru/library/book0032/ch10_01.htm книга супер, сам читал |
Ответ: DirectX 9 доступ к вершинам объекта
Матрицы я знаю. Мне надо тупо знать координаты каждой вершины. Это возможно.
Если я хочу к примеру сравнить: if (vertex1<vertex2){collision=1;}; мне надо знать значение/координаты этих вершин. 1)Как скажем мне в переменную занести информацию о вершине? 2)Как изменить координаты одной любой вершины. Напишите пример если не трудно. Пока не хочу использовать сторонние библиотеки такие как bullet,wrapper etc. Хочу написать свою физику примитивную.Глядишь и получится |
Ответ: DirectX 9 доступ к вершинам объекта
Код:
IDirect3DVertexBuffer9* vb = 0; пример Код:
Vertex* vertices; |
Ответ: DirectX 9 доступ к вершинам объекта
Я так понял ты работаешь, в данном примере, с временным буфером вершин(vb) и изменяешь его значения, а как потом их применить буферу моей модели?
|
Ответ: DirectX 9 доступ к вершинам объекта
Это не временный буфер, а фактически буфер из видео карты, изменяя его изменится и изображение.
|
Ответ: DirectX 9 доступ к вершинам объекта
Код:
struct Vertex Нашел другой способ изменения координат вершин: Код:
vb1->Lock(0, 0,(void**)&vertices, 0); // заблокировать весь буфер 1) Как можно считать информацию о вершинах? 2) Как я заметил каждая вершина имеет свою сист. координат. Почему. Как это исправить? |
Ответ: DirectX 9 доступ к вершинам объекта
Код:
struct Vertex |
Ответ: DirectX 9 доступ к вершинам объекта
Так получилось. А что ты конкретно сделал, а то я уже подзабыл что это значит?
ЗЫ: 1) Как можно считать информацию о вершинах? 2) Как я заметил каждая вершина имеет свою сист. координат. Почему. Как это исправить? |
Ответ: DirectX 9 доступ к вершинам объекта
Цитата:
Код:
struct Vertex |
Ответ: DirectX 9 доступ к вершинам объекта
попробуй так
Код:
LPD3DXMESH MeshTemp ; и работай уже с MeshTemp код не проверял но идея такова |
Ответ: DirectX 9 доступ к вершинам объекта
Цитата:
|
Ответ: DirectX 9 доступ к вершинам объекта
Объясняю. Вершины не меняются, если ты просто хочешь передвигать, вращать, масштабировать объект. Меняется мировая матрица.
Например куб, имеет 8 вершин, описаны позиции в диапазонах от -1, до 1 по xyz. Я хочу вывести 3 куба в разных положениях. Я не меняю вершины этого куба, я перед отрисовкой каждого поставляю матрицу. У первого у меня будет d3dxmatrixtranslate одно , у второго другое у третьего третье. Заметь к вершинам я и не прикасался |
Ответ: DirectX 9 доступ к вершинам объекта
Хммм... А как же мне делать свою систему коллизий если позиция вершин отлична от позиции объекта(даже близко к вершинам)?Переводить их из локального пространства в мировое?
|
Ответ: DirectX 9 доступ к вершинам объекта
Храниш у каждого объекта позиции, у каждого объекта делаешь метод draw, который перед отрисовкой генерит матрицу и делает ее текущей. Колиззии как делать, смотришь позиции нужных объектов, если входит в bounding box, то уже проходишьтя по плоскостям, тут я тебе не советчик, проще взять физический движок
|
Ответ: DirectX 9 доступ к вершинам объекта
Не могу понять что делаю не так, но позиция вершин остаётся прежней при развороте,масштабировании объекта.
Вот как я считываю позицию вершин: Код:
Vertex* vertices; |
Ответ: DirectX 9 доступ к вершинам объекта
при повороте меняется матрица трансформации.
но не сетка. |
Ответ: DirectX 9 доступ к вершинам объекта
Цитата:
|
Ответ: DirectX 9 доступ к вершинам объекта
Умножить локальные координаты вершины на мировую матрицу.
С любовью, кэп. |
Ответ: DirectX 9 доступ к вершинам объекта
Как правильно это сделать?
|
Ответ: DirectX 9 доступ к вершинам объекта
vertexWorldPosition = worldMatrix * vertexLocalPosition
|
Ответ: DirectX 9 доступ к вершинам объекта
Прочитай книжку уже наконец!!! Хватит всех мучить.
Пример задания матрицы для объекта, перед его отрисовкой Код:
D3DXMatrixRotationX(&matRotateX, indexv); |
Часовой пояс GMT +4, время: 13:23. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot