[OPENGL] 다시 급 질문... 화면에 영상출력

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

Moderator: 류광

Locked
fantajeon
Posts: 8
Joined: 2003-08-04 22:56
Location: 우송대학교

[OPENGL] 다시 급 질문... 화면에 영상출력

Post by fantajeon »

제가 지금 입력된 영상의 red channel를 magnitude.fs을 통해서 2개의 텍스처에 결과를 저장하고 싶습니다.

1개는 에지신호, 다른 한개는 그냥 3개의 값을 더한 값....

에지신호는 GL_COLOR_ATTACHMENT0_EXT, 다른 신호는 GL_COLOR_ATTACHMENT1_EXT 에 각각 저장을 하였습니다. 그 다음 이런식으로 출력....

buffers[0] = GL_COLOR_ATTACHMENT0_EXT; ==> output_texture_id[1];
buffers[1] = GL_COLOR_ATTACHMENT1_EXT; ==> output_texture_id[2];
glDrawBuffers(2, buffers);


최종적으로 output_texture_id[1]하고 [2]중에 하나를 출력을 해보았습니다....


그런데, 이상한게, output_texture_id[1]은 화면에 검은색이 출력되는데, output_texture_id[2]는 원하던 결과대로 나왔습니다.

해당 소스는 http://ipl.cnu.ac.kr/pds/showimg.zip 입니다.

제발 무엇이 잘 못된건가요?


이소스에서 의하스러운 코드는 gl_FragData[0]은 검은색이 나오고, gl_FragData[1]은 잘 나온다는 것이죠...

에혀~ 정말 잘 모르겠습니다. 왜 그런건지...

Code: Select all

uniform sampler2D sampler0;
uniform vec2 tc_offset[9];

void main(void)
{
    float sample[9];

    for (int i = 0; i < 9; i++) {
        sample[i] = texture2D(sampler0, gl_TexCoord[0].xy + tc_offset[i]).r;
    }

    float horizEdge = (sample[2] + sample[5] + sample[8]) - (sample[0] + sample[3] + sample[6]);
    float vertEdge = (sample[0] + sample[1] + sample[2]) - (sample[6] + sample[7] + sample[8]);
    float mag = sqrt( horizEdge*horizEdge + vertEdge*vertEdge );
        
    float A = (sample[2] + sample[5] + sample[8]);
    float B = (sample[0] + sample[3] + sample[6]);
    gl_FragData[0] = vec4(horizEdge,0,0,1);
    gl_FragData[1] = vec4(0,B,0,1);
    gl_FragDepth = 0.0;
}


사실 어제 결과를 잘 보고나서, 오늘 소스를 백업하지 더 많은 코드를 수정하고 추가했더니...

안나와요~~ 에휴~~


도무지 원인을 모르겠어요... 코멘트라좀 달아주세요....
^^
fantajeon
Posts: 8
Joined: 2003-08-04 22:56
Location: 우송대학교

찾았습니다. 에혀~~

Post by fantajeon »

여전히, 에러는 엉뚱한 곳인 두군대에 있었습니다...


정말 ㅠㅠ

정수/정수를 해버려서, 결과값은 항상 0이 나오는 것이었죠.. 그러니 검은색 화면이 나왔습니다.

그리고, 또한가지...

Code: Select all

    
// sampler position setting
	int next = 0;
	for(int w=-1; w <=1; w++) {
		for(int h=-1; h <=1; h++) {
			_tc_offset[next][0] = (float)w/_width;
			_tc_offset[next][1] = (float)h/_height;
			next++;
		}
	}

Code: Select all

	glUseProgram(_magnitudeProgram);
	glUniform1i(getUniformLoc(_magnitudeProgram, "sampler0"), 0);
	glUniform2fv(getUniformLoc(_magnitudeProgram, "tc_offset"), 9, (GLfloat*)_tc_offset);
glUseProgram(_magnitudeProgram); 이후에 uniform parameter들을 셋팅을 해야하는 가 봅니다.
이전에는 순서를 뒤바뀌었었죠... ^^;


정말 한심한 곳에서 에러를 발견하다니 ㅋㅋㅋ :evil:
Locked