2012-06-22 3 views
1

픽셀 맵 데이터가 1 ​​채널, 8 비트 있습니다. 픽셀 맵 너비와 높이가 있습니다.GLSL sampler2DRect 및 단일 채널 (GL_RED) 데이터

조각 쉐이더에 pixmap 데이터를 제출하려고합니다. 나는 ogl3과 VAO 및 VBO를 사용하고 있습니다.

내 설정 :

glGenTextures(1, &texture); 
glBindTexture(GL_TEXTURE_RECTANGLE, texture); 
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, data); 
glGenVertexArrays(1, &vao); 
glBindVertexArray(vao); 
glGenBuffers(1, &vbo); 
glBindBuffer(GL_ARRAY_BUFFER, vbo); 
glBufferData(GL_ARRAY_BUFFER, ..., vertices, GL_STATIC_DRAW); 
...create program... 
glUseProgram(program); 
glUniform1i(glGetUniformLocation(program, "image"), 0); 
glDrawArrays(GL_TRIANGLE_FAN, 0, ...); 

그리고 조각 쉐이더 :

uniform sampler2DRect image; 

varying vec2 varying_texcoord; 

void main() { 
    vec4 sample = texture2DRect(image, varying_texcoord); 
    gl_FragColor = vec4(1.0, 0.0, 0.0, sample.a); 
} 

gl_FragColor 그러나 sample.a 항상 것 같다, 픽셀 빛과 sample.a의 가치를 따라 어두운 붉은 페인트한다 1.0 - 나는 순수한 빨간색 # ff0000을 얻고 있습니다. 문제는 glTexImage2D에 있다고 생각합니까?

프로그램 및 데이터가 유효하다고 가정하십시오.

답변

4

나는 당신이 찾고있는 대답이 glTexImage2D에 대한 문서에 있다고 믿습니다. 각 요소 단일 빨간 component.The GL입니다 부동 소수점으로 변환 알파에 대한 녹색, 청색, 1 0을 부착 elementby RGBA로 조립 각각의 구성 요소는 다음이다 : 그것은

는 "GL_RED 말한다. 부호가있는 스케일 계수 GL_c_SCALE을 곱하고, 부호가있는 바이어스 GL_c_BIAS에 더하고 범위 [0,1]에 고정시킨다. "

당신은 항상 당신은 질감이 실제로 데이터를 포함하는 구성 요소를 사용할 필요가 1입니다 .A 구성 요소에 대한 요구하고

- 희망이 도움이

.R입니다!

1

질문은 매우 오래된 것이지만 답변은 다른 사람들에게 도움이 될 수 있습니다.

sampler2DRect을 사용하는 경우 실제 픽셀 좌표를 사용해야합니다. 버텍스 쉐이더에서 들어오는 텍스처 좌표를 varying_texcoord으로 복사했다고 가정합니다.

vec4 sample= texture(image, coords); 
: 다음 좌표를 통과

vec2 coords = varying_texcoord * imageSize(image); 

: 이렇게하면

, 당신은 좌표를 계산하기 위해 필요