Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Вниз

Получить данные из VB Mesh-а   Найти похожие ветки 

 
Sphinx ©   (2005-08-21 17:19) [0]

Необходимо получить массив данных из IDirect3DVertexBuffer9 расположеного в ID3DXMesh.
Делаю следующим образом
...
 TVertex = record
   x, y, z: Single;
   nx, ny, nz: Single;
 end;
...
 d3dCloneMesh: ID3DXMesh;
 arrVertex: array of TVertex;
 dwNumVert: Cardinal;
 pVertex: Pointer;
...
 d3dCloneMesh := nil;
 fmesh.CloneMeshFVF(fmesh.GetOptions, D3DFVF_XYZ or D3DFVF_NORMAL, fd3d9device, d3dCloneMesh);

 dwNumVert := d3dCloneMesh.GetNumVertices;
 d3dCloneMesh.LockVertexBuffer(D3DLOCK_READONLY, pVertex);
   SetLength(arrVertex, dwNumVert);
   Move(pVertex^, arrVertex, SizeOf(pVertex^));
 d3dCloneMesh.UnlockVertexBuffer;

Но проблема в том, что мне возвращаются нулевые значения...

Поискал в сети и нашел следующий пример на С++ (работающий)

...
struct Vertex
{
Vertex(){}
Vertex(float x, float y, float z,
 float nx, float ny, float nz, float u, float v)
{
  _x = x;   _y = y;   _z = z;
 _nx = nx; _ny = ny; _nz = nz;
  _u = u;   _v = v;
}

float _x, _y, _z, _nx, _ny, _nz, _u, _v;

static const DWORD FVF;
};
...
Vertex* v = 0;
mesh->LockVertexBuffer(0, (void**)&v);
for(int i = 0; i < mesh->GetNumVertices(); i++)
{
 outFile << "Vertex " << i << ": (";
 outFile << v[i]._x  << ", " << v[i]._y  << ", " << v[i]._z  << ", ";
 outFile << v[i]._nx << ", " << v[i]._ny << ", " << v[i]._nz << ", ";
 outFile << v[i]._u  << ", " << v[i]._v  << ")"  << std::endl;
}
mesh->UnlockVertexBuffer();

Может кто подскажет где ошибся, или в чем принципиальное отличае в моем коде от приведенного примера на С++ ?


 
Sapersky   (2005-08-22 00:51) [1]

Move(pVertex^, arrVertex, SizeOf(pVertex^));

Source и Dest в Мove - это переменные, не указатели. Так что pVertex^ - это правильно, но и динамический массив arrVertex - тоже указатель. Можно взять первый элемент arrVertex[0].
И определение размера по SizeOf в данном случае сомнительно, мягко говоря. Откуда компилятору (полагаю, SizeOf работает на этапе компиляции) знать, что будет в этом Pointer? Удивительно, что такая конструкция вообще проходит...
Правильно - dwNumVert * SizeOf(TVertex).


 
Sphinx ©   (2005-08-22 18:12) [2]

2 Sapersky
Мдааа...прокололся по полной...
Что неправильно написал Move я сообразил по трассировке...потому, что ни каких изменений не было...
Огромное спасибо, ошибку указали правильно :)

>Удивительно, что такая конструкция вообще проходит...
И даже ни warning ни hint не вызывает...


 
A22 ©   (2005-08-22 18:29) [3]

sizeof(pVertex^) - размер самого указателя, потому и компилируется



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.01 c
3-1134117050
kyn66
2005-12-09 11:30
2006.02.05
Поиск в таблице с составным индексом


15-1137262811
Ксардас
2006-01-14 21:20
2006.02.05
Подскажите


3-1133526802
Vedun
2005-12-02 15:33
2006.02.05
Структура файлов баз данных


2-1137624234
Змей
2006-01-19 01:43
2006.02.05
Перевод строки из русской в английскую и наоборот.


2-1137476418
Dot
2006-01-17 08:40
2006.02.05
выборка из таблицы в StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский