I'm still busy implementing grass rendering by mostly adhering to this GPU Gems article: http://http.developer.nvidia.com/GPUGems/gpugems_ch07.html. That is, I'm using interleaved textures quads with transparent parts to simulate the grass. I have the grass pretty much done and also added a simple animation to it using the vertex shader. I have to add this grass to exisiting levels of a game now and am thinking about ways to control the distribution of the grass to prevent it from intersecting with objects in the level etc. I have implemented a simple solution already, but it's quite wasteful and I am looking for a better approach. At the moment I am generating random positions for grass objects within a specificly sized square to achieve a fairly even distribution. In addition, I created a square black and white texture with black areas representing areas, in which grass should be placed. In the shader, I map the position of the grass object to a texture coordinate into this texture and either discard the corresponding pixel or draw it depending on the texture value at that point. The problem is that I am sending data of all grass objects to the GPU just to have many of them being discarded in the end. The grass will be static, so it would be enough to somehow generate the positions of grass objects up front but I don't know how I could do that. Should I somehow sample the texture on the CPU and make sure all grass objects are placed on the desired parts? And is it actually possible to sample a texture on the CPU? What other choices do I have? Any ideas?
I actually tried sampling the texture on the CPU but the values I'm getting with this approach are not correct.
// pDensityTexture is of type ID3D11ShaderResourceView* BYTE* pTexValue = reinterpret_cast<BYTE*>(m_pDensityTexture); XMFLOAT4 pixel; pixel.x = pTexValue ; pixel.y = pTexValue ; pixel.z = pTexValue ; pixel.w = pTexValue ;
Can you please point me into a direction to get this working. Thank you very much!