• Advertisement
Sign in to follow this  

Making lines in 3D space in Direct X

This topic is 2096 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

I'm trying to create a line in 3D space, but it's not working right for me, it only causes the other objects to have a pattern of black spots

I don't know much about how to create a line in 3D space, it's hard to find anything on it.


// Header
struct LineVert
{
Vector3 Position;
};

IDirect3DVertexDeclaration9 *vertDecl;
IDirect3DVertexBuffer9 *vertBuff;

// Cpp
LineVert verts[] =
{
{ Vector3(0,0,0) },
{ Vector3(2,0,0) }
};

d3dDevice->CreateVertexBuffer(sizeof(LineVert)*2,0,0,D3DPOOL_MANAGED,&vertBuff,0);
CopyToVRam(verts,vertBuff);

D3DVERTEXELEMENT9 decl[] =
{
{0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
D3DDECL_END()
};
d3dDevice->CreateVertexDeclaration(decl, &vertDecl);


Now this is how i draw it


d3dDevice->SetVertexDeclaration(vertDecl);
d3dDevice->SetStreamSource(0,vertBuff,0,sizeof(LineDecl));
d3dDevice->DrawPrimitive(D3DPT_LINELIST,0,1);


It produces black spots like the image i have attached, the shader for the line simply returns the color i pass it

float color[4] = { 1,1,1,1 };
shader->SetFloatArray(gColor,color,4);


Any help would be greatly appreciated Edited by Muzzy A

Share this post


Link to post
Share on other sites
Advertisement
In your code snippet, I see geometry generated for a single line segment from (0,0,0) to (2,0,0). How did that end up drawing a circle in the first place? Can you post that piece of code, since it's the relevant part for this question.

Did you use a rotation matrix to trace that single line in all possible angles to crate a sphere? Or is that sphere drawn in some other way? Where exactly in the image is that line (0,0,0)->(2,0,0) drawn?

Share this post


Link to post
Share on other sites
i made that sphere with d3dxcreatesphere lol. I apologize, the line is supposed to come from the center of the sphere which is at the origin and to the center of another sphere at (2,0,0). That's what all the spheres look like when i try to draw this line sorry for the misunderstanding lol

Share this post


Link to post
Share on other sites
So the line does not appear at all? Is depth buffering active, perhaps it gets hidden behind the sphere geometry? Try using PIX to debug what kind of output occurs during the line draw step, and to troubleshoot that the device state is what you expect.

Share this post


Link to post
Share on other sites
ok i'm downloading PIX atm, never used it before. but i'm sure it's not hard

Share this post


Link to post
Share on other sites
Somewhat relevant, I remember I converted the "volumetric lines" demo from OpenGL to Direct3D 9. The demo originally came with the NVidia SDK. Here is the Direct3D9 sample in case it's relevant to your interests.
Also, If you have an NVidia graphics card, you may be interested in checking out NVidia PerfHUD as an alternative to PIX. It's generally very pleasant to work with.

Share this post


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

  • Advertisement