2012-04-02 6 views
1

WebGL에 익숙하지 않습니다. (OpenGL에서 같은 문제가 발생한다고 생각합니다.) 버텍스와 프래그먼트 셰이더를 사용하여 객체를 렌더링하고 있습니다.webgl 쉐이더 및 텍스처 필터

In vertex shader, amongst other things: 

attribute vec4 aVertexColor; 
varying vec4 vColor; 

................. 
vColor = aVertexColor; 
.................. 

In shader color: 

varying vec4 vColor; 

........... 
gl_FragColor = vColor; 

지금이 잘 작동 : 기본적으로 모든 쉐이더 할 단계 때문에, 정점의 입력 색상을 얻을 그냥 조각 때까지 변경되지 통과입니다. 그러나 내가 볼 수있는 것에서 파편에 대한 보간은 선형으로 기본 설정되어 있으며 가장 가까운 것으로 바꾸고 싶습니다. ; 이제 내가 무엇을 노력하고하는 것은하는 것입니다 :

gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); 

을하지만 이것은 내가 지금까지 절대적으로 아무것도 변경하지 않는, 예를 들어 gl.LINEAR으로 gl.NEAREST을 변경하더라도 아무런 효과가없는 것 같다 나는 말할 수있다. 셰이더가 어떻게 든 어떤 것을 덮어 씁니다. 그래서 나는 원하는 효과를 얻지 못합니다. result image

이제 나는 결과를 첨부했습니다. 이제 제가 목표로 삼는 것은 삼각형을 다른 색상의 3 개 영역 (꼭짓점과 동일)으로 만드는 것입니다. 따라서 제 경우에는 ~ 1.3 파랑, ~ 1.3 녹색, ~ 1.3 빨강을 목표로합니다. 어떤 힌트? 여기

내가 가져올 것입니다 :

Desired result

답변

1

이 가능합니다. 다양한 값이 항상 보간됩니다. 가장 가까운 값을 사용하도록 무시할 수 없습니다. 원하는 결과를 얻으려면 3 개의 다각형을 별도로 그려야합니다.

아주 특별한 경우에 픽셀 쉐이더를 사용하여 RGB의 최대 구성 요소를 찾아서 1로 설정하고 다른 두 구성 요소를 0으로 설정할 수 있지만 다른 색상에서는 작동하지 않습니다.

+0

입력 해 주셔서 감사합니다. 나는 그때 내 문제에 대한 다른 해결책을 찾아야 할 것이다. :) – Bogdan

2

난 당신이 Nearest Filtering 주제를 오해 생각합니다. 텍스처를 사용하면 인접 픽셀 색상과 혼합되지 않고 가장 가까운 텍스처 픽셀의 색상이 선택됩니다. 그러나 당신의 접근 방식을 사용하여 정점 사이에 블렌드 색상이 아닌 일정한 색상을 유지하는 데 도움이되지는 않습니다. 나는 당신이 원하는 것이 아래와 같을 것이라고 생각합니다. 당신은 내가 생각하지 않는다 원하는 것은

How to get a flat, non-interpolated color when using vertex shaders

+0

입력 해 주셔서 감사합니다. 나는 그것이 틀렸다고 생각하지만, 당신이 제공 한 링크가 도움이 될 것이라고는 생각하지 않습니다. 나는 각기 다른 색깔의 선을 원하지 않는다. 달성하고자하는 것을 시각화하여 답변을 업데이트했습니다. – Bogdan