Sign in to follow this  

Vertex Buffer Diffuse Colouring Not Working

This topic is 2204 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi All.

ive followed Reimers "[url=""]Adding Some Color And The Z-Buffer[/url]" tutorial and its not working.

the D3D debug runtime only complains about "WRITEONLY" not being set for the vertex buffer on creation.

my code is almoast identical to his terrain rendering section.

ive enabled the depth-stencil buffer, the tiger model from the SDK "meshes" tutorial renders correctly( a bit pixelated ), but the terrain is completely white.

the diffuse colour of the "OURCUSTOMVERTEX" struct looks to be correctly, but the terrain is completely white.

here is the diffuse colour setting code:
if (height < MinimumHeight + (MaximumHeight - MinimumHeight) /4) //new
cv_Vertices[y*WIDTH + x].color = 0xff0000ff;
else if (height < MinimumHeight + (MaximumHeight - MinimumHeight) * 2/4)
cv_Vertices[y*WIDTH + x].color = 0xff228b22;
else if (height < MinimumHeight + (MaximumHeight - MinimumHeight) * 3/4)
cv_Vertices[y*WIDTH + x].color = 0xffa52a2a;
cv_Vertices[y*WIDTH + x].color = 0xffffffff;

adn rendering code:
Device->SetStreamSource( 0, VertexBuffer, 0, sizeof( OURCUSTOMVERTEX ) );
Device->SetIndices( IndexBuffer );

D3DXMATRIX matWorld;
D3DXMATRIX matTranslation;
D3DXMATRIX matRotation;

D3DXMatrixTranslation( &matTranslation, xPos, yPos, zPos );
D3DXMatrixRotationYawPitchRoll( &matRotation, DegreeToRadian( 0 ), DegreeToRadian( 180 ), DegreeToRadian( 0 ) );
matWorld = matRotation * matTranslation;

Device->SetTransform( D3DTS_WORLD, &matWorld );

Device->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0, 0, WIDTH * HEIGHT, 0,( WIDTH - 1 ) * ( HEIGHT - 1 ) * 2 );

Thanks In Advance.

Share this post

Link to post
Share on other sites
maybe its because your if else if conditions are failing because your terrain is too high? so that only the else statement is being executed, so all of your terrain is white. try changing the else statement to another color to see if that changes anything. also, is MinimumHeight and MaximumHeight defined as an integer type, like this:

int minimumHeight;
int maximumHeight;

if so, you are doing an integer division for each of the if else if conditions. change the "/4", "2/4" and "3/4" to "/4.0f", "2.0f/4.0f" and "3.0f/4.0f" to see if that fixes it, good luck!

I just looked at that site, so what i said above is probably not the problem. but, if your code is almost the same as his, what is it that you changed, because it's possible that that's what's causing the problem

are you creating the vertex buffer before or after you set the vertex colors?

are you using height for anything else in your code? like maybe the height of your window?

Share this post

Link to post
Share on other sites
LOL i forgot to set the D3DRS_LIGHTING flag.

is it possible to use the terrain shader from Reimer's XNA Terrain tutorial without modification ?
because last time i tried to use a simple and basic( all it did was render the object with a colour ) effect that i made in XNA it would not compile.

Share this post

Link to post
Share on other sites
Sign in to follow this