블로그 이미지
AndroProgramming

카테고리

분류 전체보기 (6)
잡담 (1)
게임 프로그래밍 (5)
Total2,836
Today0
Yesterday0

달력

« » 2018.08
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

공지사항

태그목록

N 모사 신입 공채에서 렌더링 관련된 질문들입니다. 하나씩 정리하도록 하겠습니다..


- 렌더링파이프라인에서 좌표변환과정을 설명하라

- 버텍스셰이더와 픽셀셰이더의 역할은

- 테셀레이션은

- DirectX10/11의 스펙이나 주요기술에 대해 설명하라

- Vertex stream

- 두벡터의 외적 풀이식

- 퐁셰이딩에서 조명식

- 고로셰이딩과 퐁셰이딩 차이

- 퐁셰이딩에서 Diffuse의 계산

- 카툰셰이딩은 어떤식으로

- 탄젠트 스페이스



*뽀너스

http://blog.naver.com/re4ever?Redirect=Log&logNo=10078864153

Posted by AndroProgramming


약간 요상헌 노말 맵핑을 한 오브젝트가 나왓내요 ^^?;; 왜 그런건지는 아래에서 하나씩 분석 해 나가면서 보도록 합시다..

---- vertex Shader ----

float4x4 matViewProjection;
float4x4 matView;

float4 LightPos;
float4 EyePos;

struct VS_INPUT 
{
   float4 Position : POSITION0;
   float2 TexCoord : TEXCOORD0;
   float3 Normal : NORMAL0;
   float3 Binormal : BINORMAL0;
   float3 Tangent : TANGENT0;
};

struct VS_OUTPUT 
{
   float4 Position : POSITION0;
   float3 ViewVec :   TEXCOORD0;
   float3 LightVec :  TEXCOORD1;
   float3 Normal :    TEXCOORD2;
   float3 HalfAngle : TEXCOORD3;
   float2 TexCoord : TEXCOORD4;
};

VS_OUTPUT vs_main( VS_INPUT Input )
{
   VS_OUTPUT Output;

   Output.Position = mul( Input.Position, matViewProjection );
   Output.TexCoord = Input.TexCoord;
   
   float3 ObjectPos = mul( Input.Position, matView);
   
   Input.Tangent = mul(Input.Tangent,matView);
   Input.Binormal = mul(Input.Binormal,matView);
   Input.Normal = mul(Input.Normal,matView);
   
   float3 ViewVec = EyePos - ObjectPos;
   Output.ViewVec.x = dot(ViewVec, Input.Tangent);
   Output.ViewVec.y = dot(ViewVec, Input.Binormal);
   Output.ViewVec.z = dot(ViewVec, Input.Normal);
   
   float3 LightVec = LightPos - ObjectPos;
   Output.LightVec.x = dot(LightVec, Input.Tangent);
   Output.LightVec.y = dot(LightVec, Input.Binormal);
   Output.LightVec.z = dot(LightVec, Input.Normal);
   
   Output.Normal = mul(Input.Normal, matView);
   
   Output.HalfAngle = Output.ViewVec + Output.LightVec;
   
   return( Output );
}


---- pixel shader ----

float4 Ambient;
float4 Specular;

sampler2D Texture0;
sampler2D Texture1;

struct PS_INPUT 
{
   float3 ViewVec : TEXCOORD0;
   float3 LightVec : TEXCOORD1;
   float3 NormalVec : TEXCOORD2;
   float3 HalfAngle : TEXCOORD3;
   float2 TexCoord : TEXCOORD4;
};

struct PS_OUTPUT 
{
   float4 Color : COLOR0;
};

PS_OUTPUT ps_main(PS_INPUT Input) 
{
   PS_OUTPUT Output;
   
   float3 BaseColor = tex2D(Texture0, Input.TexCoord);
   float3 Bumpmap = tex2D(Texture1, Input.TexCoord);
   
   Bumpmap = normalize( ( Bumpmap * 2.0f ) - 1.0f );

   float3 LightDir = normalize(Input.LightVec);
   float3 ViewDir = normalize(Input.ViewVec);
   float3 nNormal = normalize(Input.NormalVec);
   float3 HalfVec = normalize(Input.HalfAngle);
   
   float4 nDotl   = max(0,dot(Bumpmap, LightDir));
   
   float4 hDotn   = max(0,dot(Bumpmap, HalfVec));

   Output.Color.rgb = BaseColor * Ambient * 0.2
                  + BaseColor * nDotl
                  + Specular * pow(hDotn,60);
   Output.Color.a = 1.0f;

   return Output;
}

'게임 프로그래밍' 카테고리의 다른 글

RenderMonkey Tutorial - 05  (0) 2010.12.28
RenderMonkey Tutorial - 04  (0) 2010.12.26
RenderMonkey Tutorial - 03  (0) 2010.12.21
RenderMonkey Tutorial - 02  (0) 2010.12.21
RenderMonkey Tutorial - 01  (0) 2010.12.21
Posted by AndroProgramming


Blinn Phong 구현중..

---- Vertex Shader ----

VS_OUTPUT vs_main( VS_INPUT Input )
   VS_OUTPUT Output;

   Output.Position = mul( Input.Position, matViewProjection );
   
   float3 ObjectPos = mul( Input.Position, matView);
   
   Output.ViewDirection = EyePos - ObjectPos;
   Output.LightDirection = LightPos - ObjectPos;
   Output.Normal = mul(Input.Normal, matView);
   Output.HalfAngle = Output.ViewDirection + Output.LightDirection; //  Light Vector 와 ViewVector 를 이용해서 Half Angle 을 만듬
   
   return( Output );
}

---- Pixel Shader ----

float4 myColor;

struct PS_INPUT 
{
   float3 ViewVec : TEXCOORD0;
   float3 LightVec : TEXCOORD1;
   float3 NormalVec : TEXCOORD2;
   float3 HalfAngle : TEXCOORD3;
};

struct PS_OUTPUT 
{
   float4 Color : COLOR0;
};

PS_OUTPUT ps_main(PS_INPUT Input) 
{
   PS_OUTPUT Output;

   float3 LightDir = normalize(Input.LightVec);
   float3 ViewDir = normalize(Input.ViewVec);
   float3 nNormal = normalize(Input.NormalVec);
   float3 HalfVec = normalize(Input.HalfAngle);
   
   float nDotl   = max(0,dot(nNormal,LightDir));
   
   float hDotn   = max(0,dot(HalfVec,nNormal)); // Half Vector 를 Normal 과 연산한다! 가장 중요 

   Output.Color = myColor * 0.2
                + myColor * nDotl;
                + pow(hDotn,20);

   return Output;
}

'게임 프로그래밍' 카테고리의 다른 글

RenderMonkey Tutorial - 05  (0) 2010.12.28
RenderMonkey Tutorial - 04  (0) 2010.12.26
RenderMonkey Tutorial - 03  (0) 2010.12.21
RenderMonkey Tutorial - 02  (0) 2010.12.21
RenderMonkey Tutorial - 01  (0) 2010.12.21
Posted by AndroProgramming

최근에 달린 댓글

글 보관함

티스토리 툴바