| Microsoft DirectX 8.1 (vertex shader versions 1.0, 1.1) |
Calculates the distance vector.
dst dest, src0, src1
To learn more about registers, see Registers.
The following code fragment shows the operations performed by the dst instruction.
dest.x = 1; dest.y = src0.y * src1.y; dest.z = src0.z; dest.w = src1.w;
The first source operand (src0) is assumed to be the vector (ignored, d*d, d*d, ignored) and the second source operand (src1) is assumed to be the vector (ignored, 1/d, ignored, 1/d). The destination (dest) is the result vector (1, d, d*d, 1/d).
// This example transforms vertices and outputs a constant color // These steps are required in all vertex shaders. Once that is done, // the sample shows how to set up the inputs to the dst instruction // shader file m4x4 oPos, v0, c0 ; transform vertices by view/projection matrix mov oD0, c4 ; output constant color // find the distance mov r0.xyz, v0.xyz ; load vertex position dp3 r1.yz, r0.xyz, r0.xyz ; put d*d in r1.y and r1.z rsq r2.y, r1.y ; 1/d rcp r2.yw, r2.y ; put d in r2.y and r2.w dst r3, r1, r2 ; find the distance from v0 to origin// The resultant vertex color is green and is shown below
// The dp3 instruction is used to load the src0 register with data
// in the form of (ignored, d*d, d*d, ignored). The rcp instruction
// finishes loading register src1 with data in the form of
// (ignored, d, ignored, d).
// Additional code is used to initialize the constant registers
D3DXMATRIX mat, matView, matProj;
D3DXMatrixMultiply(&mat, &matView, &matProj);
D3DXMatrixTranspose(&mat, &mat);
// set C0 with the view and projection matrix
m_pd3dDevice->SetVertexShaderConstant(0, &mat, 4);
// set register c4
float colorGreen[4] = {0,1,0,0};
m_pd3dDevice->SetVertexShaderConstant(4, &colorGreen, 1);
// The first SetVertexShaderConstant method binds the C0 register
// with the first row of the view/projection matrix (rows 2,3,4 are
// bound to registers C2, C3, C4 also). The m4x4 instruction (in the
// shader file) loads the data.
// The second SetVertexShaderConstant method binds the C4 register
// with the color green.