-V._41_42_43로 계산했으나,| 용어 | 설명 | 
|---|---|
| View Matrix (V) | 월드 → 카메라 좌표계로의 변환 행렬 | 
| World Matrix | 로컬 → 월드 변환 행렬 | 
| Inverse View Matrix (VInv) | View Matrix의 역행렬 (카메라의 월드 변환) | 
| CameraPosition() | 쉐이더에서 카메라 좌표를 반환하는 함수 | 
| Emissive | 물체 자체에서 방출되는 빛 효과 | 
MaterialDesc& desc = material->GetMaterialDesc();
desc.ambient  = Vec4(1.f);
desc.diffuse  = Vec4(1.f);
desc.specular = Vec4(1.f);
desc.emissive = Vec4(1.f);LightDesc lightDesc;
lightDesc.ambient  = Vec4(0.f);
lightDesc.diffuse  = Vec4(0.f);
lightDesc.specular = Vec4(0.f);
lightDesc.emissive = Vec4(1.f, 0.f, 0.f, 1.f); // 빨간색 EmissiveMeshOutput output;
output.worldPosition = input.position.xyz; // ❌ 오류!→ input.position은 Local 좌표이므로 여기에 World 변환이 필요하다.
output.position = mul(input.position, W); // 월드 좌표 계산
output.worldPosition = output.position.xyz; // ✅ 수정float4 PS(MeshOutput input) : SV_TARGET
{
    ComputeNormalMapping(input.normal, input.tangent, input.uv);
    float3 pos = CameraPosition(); // 카메라 좌표 출력용
    return float4(pos, 1);
}float3 CameraPosition()
{
    return -V._41_42_43; // ❌ 잘못된 카메라 좌표 추출
}_41_42_43는 -C•Right, -C•Up, -C•Look 내적값V = | R  U  L  0 |
    |            |
    | -C•R -C•U -C•L 1 |C는 카메라 위치, R은 Right, U는 Up, L은 Look 벡터-C가 아님 → 역행렬 필요cbuffer GlobalBuffer
{
    matrix V;
    matrix P;
    matrix VP;
    matrix VInv; // ✅ View 역행렬 추가
};
float3 CameraPosition()
{
    return VInv._41_42_43; // ✅ 정확한 카메라 위치
}struct GlobalDesc 
{
	Matrix V     = Matrix::Identity;
	Matrix P     = Matrix::Identity;
	Matrix VP    = Matrix::Identity;
	Matrix VInv  = Matrix::Identity; // ✅ View 역행렬 저장
};
void RenderManager::PushGlobalData(const Matrix& view, const Matrix& projection)
{
	_globalDesc.V     = view;
	_globalDesc.P     = projection;
	_globalDesc.VP    = view * projection;
	_globalDesc.VInv  = view.Invert(); // ✅ 역행렬 계산
	_globalBuffer->CopyData(_globalDesc);
	_globalEffectBuffer->SetConstantBuffer(_globalBuffer->GetComPtr().Get());
}-V._41_42_43 방식은 회전 성분까지 포함되어 잘못된 좌표를 반환하게 된다.CameraPosition() 함수를 통해 정확한 좌표를 사용해야 조명 계산이 일관성 있게 작동한다.