Vertex Buffer Object 로 3D 영상을 그리는 프로그램을 작성하고 있는데요.
Grayscale 영상을 읽어서 일정 이상의 값을 Vertex 로 저장해서 display 하는 방식인데
color 값을 구할 때, RGB 값을 동일하게 넣어서 회색으로 사용하려고 하는데
위 그림처럼 노이즈 같은게 생기네요.
Color 값 설정은 건 아래 코드 밖에 없는데
color[*d_Vertex_Index] = make_float4(c,c,c,0.1f);
혹시 이런 현상에 대해 아시는 분 계시면 조언 좀 부탁드려요.
OpenGL 처음 하는데 어렵네요..
드로우 코드는
void DrawGLScene()
{
// cutStartTimer(timer);
// run CUDA kernel to generate vertex positions
runCuda();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(translate_x, translate_y, translate_z);
glRotatef(rotate_x, 1.0, 0.0, 0.0);
glRotatef(rotate_y, 0.0, 1.0, 0.0);
glBindBuffer(GL_ARRAY_BUFFER, vbo_pos);
glVertexPointer(3, GL_FLOAT, 0, 0);
glEnableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, vbo_color);
glColorPointer(4, GL_FLOAT, 0, 0);
glEnableClientState(GL_COLOR_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDrawArrays(GL_POINTS, 0, h_Vertex_Count-1);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
SwapBuffers(dc->m_hDC);
}
해결했네요.
좀 어이 없긴한데
color[*d_Vertex_Index]
여기에서
[*d_Vertex_Index] 그냥 지역변수 만들어줘서 넣어주니까되네요
unsigned int Index = *d_Vertex_Index;
color[Index] ...
요렇게요.
color 가 OpenGL 버퍼라서 문제가 되나 보네요.
제 생각으론 CUDA 를 사용하다 보니까
Buffer 가 GPU moemory 만 사용하다 보니까
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
제가 그리는 3차원 공간 Vertex 외의 공간에
쓰레기 같은 애들이 남아서 저런 것 같은데
선뜻 방법을 잘 못찾겠네요.