directX: vertexfarben separat im speicher halten?
-
ich wollte fragen, ob directx die möglichkeiten lässt, zb die vertexfarben separat vom vertexbuffer zu halten, bzw ob es analog zu der methode setstreamsource vielleicht auch sowas ähnliches wie setstreamcolor gibt.
ich hab nämlich irgendwo gelesen, dass es möglich sei, sowas in einem vertexstream zu manipulieren, wobei aber nich gesagt wurde wie, daraufhin hab ich dann in der hilfe gesucht, hab was gegoogled und es ist nichts dabei rausgekommen
-
mach einen zweiten vertexbuffer mit colors den du als nächst'n stream setzt (dazu exisitert bei setstreamsource die streamnummer).
rapso->greets();
-
also einfach
DDevice->SetStreamSource(0,&Vertices,0,sizeof(vertex); DDevice->SetStreamSource(1,&VertexColor,0,sizeof(ColorVertex); DDevice->SetIndices(Indizes); DDevice->DrawIndexedPrimitive([...]); DDevice->Present(0,0,0);
obwohl..so einfach kann es doch garnicht sein, woher soll der denn wissen, dass im 2. aufruf von SetStreamSource nun farben gemeint ind? hat jede streamnummer eine andere bedeutung?
-
Sieht so aus, als ob du dafür VertexShader-Programme bräuchtest
Im SDK hab ich das gefunden:
DX9SDK schrieb:
struct XYZBuffer
{
FLOAT x, y, z;
};struct ColBuffer
{
D3DCOLOR color;
};The next step is to create a vertex shader declaration as shown in the code below.
D3DVERTEXELEMENT9 decl[] =
{
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 1, 0, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
D3DDECL_END()
};Now create the vertex declaration object:
LPDIRECT3DVERTEXDECLARATION9 m_pVertexDeclaration;
g_d3dDevice->CreateVertexDeclaration( decl, &m_pVertexDeclaration );The next step is to call the IDirect3DDevice9::CreateVertexShader method to create the vertex shader. But first, the shader must be assembled.
TCHAR strVertexShaderPath[512];
LPD3DXBUFFER pCode;
LPDIRECT3DVERTEXSHADER9 m_pVertexShader;hr = DXUtil_FindMediaFileCb( strVertexShaderPath,
sizeof(strVertexShaderPath), _T("ShaderFile.vsh");hr = D3DXAssembleShaderFromFile( strVertexShaderPath, NULL, NULL,
dwFlags, &pCode, NULL );g_d3dDevice->CreateVertexShader( (DWORD*)pCode->GetBufferPointer(),
&m_pVertexShader );The code example below shows how to set the vertex shader, set the stream source, and then render the triangle list.
g_pd3dDevice->SetVertexDeclaration( m_pVertexDeclaration );
g_d3dDevice->SetVertexShader( m_pVertexShader );
g_d3dDevice->SetStreamSource( 0, xyzbuf, sizeof(XYZBuffer));
g_d3dDevice->SetStreamSource( 1, colbuf, sizeof(ColBuffer));
g_d3dDevice->SetIndices( pIB, 0 );
g_d3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST,
0, max - min + 1, 0, count / 3 );
-
wonach haste denn gesucht?
und wo kann ich lernen, wie man shader benutzt?
und 1000 weitre fragen die indirekt mit dem code zusammenhängen, und die ich hier nicht erwähnen will