¹öÅؽº ¼ÎÀÌ´õ¿Í Çȼ¿(ÇÁ·¹±×¸ÕÆ®) ¼ÎÀÌ´õ »çÀÌ¿¡´Â ·¹½ºÅͶóÀÌÀú ´Ü°è°¡ ÀÖ´Ù. ·¹½ºÅͶóÀÌÀú ´Ü°è¿¡¼ ÇÏ´ÂÀÏÀº ´ÙÀ½°ú °°´Ù. Ŭ¸®ÇÎ ¿ø±Ù ³ª´°¼À µÞ¸é Á¦°Å ºäÆ÷Æ® º¯È¯ ½ºÄµ º¯È¯ ½ºÄµ º¯È¯ ´Ü°è¿¡¼ °¢ Á¤Á¡µéÀÇ ¼Ó¼ºÀ» º¸°£ÇÏ¿© Çȼ¿ ¼ÎÀÌ´õ¿¡ ³Ñ°Ü ÁØ´Ù. Á¤Á¡ ¼Ó¼º position, color, uv, normalµîÀº º¸°£ µÇ¾î ÇÁ·¹±×¸ÕÆ®È µÈ´Ù. Á¤Á¤ ¼ÎÀÌ´õÀÇ Ãâ·Â¿¡¼ À§Ä¡µîÀÇ Á¤Á¡ ¼Ó¼ºÀ» ³Ñ°ÜÁÖ¸é Çȼ¿ ¼ÎÀÌ´õ¿¡¼ ¹Þ´Â ÀÔ·ÂÀº º¸°£µÇ¾î¼ ³Ñ¾î¿Â °ªÀÌ´Ù. ±×·¸±â ¶§¹®¿¡ Çȼ¿ ¼ÎÀÌ´õ¿¡¼ ¹æÇâ º¤ÅÍ´Â º¸°£µÈ °ªÀ̱⠶§¹®¿¡ ´Ù½Ã ³ë¸Ö¶óÀÌÁî(normalize) ÇØÁà¾ß ÇÑ´Ù. ¿ùµå Æ÷Áö¼ÇÀ» Çȼ¿ ¼ÎÀÌ´õ·Î ³Ñ°Ü Ä®¶ó °ªÀ¸·Î Ãâ·Â Çغ¸ÀÚ. ½ÇÇà ȸéÀ» º¸¸é ¹öÅؽº ¼ÎÀÌ´õ¿¡ ³Ñ±ä°Ç ¸î°³ ¾ÈµÇÁö¸¸ Çȼ¿¼ÎÀÌ´õ·Î ³Ñ¾î¿À±âÀü¿¡ º¸°£ÀÌ µÇ¾î ºÎµå·´°Ô º¸ÀδÙ. Æò¸éÀ» left 1000, right 1000, top 1000, bottom 1000 »çÀÌÁî·Î ¸¸µç´Ù. 2000X2000 »çÀÌÁîÀÇ Æò¸éÀ» ¸¸µç´Ù. bool RenderInit()
{ float fSizeX = 1000.0f; float fSizeY = 1000.0f; CUSTOMVERTEX vertex[4]; // Create the geometry vertex[0].x = -fSizeX/2; vertex[0].y = -fSizeY/2; vertex[0].z = 0.0f; vertex[0].nx = 0.0f; vertex[0].ny = 0.0f; vertex[0].nz = -1.0f; vertex[1].x = -fSizeX/2; vertex[1].y = fSizeY/2; vertex[1].z = 0.0f; vertex[1].nx = 0.0f; vertex[1].ny = 0.0f; vertex[1].nz = -1.0f; vertex[2].x = fSizeX/2; vertex[2].y = -fSizeY/2; vertex[2].z = 0.0f; vertex[2].nx = 0.0f; vertex[2].ny = 0.0f; vertex[2].nz = -1.0f; vertex[3].x = fSizeX/2; vertex[3].y = fSizeY/2; vertex[3].z = 0.0f; vertex[3].nx = 0.0f; vertex[3].ny = 0.0f; vertex[3].nz = -1.0f; g_dxDevice->CreateVertexBuffer(4 * sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_MANAGED, &g_VertexBuffer, NULL); VOID* pVertices; g_VertexBuffer->Lock (0, sizeof(vertex), &pVertices, 0); memcpy (pVertices, vertex, sizeof(vertex)); g_VertexBuffer->Unlock(); return true; } Á¤Á¡ÀÇ ¿ùµå À§Ä¡¸¦ Çȼ¿ ¼ÎÀÌ´õ·Î ³Ñ±ä´Ù. VSOutput VsMain( VSInput input )
{ VSOutput output; output.pos = mul( float4(input.pos,1), matWVP ); output.wpos = mul( float4(input.pos,1), matWorld ); output.nor = input.nor; return output; } ¿ùµå À§Ä¡´Â º¸°£µÇ¾î ³Ñ¾î¿Â´Ù. Ä®¶ó·Î Ç¥½ÃÇϱâ À§ÇØ 0 ~ 1 »çÀÌ °ªÀ¸·Î ¸¸µé±â À§ÇØ 1000À¸·Î ³ª´²ÁØ´Ù. PSOutput PsMain(PSInput
input)
{ PSOutput output = (PSOutput) 0; //float3 nor = normalize(input.nor); float4 pos = float4(input.wpos,1); pos.x = pos.x/1000.0f + 0.5f; output.color = pos.rrra; return output; } HLSLÀÇ Àüü ÄÚµå´Â ´ÙÀ½°ú °°´Ù. // world * view * projection
float4x4 matWVP; float4x4 matWorld; struct VSInput { float3 pos : POSITION; float3 nor : POSITION; }; struct VSOutput { float4 pos : POSITION; float3 wpos : TEXCOORD0; float3 nor : TEXCOORD1; }; struct PSInput { float3 wpos: TEXCOORD0; float3 nor: TEXCOORD1; }; struct PSOutput { float4 color : COLOR; }; VSOutput VsMain( VSInput input ) { VSOutput output; output.pos = mul( float4(input.pos,1), matWVP ); output.wpos = mul( float4(input.pos,1), matWorld ); output.nor = input.nor; return output; } PSOutput PsMain(PSInput input) { PSOutput output = (PSOutput) 0; //float3 nor = normalize(input.nor); float4 pos = float4(input.wpos,1); pos.x = pos.x/1000.0f + 0.5f; output.color = pos.rrra; return output; } technique MeshTech { pass P0 { VertexShader = compile vs_3_0 VsMain(); PixelShader = compile ps_3_0 PsMain(); } }; ´Ù¿î·Îµå : dx9_shader.zip Âü°í) https://jidon333.github.io/blog/Rendering-pipeline https: //bkjcr.tistory.com/entry/¼ÎÀÌ´õ-ÆÛ-Çȼ¿-¶óÀÌÆÃ-per-pixel-lighting Ã¥: °ÔÀÓ ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ 3Â÷¿ø ±×·¡ÇȽº / È︪°úÇÐÃâÆÇ»ç / ±Û¾´ ÀÌ - ÇÑÁ¤Çö 125page |