Study/Directx 10

2d 점찍기

붕대마음 2010. 5. 2. 10:03
반응형

창생성, 삼각형그리기에 이어 점찍기라니...
다시 시작한다는 마음으로 ㅎㅎㅎ.

ID3D10EffectScalarVariable* vpWidthVariable  = NULL;
ID3D10EffectScalarVariable* vpHeightVariable = NULL;
이펙트 파일의 스칼라 값에 접근 하기 위해 위와 같은 인터페이스를 쓴다.

vpWidthVariable = pkEffect->GetVariableByName( "vpWidth" )->AsScalar();
vpHeightVariable = pkEffect->GetVariableByName( "vpHeight" )->AsScalar();
vpWidthVariable->SetFloat( (float)SCREEN_WIDTH );
vpHeightVariable->SetFloat( (float)SCREEN_HEIGHT );

점을 찍기 위해 위상정보를 수정한다.
pkDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_POINTLIST);


effect file
cbuffer cbViewport     상수 버퍼
{
 float vpHeight;
 float vpWidth;
};

struct VS_Input {
 float3 pos : POSITION;
 float4 color : COLOR;
};

struct PS_Input {
 float4 pos : SV_POSITION;
 float4 color : COLOR;
};
 
PS_Input VS( VS_Input input )
{
 PS_Input output = (PS_Input)0.0;
 output.pos.x = (input.pos.x / (vpWidth/2.0)) - 1;
 output.pos.y = -(input.pos.y / (vpHeight/2.0)) + 1;
 output.pos.z = input.pos.z;
 output.pos.w = 1.0f;
 output.color = input.color;
 return output;
}

float4 PS( PS_Input input ) : SV_Target
{
 return input.color;
}

technique10 Render
{
 pass P0
 {
  SetVertexShader( CompileShader( vs_4_0, VS() ) );
  SetGeometryShader( NULL );
  SetPixelShader( CompileShader( ps_4_0, PS() ) );
 }
}