2013-12-19 3 views
1

나는이 너트를 스스로 깨뜨릴 수없는 것처럼 보입니다. 그리고 내가 비어있는 곳에 올 때, 응답을 찾는 지역 사회로 향할 때가되었다고 생각했습니다.hlsl의 하프 타입의 아래 첨자

내가 작업중인 프로젝트에 약간의 코드가 있는데, 매우 단순화 된 버전을 제공 하겠지만 개념을 보여줄 수 있어야합니다.

//hlsl code 
... 
ps_main(...) { 
    half mask = function_calculating_mask_and_returning_half(); 
    half3 color = condition ? a_previously_defined_half3 : mask.rrr; 
} 

마지막 줄은 여기에 특히 mask.rrr 그것이 정말 무엇을 하는가, 나를 혼란 무엇인가? 내가 이해하는 한 그것은 half3 (mask, mask, mask)을 반환 할 것이지만, 나는 그 값이 매우 높다고 생각하는데, 만약 내가 mask.r 또는 단순히 mask이라고 말하면 그것을 변경하면 훨씬 낮은 값의 결과를 얻을 수있다. (내가 말할 수있는 한) .

half3(mask^3, mask^3, mask^3)과 같은 기능을 수행 할 수 있습니까? 그것이 결과를 볼 때 어떻게 보일까요.

아무리해도 코드가 작동하는 방식과 half.rrr으로 서브 스크립트하는 방법에 대한 제안이나 설명에 감사하며 어떤 첨자가 가능한지에 대한 참조는 멋진 크리스마스 선물이 될 것입니다. : P HLSL 스칼라 종류

+0

DX 및 쉐이더 모델 버전은 무엇입니까? 이 쉐이더는 정상적으로 작동합니까? – Netherwire

+0

저는 실제로 특히 hlsl에 조금 익숙하며 일반적으로 그것을 사용하는 렌더러입니다. 그러나 DX9 이상을 대상으로합니다. 그것은 작동하고 그것은 무엇을 기대하는 것처럼 보입니다. 유일한 것은이'color'가 지연 단계에서 specularity를 ​​채색하기 위해 사용된다는 것입니다. 그리고'mask.rrr'을 사용할 때 초고속의 specularity를 ​​얻습니다. 그래서 나는 'mask.rrr '이 값의 배수와 같은 것을한다고 의심하고 있습니다. 그래서 주된 부분은'mask.rrr'이라는 하위 첨자를 이해하는 것입니다. – qrikko

답변

1

같은 floathalf 유일한 .x (또는 .r) 성분이 하나의 차원 벡터이다. 이 구독은 일반적으로 유형 캐스팅에 사용됩니다.

float s = .5; 
float3 v1 = s.xxx; // v is (0.5, 0.5, 0.5), or even 
float3 v2 = 0.5.xxx; // :) 

첫 번째 구성 요소를 사용하는 벡터에서 스칼라로의 암시 적 변환도 있습니다. 구성 요소가 RGBA (또는 XYZW)와 같은 저장된다는 것을 기억

float3 v = {0.5, 0.6, 0.7} 
float s1 = v; // s1 is 0.5 (implicit conversion) 
float s2 = v.x // s2 is 0.5 (explicit conversion) 
float s3 = v.xxx /* s3 is 0.5 because we've just created float3(v.x, v.x, v.x) 
        and then implicitly taken it's X component, which is v.x */ 

그것이 작동하는 방법이있다. 코드 수정을 시도하십시오.

half3 color = condition ? a_previously_defined_half3 : half3(mask, mask, mask) 

변경 사항이 없습니다.

+0

당신은 맞습니다, 물론, 나는 그것을 깨끗하게하는 것이 기쁩니다. 나는 비슷한 언어로 일해 왔지만 전문가와는 거리가 멀다. 아마 내 결과에 대한 이유가 곧'.xxx '부분과 아무 관련이 없다는 것을 알게 될 것이지만 실제로는 사용하지 않았다고 생각한 멋진 방정식을 사용하고 있기 때문에 모든 것이 다 익숙해진다. 코드에 대한 오해와 함께 일반적으로'hlsl'에 대한 지식이 부족합니다. 예상대로 작동하게하고, 그 부분이 어떻게 작동하는지 실제로 이해할 수 있기 때문에 답을 표시했습니다. 감사! – qrikko