NDC10_Day3_서관희권성태장용석 › NDC10_Day3_이은석 › ParkPD › RecentChanges › RenderMonkey › RenderMonkeyTutorial02
Adding a Skybox to RenderMonkey 블로깅을 간단하게 번역해 봤습니다. 쉐이더 코드에 한글 주석을 넣으면 error X3000 가 생기는 경우가 있군요. 컴파일 에러가 나면 한글 주석을 다 빼고 해 보세요.
RenderMonkey 에 대한 기본적인 튜토리얼을 블로깅했습니다. 이번에는 어떻게 하면 RenderMonkey 에서 화면에 보여지는 단색 배경 대신 스카이박스(skybox) 를 보여줄 수 있을지를 얘기해 볼까 합니다. 저는 이미 여러분이
이전 튜토리얼을 읽고 따라해 봤고, HLSL 에 대해 익숙하며 RenderMonkey 가 아닌 다른 곳에서 스카이박스를 어떻게 만드는지 알고 있다고 가정하겠습니다. 인터넷 찾아보시면 (이 블로깅처럼) 스카이박스를 어떻게 구현하는지 좋은 자료를 많이 찾아볼 수 있습니다. 그나저나 제가 구현한 방식은 Riemer Grootjans 의 책
XNA 3.0 Game Programming Recipes 에 기초하고 있습니다. 이 책에서는 이 외에도 여러 다양한 주제를 다루고 있는데 도움되는 내용이 많습니다.





float4 ViewPosition; float4x4 ViewProjection; sampler Texture;




float4 ViewPosition;
float4x4 ViewProjection;
struct VS_INPUT
{
float4 position : POSITION0;
};
struct VS_OUTPUT
{
float4 position : POSITION0;
float3 position3D : TEXCOORD0;
};
// 이동 행렬을 만든다.
float4x4 translation(float3 position)
{
return float4x4(
float4(1,0,0,0),
float4(0,1,0,0),
float4(0,0,1,0),
float4(position.xyz, 1)
);
}
VS_OUTPUT vs_main(VS_INPUT input)
{
VS_OUTPUT output;
// 스카이박스를 카메라 위치로 옮기는 월드 행렬을 만든다.
float4x4 world = translation(ViewPosition.xyz);
// 월드행렬을 기존 뷰-프로젝션 행렬과 곱한다.
float4x4 WorldViewProjection = mul(world, ViewProjection);
// 이렇게 만든 공간으로 정점을 이동시킨다.
output.position = mul(input.position, WorldViewProjection);
// 모델 공간에서의 원래 정점 위치를 저장한다.
// 큐브 모델은 중심점이 원점에 있기 때문에
// 원래 정점 위치값을 큐브맵의 방향값으로 바로 활용할 수 있다.
output.position3D = input.position;
return output;
}
(한글 주석 때문에 error X3000: syntax error: unexpected end of file 에러가 뜨는 경우가 있네요. 한글 주석을 제거하면 에러가 사라집니다. 한글주석이나 경로에 한글이 들어가면 이런 현상이 있다고 하는데 RenderMonkey 의 버그인지 뭔지 정확한 원인을 모르겠네요.)
sampler Texture;
struct VS_OUTPUT
{
float4 position : POSITION0;
float3 position3D : TEXCOORD0;
};
float4 ps_main(VS_OUTPUT input) : COLOR0
{
// 원래 정점 위치를 큐브맵 텍스처를 샘플링하는데 사용한다.
return texCUBE(Texture, input.position3D);
}



