2012-11-30 2 views
1

그래서 OpenGL에서 만든 객체 컬렉션이 있습니다. 그들은 각각 자신의 색깔을 가지고 있으며, 그들 중 일부는 그들에게 적용된 질감을 가지고 있습니다. 내가하고 싶은 일은 특정 색상이 화면에 도달하는 것을 중지하지만 여전히 변경할 수 있습니다. 체리 - 실제로 어떤 색을 그릴 지 선택할 수있는 방법이 있습니까?OpenGL에서 컬러 스크린 만들기

나는 카메라 앞에 반투명 평면을 넣으려고했으나 다른 색이 흘러 내리는 것을 멈추지 않습니다. 오히려 그것들은 단지 그것들과 혼합됩니다.

빨간색 객체 + 빨간색 화면 = 빨간색 객체

블루 객체 + 빨간색 화면 = 회색/검은 색/흰색 물체

보라색 객체 +를 :

이상적으로,이 그것이 어떻게 작동하는지입니다 빨간색 화면 = 빨간색 객체

-EDIT-

이 작업을 위해 무엇을하려고하는지 명확히하기 : 모든 개체의 RGB 값을 동일하게 유지하고 싶습니다. 하지만 화면에 그려지기 전에, 나는 어떤 오브젝트의 실제 값을 변경하지 않고 색상 값의 일부를 '제로 (zero)'하고 싶다.

빨간색 필터를 통과하는 RGB [255,150,200]를 가진 물체는 RGB 값 [255,0,0], 녹색 필터 [0,150,0] 및 파란색 필터 [0 , 0,200].

+0

'어떻게 작동 할까?'에 대한 설명은 매우 모호하게 보입니다.소스 및 대상 RGB (A)의 함수로 표현할 수 있습니까? –

+0

일부 RGB 값 예제로 질문을 편집했습니다. 바라건대 내 질문을 설명하는 데 도움이됩니다. –

+0

이것은 프래그먼트 쉐이더의 다소 단순한 작업입니다. – jaho

답변

1

glColorMask를 찾으십니까?

이 답변을 참조하십시오 : Render into a color channels without affecting other channels

나는 당신의 문제에 명확하지 않다,하지만이 선택한 색상 채널 IN/OUT 마스크 것 : R, G, B 또는 A


을 감안할 때

빨간색 필터를 통과하는 RGB [255,150,200]을 가진 물체는 RGB 값 [255,0,0], 녹색 필터 [0,150,0] 및 파란색 필터 [ 0,0,200]

glColorMask가 작동합니다.

glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); 
drawMyRedFilteredStuff(); 
// Return open gl state back to normal function 
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 

빨간색, 녹색, 파란색 또는 알파로 필터링해야하는 경우 정확히 찾고있는 것입니다.

나는 아직도 당신이하려는 것을 얻지 못하고 있습니까?

+0

glColorMask가주는 효과는 멋지지만, 내가 원하는 것은 아닙니다. 특정 색상 채널이 활성화 될 때까지 편집되지 않도록하는 것입니다. 내가 필요한 것은 화면에 특정 색상을 넣지 않으려면 OpenGL을 중지하는 것입니다. 내 장면에있는 객체의 수에 관계없이 RGB 구성 요소 중 두 개를 _eliminate_해야합니다. –

0

이것은 조각 쉐이더가 가장 잘 처리 할 수 ​​있다고 생각합니다. '필터'는 상수 값 인 경우에는 상기 필터 구성 요소가 0으로 설정되는 경우

uniform vec3 filter_rgb; 
in vec3 src_rgb; 

out vec4 dst_rgba; 

void main (void) 
{ 
    dst_rgba = vec4(min(filter_rgb, src_rgb), 1.0); 
} 

그래서, 대응하는 출력 요소도 역시 0이 될 것이며, 예를 들면, 균일로 설정할 수있다. 원하는 동작에 따라 clamp 함수는 min 함수보다 더 유용한 내장 함수 일 수 있습니다.

+0

쉐이더에 대해 이해 한 것으로부터 이것이 필요한 것입니다. 이런 식으로 프로그램을 구현하는 방법을 설명해 줄 수 있다고 생각하십니까? 프래그먼트의 빨간색 구성 요소를 칠하는 필터를 원한다면 어떻게하면 좋을까요? –

관련 문제