Hi all.
Im trying to make a box with no ends based on two 3d locations the target and the start points.
I think I have something wrong with my vertices when I create four quads on the gpu.
Here is a Image of what Im talking about.
this is the shader code Ill just paste where I create the 4 quads.
// The draw GS just expands 2 3dvectors the target and the start to 4 quads
[maxvertexcount(16)]
void DrawGS(point VS_OUT gIn[1],
inout TriangleStream<GS_OUT> triStream)
{
// do not draw emitter particles.
if( gIn[0].type != PT_EMITTER )
{
float4x4 WVP = gViewProj;//mul(W, gViewProj);
//
// Compute 4 triangle strip vertices (quad) in local space.
// The quad faces down the +z axis in local space.
//
// float halfWidth = (0.5f*gIn[0].sizeW.x);// * scale;
// float halfHeight = (0.5f*gIn[0].sizeW.y);// * scale;
float4 v[16];
//we make this shape here
// ____________
// 4 /\ 1 faces \
// / \___________\
// \ / 2 /
// 3 \/___________/
//wdthp heightp are the width and height of the starting point of the lazer
//wdtht heightt are going to be the width and height of the tearget end
//gEmitDirW is a vector3 in 3d world coords and now a direction in this shader its a target
float wdthp = gParticleWidth;//starting points width
float wdtht = ggrowamount;//the targets z width
float heightp = gParticleHeight;//height of the starting end of the lazer
float heightt = fSpeed;//height of the target end
//make a quad from pos to target face 1
v[0] = float4(gEmitDirW.x, gEmitDirW.y + heightt, gEmitDirW.z - wdtht, 1.0f);
v[1] = float4(gEmitPosW.x, gEmitPosW.y + heightp, gEmitPosW.z - wdthp, 1.0f);
v[2] = float4(gEmitPosW.x, gEmitPosW.y + heightp, gEmitPosW.z + wdthp, 1.0f);
v[3] = float4(gEmitDirW.x, gEmitDirW.y + heightt, gEmitDirW.z + wdtht, 1.0f);
//face 2
v[4] = float4(gEmitDirW.x, gEmitDirW.y + heightt, gEmitDirW.z + wdtht, 1.0f);
v[5] = float4(gEmitPosW.x, gEmitPosW.y + heightp, gEmitPosW.z + wdthp, 1.0f);
v[6] = float4(gEmitPosW.x, gEmitPosW.y - heightp, gEmitPosW.z + wdthp, 1.0f);
v[7] = float4(gEmitDirW.x, gEmitDirW.y - heightt, gEmitDirW.z + wdtht, 1.0f);
//face 3
v[8] = float4(gEmitDirW.x, gEmitDirW.y - heightt, gEmitDirW.z - wdtht, 1.0f);
v[9] = float4(gEmitPosW.x, gEmitPosW.y - heightp, gEmitPosW.z - wdthp, 1.0f);
v[10] = float4(gEmitPosW.x, gEmitPosW.y - heightp, gEmitPosW.z + wdthp, 1.0f);
v[11] = float4(gEmitDirW.x, gEmitDirW.y - heightt, gEmitDirW.z + wdtht, 1.0f);
//face 4
v[12] = float4(gEmitDirW.x, gEmitDirW.y + heightt, gEmitDirW.z - wdtht, 1.0f);
v[13] = float4(gEmitPosW.x, gEmitPosW.y + heightp, gEmitPosW.z - wdthp, 1.0f);
v[14] = float4(gEmitPosW.x, gEmitPosW.y - heightp, gEmitPosW.z - wdthp, 1.0f);
v[15] = float4(gEmitDirW.x, gEmitDirW.y - heightt, gEmitDirW.z - wdtht, 1.0f);
//
// Transform quad vertices to world space and output
// them as a triangle strip.
//
GS_OUT gOut;
[unroll]
for(int i = 0; i < 16; ++i)
{
gOut.posH = mul(v[i], WVP);
gOut.texC = gQuadTexC[i];
gOut.color = gIn[0].color;
gOut.arrayid = gIn[0].arrayid;
triStream.Append(gOut);
}
}
}