… 여전히 스페큘러에서 진도 안나감.
일단 뷰 벡터까지 빼가지고 제대로 계산을 하긴 했는데,
이게 맞나 모르겠다.
퐁 반사랑 비교해 가면서 구해보고 싶은데, 이건 이모모군이 돌아와야 물어보지..
float4x4 World : WORLD ;
float4x4 View : VIEW ;
float4x4 Projection : PROJECTION ;
float4x4 WorldViewProj : WORLDVIEWPROJ ;
float4x4 WorldView : WORLDVIEW ;
//라이트 밝기
float4 I_a = {0.1f, 0.1f, 0.1f, 1.0f};//엠비언트
float4 I_d = {1.0f, 1.0f, 1.0f, 1.0f};//디퓨즈
float4 I_s = {1.0f, 1.0f, 1.0f, 1.0f};//스페큘러
float3 lightDir : Direction
<
string UIName = “라이트 디렉션”;
string Object = “TargetLight”;
;
// 재질 반사색
float4 k_a
<
string UIName = “엠비언트”;
;
float4 k_d
<
string UIName = “디퓨즈”;
;
float4 k_s
<
string UIName = “스페큘러”;
;
int n
<
string UIName = “스페큘러 파워”;
string UItype = “IntSpinner”;
float UIMin = 0.0f;
float UIMax = 50.0f;
;
void VS
(
in float4 iPos : POSITION ,
in float3 iNormal : NORMAL,
//in float3 itex : TEXCOORD0,
out float4 oPos : POSITION,
out float3 oDiffuse : COLOR0,
out float3 oSpecular : COLOR1
//out float3 otex : TEXCOORD0
)
{
float3 PositionView = mul(iPos, World);
float3 NormalView = normalize(mul(iNormal, (float3x3)World));
float3 RefVector = normalize(2* dot(NormalView,lightDir) * NormalView-lightDir);
float3 ViewDirection = normalize(PositionView);
oDiffuse = I_a * k_a + I_d * k_d * max(0,dot(NormalView,lightDir));
oSpecular = I_s * k_s * pow (max(0,dot(RefVector,ViewDirection)),n/4);
oPos = mul(iPos, WorldViewProj);
// otex = itex;
};
void PS
(
in float4 iDiffuse : COLOR0,
in float4 iSpecular : COLOR1,
out float4 oColor : COLOR
)
{
oColor = iDiffuse + iSpecular;
};
technique jp10
{
pass p0
{
CullMode = None;
VertexShader = compile vs_2_0 VS();
PixelShader = compile ps_2_0 PS();
}
}