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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение вершин 
:(
    Опции темы
Galant
Дата 7.2.2005, 20:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Для получения точек я делаю вот так :

Код

LPDIRECT3DVERTEXBUFFER9    p_VertexBuffer = NULL;
LPD3DXMESH                                          p_d3dx_mesh  = NULL;
struct Vertex
{
   float x, y, z; // Position of vertex in 3D space
};

Vertex *pVertices = NULL;

D3DXLoadMeshFromX (filename, D3DXMESH_SYSTEMMEM,
   g_pd3dDevice, NULL,NULL ,NULL, NULL, &p_d3dx_mesh);

p_d3dx_mesh->GetVertexBuffer(&p_VertexBuffer);
int nNumVerts = p_d3dx_mesh->GetNumVertices();
p_VertexBuffer->Lock( 0,0,(void**)&pVertices,0);
p_VertexBuffer->Unlock();

for(int n =0; n<nNumVerts;n++)
 {x = pVertices[n].x;
 y = pVertices[n].y;
 z = pVertices[n].z;}


но я открывал сам .х файл там точки идут по порядку, а когда я так делаю то что-то не так значения x,y,z вылетают не те, может какоето смещение я не указал помогите пожалуйста !

Это сообщение отредактировал(а) chipset - 7.2.2005, 23:34
  Вверх
Maniac
Дата 4.4.2006, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Попробуй так:

Код

LPDIRECT3DVERTEXBUFFER9    p_VertexBuffer = NULL;    
LPD3DXMESH                                          p_d3dx_mesh  = NULL;    
    
float *pVertices = NULL;    

D3DXLoadMeshFromX (filename, D3DXMESH_SYSTEMMEM,    
    g_pd3dDevice, NULL,NULL ,NULL, NULL, &p_d3dx_mesh); 
    
p_d3dx_mesh->GetVertexBuffer(&p_VertexBuffer);    

DWORD nNumVerts = p_d3dx_mesh->GetNumVertices(); 
DWORD dwNumFloatPerVertex = p_d3dx_mesh->GetNumBytesPerVertex();
dwNumFloatPerVertex = dwNumFloatPerVertex/sizeof(float);
    
p_VertexBuffer->Lock( 0,0,(void**)&pVertices,0);    
p_VertexBuffer->Unlock();    

for(DWORD n=0; n<(nNumVerts*dwNumFloatPerVertex); n+=dwNumFloatPerVertex)    
  {x = pVertices[n];    
  y = pVertices[n+1];    
  z = pVertices[n+2];} 

p_VertexBuffer->Unlock();
p_VertexBuffer->Release();


Это потому, что в буфере хранятся не только координаты полигона а еще и координаты текстуры и нормали
А вообще по-хорошему надо проверять что именно там храниться с помощью флагов меша (что то типа FVF....)

Вот кусок моего кода (разберешь думаю что к чему) рабочего:
Код

void Mesh::SetCurrentTransform()
{
    LPDIRECT3DVERTEXBUFFER9 pVB = NULL;
    float * vert;
    DWORD dwNumVertices = pMesh->GetNumVertices();
    DWORD dwNumFloatPerVertex = pMesh->GetNumBytesPerVertex();
    dwNumFloatPerVertex = dwNumFloatPerVertex/sizeof(float);
    D3DXVECTOR3 vtx;

    GlobalMatrix = ScaleMatrix*MoveToMatrix;
    
    pMesh->GetVertexBuffer(&pVB);
    pVB->Lock( 0, 0, (void**)&vert, 0 );

    for(DWORD i=0; i<(dwNumVertices*dwNumFloatPerVertex); i+=dwNumFloatPerVertex )
    {
        vtx.x = vert[i];
        vtx.y = vert[i+1];
        vtx.z = vert[i+2];
        D3DXVec3TransformCoord (&vtx, &vtx, &GlobalMatrix);
        vert[i]   = vtx.x;
        vert[i+1] = vtx.y;
        vert[i+2] = vtx.z;    
    }

    pVB->Unlock();
    pVB->Release();
    ComputeNormals();
    RestoreState();
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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