2012-01-17 2 views
0

나는 렌더링 원숭이와 HTC Desire HD에서 완벽하게 잘 작동하는 가장자리 감지 쉐이더를 가지고 있습니다. 그러나, 내 LG 3D P920에서 작동하지 않습니다. 다음은 쉐이더입니다.OpenGLSL 이상한 효과 - 원인 불명

즉, 중심 픽셀을 가져 와서 주변의 8 개 값을 뺍니다. 텍스처는 512x512입니다.

precision highp float; 

varying vec2 vTextureCoord; 

uniform sampler2D sTexture; 

vec4 edges(void) 
{ 
    const float offset = 1.0/512.0; 
    vec4 c = texture2D(sTexture, vTextureCoord); 
    vec4 edge = texture2D(sTexture, vTextureCoord + vec2(-offset, -offset)) + 
    texture2D(sTexture, vTextureCoord + vec2(-offset, 0.0)) + 
    texture2D(sTexture, vTextureCoord + vec2(-offset, offset)) + 
    texture2D(sTexture, vTextureCoord + vec2(0.0, offset)) + 
    texture2D(sTexture, vTextureCoord + vec2(offset, offset)) + 
    texture2D(sTexture, vTextureCoord + vec2(offset, 0.0)) + 
    texture2D(sTexture, vTextureCoord + vec2(offset, -offset)) + 
    texture2D(sTexture, vTextureCoord + vec2(0.0, -offset)); 

    return 8.0 * (c + -0.125 * edge); 
} 

void main() { 
    gl_FragColor = edges(); 
} 

이제 PC와 Desire HD에서 색이 지정된 가장자리가 강조 표시된 주로 검은 색 이미지로 표시됩니다. 그러나 LG 장치에서는 과다 노출 이미지로 표시되지만 노이즈는 상당히 있습니다.

정확도 문제가있는 것처럼 느껴졌 고 정밀도를 높이려고 시도했으나 시도 할 대상이 무엇인지 또는 그 일을 올바르게 수행했는지 알 수 없습니다.

이것은이 쉐이더와 관련이 없으며,이 장치에는 노이즈가 있지만 다른 장치에는 노이즈가있는 것으로 보이는 조명 쉐이더가 있습니다.

나는 최종 값을 너무 고정하려고 시도했다.

답변

1

전보 문제입니다. PowerVR의 문서에 따르면 sampler가 더 높은 정밀도로 지정되지 않으면 texture2D가 lowp 데이터를 반환합니다. 그러나 플로트 텍스처에서만 그렇게 할 수 있습니다.

vec4 edge = texture2D(sTexture, vTextureCoord + vec2(-offset, -offset)); 
edge += texture2D(sTexture, vTextureCoord + vec2(-offset, 0.0)); 
edge += texture2D(sTexture, vTextureCoord + vec2(-offset, offset)); 
edge += texture2D(sTexture, vTextureCoord + vec2(0.0, offset)) ; 
edge += texture2D(sTexture, vTextureCoord + vec2(offset, offset)) ; 
edge += texture2D(sTexture, vTextureCoord + vec2(offset, 0.0)); 
edge += texture2D(sTexture, vTextureCoord + vec2(offset, -offset)); 
edge += texture2D(sTexture, vTextureCoord + vec2(0.0, -offset)); 

lowp vec4 edge =... 내가 이전에보고 된 문제를 노출 :

그래서 대신 샘플러에 정밀도 흐름이 완만이 원하는 효과를 가지고있다.

P. 이 채널에 필요한 채널 만 가져 와서 최적화해야한다는 것을 알고 있습니다. .rgb