2014-11-12 3 views
0

나는 검은 색 배경에 흰색 모양의 매우 간단한 텍스처를 가지고 있고, 나는 소스 텍스처를 변경하지 않고, 흰색 부분에 대해 서로 다른 색상을 지정할 수있는 기능을 원하는 :같은 질감을 다른 색상으로 렌더링하려면 어떻게해야합니까?

enter image description here

인가 거기 libgdx에서 그렇게 할 수있는 기본 제공 방식이나 맞춤 셰이더를 작성해야합니까? (그렇다면 가장 좋은 방법은 무엇입니까?)

참고 : 저는 3D api를 사용하고 있습니다. 제 질문은 ModelBatch, Materials의 컨텍스트에 있으며, 어떻게 3D 지오메트리를 렌더링하는 데 사용 되는지요.

+0

'SpriteBatch # setColor'를 사용하면 모든 텍스처를 색칠 할 수 있습니다. 이 'SpriteBatch'로 렌더링됩니다. 즉, 흰색은 옅은 색이되고 검은 색은 검은 색으로 유지되고 다른 모든 색은 둘 모두의 혼합이됩니다. 'PixMap'으로 각 픽셀을 조작하고 그것으로부터'Texture'를 생성 할 수있게하는 것도 가능합니다. 'TextureAtlas'를 사용한다면'PixMap'에서 만든'Texture'로 작업한다면 장점을 잃을 것입니다. – Springrbua

+0

@Springrbua 태그가 암시 하듯이 3dpi를 사용하고 있으므로 "SpriteBatch"가 없습니다. ModelBatch를 사용하여 모델 인스턴스를 포함 된 재질로 그립니다. –

+0

오, 미안하지만, 나는 그것을 보지 못했습니다. 원래'Model'과 다른'ModelInstance's에 영향을주지 않으면 서'ModelInstance'의'Material'을 변경할 수 있습니다. 그래서 당신은 녹색 또는 파란색으로 흰색 '재료'를 전환 할 수 있습니다. 아마도 ModelInstance 위에 반투명 'Material'을 추가하고 블렌딩을 사용하면 흰색 부분에 색을 칠할 수도 있습니다. 또한'PixMap'을 사용하는 방법이 가능해야합니다. 그 중 '텍스쳐'를 만들어서 '재질'로 사용할 수 있습니다. – Springrbua

답변

1

소재에 TextureAttribute.Diffuse 및 ColorAttribute.Diffuse가있는 경우 텍스처에서 파생 된 색상 값에 default fragment shader에서 볼 수있는 것처럼 color 속성에 정의 된 값이 곱해집니다 :

#elif defined(diffuseTextureFlag) && defined(diffuseColorFlag) 
    vec4 diffuse = texture2D(u_diffuseTexture, v_diffuseUV) * u_diffuseColor; 

그래서, 저의 경우는 단순히 색 특성 값을 설정할 수 있고, 즉, 원하는 결과를 생성 할 것이다 - 영 (검정)를 곱한 때문에, 텍스처의 검은 부분은 변하지 것이다> X에 의해 0이됩니다; 텍스처의 흰색 부분은 색상 속성을 통해 설정된 색상으로 바뀝니다. 1 (흰색)에 X를 곱하면 X가됩니다.

관련 문제