Vertex Buffer Diffuse Colouring Not Working

Started by
-1 comments, last by ryan20fun 12 years, 3 months ago
Hi All.

ive followed Reimers "Adding Some Color And The Z-Buffer" 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;
else
cv_Vertices[y*WIDTH + x].color = 0xffffffff;


adn rendering code:

Device->SetStreamSource( 0, VertexBuffer, 0, sizeof( OURCUSTOMVERTEX ) );
Device->SetFVF( D3DFVF_XYZ | D3DFVF_DIFFUSE );
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.

Never say Never, Because Never comes too soon. - ryan20fun

Disclaimer: Each post of mine is intended as an attempt of helping and/or bringing some meaningfull insight to the topic at hand. Due to my nature, my good intentions will not always be plainly visible. I apologise in advance and assure you I mean no harm and do not intend to insult anyone.

Advertisement
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?
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.

Never say Never, Because Never comes too soon. - ryan20fun

Disclaimer: Each post of mine is intended as an attempt of helping and/or bringing some meaningfull insight to the topic at hand. Due to my nature, my good intentions will not always be plainly visible. I apologise in advance and assure you I mean no harm and do not intend to insult anyone.

This topic is closed to new replies.

Advertisement