Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 27.05.2013, 17:54   #1
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Проблемы с геометрией в PhysX



Вот такая беда. При попытке "приготовить" из модели TriangleMesh получается такая штука. Причем только с моими моделями. У меня есть моделька из какого-то примера, с ней все в порядке. Никаких косяков геометрии нет.

В чем проблема может быть? В структуре вертекса?
Экспортирую из Макса 2014, плагин - kwxport. Пробовал еще Axe Free, но он при создании TriangleMesh не выдает никакого результата.

Код приготовления модели:

//-----------------------------------------------------------------------------------------
// 1. Получить массив со всеми вершинами объекта 
//----------------------------------------------------------------------------------------
	NxVec3 vPosition( x, y, z);


	   vector<float> vertices;
	

    DWORD stride =  D3DXGetFVFVertexSize(Model->GetFVF());
    BYTE* vbptr = NULL;
    Model->LockVertexBuffer(0, (LPVOID*)&vbptr);
	
    int ii = -1;
    for(DWORD i = 0; i < Model->GetNumVertices(); i++)
    {
        ii++;
        D3DXVECTOR3* pos = (D3DXVECTOR3*)vbptr;
		D3DXVECTOR3 _tempPos=*pos;
		D3DXVec3TransformCoord(&_tempPos,&_tempPos,&scale);
        vertices.push_back(_tempPos.x);
        vertices.push_back(_tempPos.y);
        vertices.push_back(_tempPos.z);
		
		
        vbptr += stride;
    }
    Model->UnlockVertexBuffer();

//-----------------------------------------------------------------------------------------
// 2. Получить массив с индексами объекта
//---------------------------------------------------------------------------------------

	   LPVOID * ppData;
     stride = sizeof(short);
    BYTE* ibptr = NULL;

    short* indices = new short[Model->GetNumFaces() * 3];

    vector<short> copy;

    Model->LockIndexBuffer(0, (LPVOID*)&indices);

    for(int i = 0; i < Model->GetNumFaces() * 3; i++)
    {
        copy.push_back(indices[i]);
    }

    Model->UnlockIndexBuffer();

//-----------------------------------------------------------------------------------------
// 3. Создать ограничивающие объемы
//---------------------------------------------------------------------------------------


	int NumVerticies = vertices.size() / 3;
    int NumTriangles = copy.size() / 3;
    //Create pointer for vertices
    NxVec3* verts = new NxVec3[NumVerticies];

	 ii = -1;
    for(int i = 0; i < NumVerticies; i++)
    {
        ++ii;
        verts[i].x = vertices[ii];
        verts[i].y = vertices[++ii];
        verts[i].z = vertices[++ii];
    }
    //Create pointer for indices
    NxU16 *tris = new NxU16[copy.size()];
    for(int i = copy.size() - 1; i >= 0; i--)
        tris[i] = i;

    // Build physical model
    NxTriangleMeshDesc TriMeshDesc;
    TriMeshDesc.numVertices = NumVerticies;
    TriMeshDesc.numTriangles = NumTriangles;
    TriMeshDesc.pointStrideBytes = sizeof(NxVec3);
    TriMeshDesc.triangleStrideBytes = 3*sizeof(NxU16);
    TriMeshDesc.points = verts;
    TriMeshDesc.triangles = tris;
    TriMeshDesc.flags = NX_MF_16_BIT_INDICES ;//| NX_MF_FLIPNORMALS  ;
    
    NxTriangleMeshShapeDesc ShapeDesc;
    NxInitCooking();

    // Cooking from memory
    MemoryWriteBuffer buf;
    bool status = NxCookTriangleMesh(TriMeshDesc, buf);
    ShapeDesc.meshData = g_pPhysicsSDK->createTriangleMesh(MemoryReadBuffer(buf.data));

    NxActorDesc actorDesc;
    actorDesc.shapes.pushBack(&ShapeDesc);
    actorDesc.globalPose.t = vPosition;

    Actor = g_pScene->createActor(actorDesc);

    delete[] verts;
    delete[] tris;
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 27.05.2013, 18:49   #2
4yBa4Ok
Знающий
 
Аватар для 4yBa4Ok
 
Регистрация: 01.04.2011
Адрес: Екатеринбург
Сообщений: 232
Написано 48 полезных сообщений
(для 82 пользователей)
Ответ: Проблемы с геометрией в PhysX

Не проще ли юзать 2 разных меша?
__________________





(Offline)
 
Ответить с цитированием
Старый 27.05.2013, 18:51   #3
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Проблемы с геометрией в PhysX

Проще. А как PhysX заставить использовать другой меш?
То есть я могу просто сделать упрощенную модель для столкновений, но это не изменит сути - готовить все придется. А он даже кубик умудряется вывернуть.
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 28.05.2013, 12:44   #4
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Проблемы с геометрией в PhysX

Ну хотя бы подскажите, чем вы экспортируете в .х из Макса...
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 28.05.2013, 18:34   #5
4yBa4Ok
Знающий
 
Аватар для 4yBa4Ok
 
Регистрация: 01.04.2011
Адрес: Екатеринбург
Сообщений: 232
Написано 48 полезных сообщений
(для 82 пользователей)
Ответ: Проблемы с геометрией в PhysX

Я пользовался .obj . Импорт вытащил из какого-то тутора.
__________________





(Offline)
 
Ответить с цитированием
Старый 28.05.2013, 19:03   #6
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Проблемы с геометрией в PhysX

Можешь скинуть функцию загрузки модели из .obj?
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 28.05.2013, 19:44   #7
4yBa4Ok
Знающий
 
Аватар для 4yBa4Ok
 
Регистрация: 01.04.2011
Адрес: Екатеринбург
Сообщений: 232
Написано 48 полезных сообщений
(для 82 пользователей)
Ответ: Проблемы с геометрией в PhysX

Я же говорю что пользовался) Посмотри в примерах) Я просто винду сносил, поставил Ultimate x64 вместо Home Premium x86
__________________





(Offline)
 
Ответить с цитированием
Старый 28.05.2013, 20:49   #8
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Проблемы с геометрией в PhysX

Я в тупике, мужики.
Какой день бьюсь - ничего не выходит. Что только не пробовал уже.
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:11.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com