|
Xors3D Графический движок с поддержкой DirectX9 |
23.02.2010, 03:18
|
#1
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Xors3D + PhysX Проблемы
По истечении некоторого времени решил вернутся к B3D чтоб так сказать немножко поигратся. Сразу появились проблемы.
За попытки создания Trimesh или Hull меня нещадно награждали MAV`ом.
Спасибо Knightmare за его терпение, теперь все проблемы решены.
Теперь по подробнее:
Xors3D хоть и похож на Blitz3D, но работает иначе (во многих местах даже грамотнее).
Cледовательно и работает с физ. враппером он иначе.
Корень проблемы - банки данных Blitz3D.
Лечится так: - Качаем последние DLL
http://mycop.xors3d.com/px.zip
- Меняем в Decls все символы * на % (просто заменой в Блокноте)
* - Банк данных Blitz3D
% - число (хендл или айди) который как раз нам нужен
!!! Важно понимать, что после этого враппер будет непригоден для использования в чистом Blitz3D
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Эти 8 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
|
|
03.03.2011, 16:44
|
#2
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
Ссылка уже не работает, у кого-нибудь это осталось? Потому что у меня тоже не работает хулл.
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
03.03.2011, 18:10
|
#3
|
Знающий
Регистрация: 08.11.2010
Адрес: Москва
Сообщений: 285
Написано 78 полезных сообщений (для 182 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
Меняем в Decls все символы * на % (просто заменой в Блокноте)
|
Не? (и ещё несколько символов)
|
(Offline)
|
|
03.03.2011, 18:26
|
#4
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
в деклс враппера физики?
Блин! Что делать?..
__________________
Самый первый и самый великий программист - это Бог.
Последний раз редактировалось moka, 03.03.2011 в 22:42.
Причина: Пиши одним сообщением. Такой дабл постинг легко может удаляться..
|
(Offline)
|
|
04.03.2011, 22:44
|
#5
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
Так. Связка PhysX+Xors3D ныне не актуальна, но если вы всё же предпочитаете PhysX буллету, то вам надо знать:
Автор враппера (Render) положил болт на враппер и он больше не разрабатывается.
Исходники можно лицезреть тут: http://mycop.xors3d.com/public/PXW/PhysXWrapper.zip
Последняя версия PhysX для Xors3D лежит тут: http://mycop.xors3d.com/public/PXW/PXW_Xors3d.zip
Тримеш делать так:
Function xCreateTrimesh(mesh%,mass#=0) If mesh <> 0 Local VBs = xGetMeshVB(mesh) Local VB_sizes = xGetMeshVBSize(mesh) Local IBs = xGetMeshIB(mesh ) Local IB_sizes=xGetMeshIBSize(mesh) Local Trimesh=pxCreateTriMesh(VBs, IBs, VB_sizes, IB_sizes, mass) Return Trimesh End If End Function
Хулл делать так:
Function xCreateHull(mesh%,mass#) If mesh <> 0 Local VB = xGetMeshVB(mesh) Local VB_size = xGetMeshVBSize(mesh) Local cube_body = pxBodyCreateHull(VB, VB_size, mass) Return cube_body End If End Function
На всякий случай прикладываю эти файлы дабы жили дольше и не затерялись со временем.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Эти 9 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
|
|
04.03.2011, 23:12
|
#6
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
ух... Жалко нельзя поставить 100 штук "полезно". Наконец то меня перестанут доставать вопросами "где взять драйвера для физикс враппера?", "где взять враппер?", "где взять исходники?", "а как выглядит функция тримеша?" и т.д.
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо St_AnGer за это полезное сообщение:
|
|
24.07.2012, 21:48
|
#7
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
По мере изучение такого союза сам написал пару функций. Инклюдим и пользуемся.
Function xConvertTerrainToPx(terrain,sx#,sy#,sz#)
nSize = xTerrainSize (terrain)
bank = CreateBank(nSize*nSize*4)
For z=1 To nSize-1
For x = 1 To nSize-1
y# = xTerrainHeight(terrain,x,z)
PokeFloat bank,(z*(nSize)+x)*4,y
Next
Next
body# = pxCreateTerrain(nSize,bank, sx, sy, sz)
FreeBank(bank)
Return body
End Function
;--------------------------------------------------------------------
;;===========================xMesh to Hull======================================================
Function xConvertMeshToHull%(mesh%, mass#)
Local nsurf = xCountSurfaces(mesh)
Local nvert = 0
For ns = 0 To nsurf-1
Local surf = xGetSurface(mesh,ns)
nvert = nvert + xCountVertices(surf)
Next
vbank = CreateBank(nvert*4*3)
nv = 0
For ns = 0 To nsurf-1
surf = xGetSurface(mesh,ns)
nvv = xCountVertices(surf)
For nvc = 0 To nvv - 1
PokeFloat vbank,nv*12+0,xVertexX(surf,nvc)
PokeFloat vbank,nv*12+4,xVertexY(surf,nvc)
PokeFloat vbank,nv*12+8,xVertexZ(surf,nvc)
nv = nv+1
Next
Next
Local bbb%= pxBodyCreateHull(vbank, nvert, mass)
FreeBank vbank
Return bbb
End Function
;============================xMesh to triMesh===================================================
Function xConvertMeshToTrimesh(mesh, mass# = 0)
nsurf = xCountSurfaces(mesh)
nvert = 0
nface=0
For ns = 0 To nsurf-1
Local surf = xGetSurface(mesh,ns)
nface = nface+xCountTriangles(surf)
nvert = nvert +xCountVertices(surf)
Next
fbank = CreateBank(nface*4*3)
nf = 0
vbank = CreateBank(nvert*4*3)
nv = 0
pnvv = 0
For ns = 0 To nsurf-1
surf = xGetSurface(mesh,ns)
nfv = xCountTriangles(surf)
For nfc = 0 To nfv -1
PokeInt fbank,nf*12+0,xTriangleVertex(surf,nfc,0)+pnvv+ns
PokeInt fbank,nf*12+4,xTriangleVertex(surf,nfc,1)+pnvv+ns
PokeInt fbank,nf*12+8,xTriangleVertex(surf,nfc,2)+pnvv+ns
nf=nf+1
Next
nvv = xCountVertices(surf)
For nvc = 0 To nvv - 1
PokeFloat vbank,nv*12+0,xVertexX(surf,nvc)*xEntityScaleX(mesh)
PokeFloat vbank,nv*12+4,xVertexY(surf,nvc)*xEntityScaleY(mesh)
PokeFloat vbank,nv*12+8,xVertexZ(surf,nvc)*xEntityScaleZ(mesh)
nv = nv+1
Next
pnvv=pnvv+nvv-1
Next
bbb%=pxCreateTriMesh(vbank, fbank, nvert, nface,mass)
FreeBank vbank
FreeBank fbank
Return bbb%
End Function
Function pxEntityScaleX#(ent%)
row=0
el1# = xGetMatElement(ent,row,0)
el2# = xGetMatElement(ent,row,1)
el3# = xGetMatElement(ent,row,2)
Return Sqr(el1*el1+el2*el2+el3*el3)
End Function
Function pxEntityScaleY#(ent%)
row=1
el1# = xGetMatElement(ent,row,0)
el2# = xGetMatElement(ent,row,1)
el3# = xGetMatElement(ent,row,2)
Return Sqr(el1*el1+el2*el2+el3*el3)
End Function
Function pxEntityScaleZ#(ent%)
row=2
el1# = xGetMatElement(ent,row,0)
el2# = xGetMatElement(ent,row,1)
el3# = xGetMatElement(ent,row,2)
Return Sqr(el1*el1+el2*el2+el3*el3)
End Function
;-----------------------------------------------------------------------------------
Function xpxBodySetEntity(ent,bod,x#=0,y#=0,z#=0)
xPositionEntity ent,pxBodyGetPositionX(bod)+x,pxBodyGetPositionY(bod)+y,pxBodyGetPositionZ(bod)+z
xRotateEntity ent,pxBodyGetRotationPitch(bod),pxBodyGetRotationYaw(bod),pxBodyGetRotationRoll(bod)
End Function
__________________
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо burovalex за это полезное сообщение:
|
|
10.05.2013, 14:04
|
#8
|
Бывалый
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений (для 866 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
использую эту связку двигов и вот недавно встал вопрос : работает ли cloth и если да то можно код как создать тряпку в ксорсе с помощью физикса
|
(Offline)
|
|
12.05.2014, 06:59
|
#9
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
pxCreateTriMesh
Почитал, что автор Render для BMax-а написал отдельный загрузчик Ткани pxCreateClothSpec
Сейчас я просто заменил строку Функции xConvertMeshToTrimesh на аналогичную загрузочку Ткани.
Ошибок загрузки нет.
Но при pxUpdateCloth() - ошибка.
Предполагаю что к Ткани не закреплёна Модель.
Global cloth_mesh=xLoadMesh("..\Media\pol.b3d") cloth_tex=xLoadTexture("..\Media\rug512.jpg") xEntityTexture cloth_mesh,cloth_tex xEntityFX cloth_mesh,16 ;ЭТО ВАЖНО чтобы плоскость отображалась с двух сторон xScaleMesh cloth_mesh,0.1,0.1,0.1 xPositionMesh cloth_mesh,0,8,0
Global cloth_body=xConvertMeshToCloth(cloth_mesh) Global cloth_nvert=pxClothGetNumVertices(cloth_body) ;оптимизация чтобы не Global cloth_vbank=CreateBank(cloth_nvert*4*3) ;повторять в цикле
pxClothAttachVertexToPos(cloth_body,399,-1,8,0) pxClothAttachVertexToPos(cloth_body,440,1,8,0) pxClothSetBendingStiffness(cloth_body,1)
~ ~ ~ Function xConvertMeshToCloth(mesh) nsurf=xCountSurfaces(mesh) nvert=0 nface=0 For ns=0 To nsurf-1 Local surf=xGetSurface(mesh,ns) nface=nface+xCountTriangles(surf) nvert=nvert +xCountVertices(surf) Next fbank=CreateBank(nface*4*3) nf=0 vbank=CreateBank(nvert*4*3) nv=0 pnvv=0 For ns=0 To nsurf-1 surf=xGetSurface(mesh,ns) nfv=xCountTriangles(surf) For nfc=0 To nfv -1 PokeInt fbank,nf*12+0,xTriangleVertex(surf,nfc,0)+pnvv+ns PokeInt fbank,nf*12+4,xTriangleVertex(surf,nfc,1)+pnvv+ns PokeInt fbank,nf*12+8,xTriangleVertex(surf,nfc,2)+pnvv+ns nf=nf+1 Next nvv=xCountVertices(surf) For nvc=0 To nvv-1 PokeFloat vbank,nv*12+0,xVertexX(surf,nvc)*xEntityScaleX(mesh) PokeFloat vbank,nv*12+4,xVertexY(surf,nvc)*xEntityScaleY(mesh) PokeFloat vbank,nv*12+8,xVertexZ(surf,nvc)*xEntityScaleZ(mesh) nv=nv+1 Next pnvv=pnvv+nvv-1 Next bbb%=[b]pxCreateClothSpec[/b](vbank,fbank,nvert,nface) FreeBank vbank FreeBank fbank Return bbb% End Function
эта писанина ныне не актуальна:
Пока вот думаю как закрепить Ткань на Модель.
Есть функция pxClothGetNormals(Cloth%, nbank*), но не знаю как её применить (в архиве bmax-а должен быть пример).
Посмотрел в исходник враппера, там в файле Blitzpx.cpp
на 3105 строке:
regularCloth->entityData = 0;
почему то не приписывается Entity к Cloth, хотя можно было бы (наверное) через функцию (при создании Ткани)
Обновление Ткани и её Модели читать ниже \/
Последний раз редактировалось LLI.T.A.L.K.E.R., 12.05.2014 в 10:28.
Причина: оптимизация банка
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.05.2014, 07:37
|
#10
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
Загрузку Модели и создания Ткани читайте выше ^
УРА!
Заработала Ткань в Xors3D!
Благодаря moka написал функцию повертексного обновления Модели исходя из точек Тела.
Полёт нормальный! На Celeron, GeforceFX 5700 - квс(fps) снижается лишь на 15. (с ~102 на ~87)
{КОД} pxRenderPhysic(60,0) pxClothUpdateMesh(cloth_body,cloth_mesh) {КОД}
Function pxClothUpdateMesh(body,mesh) pxClothGetVertexPos(body,cloth_vbank,cloth_nvert) surf=xGetSurface(mesh,0) For nvc=0 To cloth_nvert-1 xVertexCoords surf,nvc,PeekFloat(cloth_vbank,nvc*12+0),PeekFloat(cloth_vbank,nvc*12+4),PeekFloat(cloth_vbank,nvc*12+8) Next End Function
медиа ресурсы искать в PhysX-архиве Blitz_samples (там ещё папка Cloth(PRO) лежит)
для google: Xors3D PhysX wrapper pxCreateCloth pxUpdateCloth pxClothSetVertexPos pxClothGetNormals
Последний раз редактировалось LLI.T.A.L.K.E.R., 12.05.2014 в 09:23.
Причина: оптимизировал создания вертекс-банка вне цикла
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо LLI.T.A.L.K.E.R. за это полезное сообщение:
|
|
12.05.2014, 15:04
|
#11
|
Бывалый
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений (для 866 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
Мав на bbb%=pxCreateClothSpec(vbank,fbank,nvert,nface)
|
(Offline)
|
|
12.05.2014, 19:28
|
#12
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
Сообщение от tirarex
Мав на bbb%=pxCreateClothSpec(vbank,fbank,nvert,nface)
|
но у меня на двух ЭВМ работает (winxp)
Сделал наглядный пример .bb и .exe - форматы.
Можно проверить на разных системах.
скопируйте Userlibs\Blitzpx.dll в основную папку примера
(а для использования в Blitz3D в папку его Userlibs)
Последний раз редактировалось LLI.T.A.L.K.E.R., 12.05.2014 в 20:28.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо LLI.T.A.L.K.E.R. за это полезное сообщение:
|
|
12.05.2014, 19:32
|
#13
|
Бывалый
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений (для 866 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
Может я что то не так делаю , скинь семпл .
|
(Offline)
|
|
12.05.2014, 20:05
|
#14
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
Проверил на третьем ЭВМ - Win7 тоже всё норм. Думаю не будет только у меня одного работать, с моими конфигурациями.
|
(Offline)
|
|
12.05.2014, 20:12
|
#15
|
Бывалый
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений (для 866 пользователей)
|
Ответ: Xors3D + PhysX Проблемы
Заработало только с твоим деклз !
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:48.
|