joeblack
Založen: 14. 09. 2009 Příspěvky: 66
|
Zaslal: 14. září 2009, 15:17:13 Předmět: vertex textura |
|
|
Zdravim,
v mojom engine (d3d) pouzivam physX na simulaciu fyziky.
chcel by som si hodnoty ktore dostanem ako vysledok simulacie poslat do VS ako hodnoty float textury. Lenze mi to nefunguje (vydim len neake divne potocene trojuholniky miesto sceny). Ked miesto textury poslem do VS maticu ktoru dostanem z physX objekty sa pohybuju ako maju. Mohol by som takto nastavit maticu transformacie pre kazdy pohyblivy objekt samostatne, ale chcem mat cim menej draw-callov. Preto by som rad pouzil texturu s tym, ze by som pouzival 4-tu hodnotu polohy ako index matice v texture.
kod vytvarania textury :
kód: |
D3DXCreateTexture(engine::getDevice(),2,2,1,D3DUSAGE_DYNAMIC,D3DFMT_A32B32G32R32F,D3DPOOL_DEFAULT,&forceTextureBuffer1) |
(mam iba jeden pohyblivy objekt preto mi zatial staci 2x2 )
naplnanie textury :
kód: |
This->scenes[This->currentScene]->updateArray(forceArray);
forceTextureBuffer1->LockRect(0,&m_rectLocked,NULL,0);
memcpy((float*)m_rectLocked.pBits, forceArray, 4*2*2*sizeof(float));
forceTextureBuffer1->UnlockRect(0); |
kód: |
void sceneDesc::updateArray(float *&forceArray)
{
WORD numActors = scene->getNbActors();
NxActor** actors = scene->getActors();
for (WORD i=0; i < numActors;++i)
{
NxActor* actor = *actors++;
if (i == 26)
{
actor->getGlobalPose().getColumnMajor44(forceArray);
}
}
} |
VS :
kód: |
float4x4 worldMatrix;
worldMatrix[0]= tex2Dlod(Sampler,float4(0,0,0,0)).abgr;
worldMatrix[1]= tex2Dlod(Sampler,float4(0.5,0,0,0)).abgr;
worldMatrix[2]= tex2Dlod(Sampler,float4(0,0.5,0,0)).abgr;
worldMatrix[3]= tex2Dlod(Sampler,float4(0.5,0.5,0,0)).abgr;
OUT.hposition = mul(float4(position.xyz,1),mul(worldMatrix,worldViewProj)); |
(ked poslem worldMatrix ako maticu vsetko je ok.)
MODERATOR: tag CODE!!! |
|