2012-10-10 3 views
10

OpenGL을 사용하여 3D 점 구름 표시에 대한 몇 가지 방향이 필요합니다 (vs2008). 나는 질감으로 3d 점 구름을 표시하려고합니다. 나는 각 점의 x, y, z를 나타내는 3 차원 배열 (각각 1024x512 크기)을 가지고있다. 내가x, y, z 2 차원 배열에서 OpenGL 3D 점 구름 렌더링

glBegin(GL_POINTS); 
for(int i=0; i<1024; i++) 
{ 
    for(int j=0; j<512; j++) 
    { 
     glVertex3f(x[i][j], y[i][j], z[i][j]); 
    } 
}  
}  
glEnd(); 

으로 궤도에라고 생각 지금이 버퍼 (내가 생각하는) 모든 정점을로드 그러나 여기에서 나는 진행하는 방법을 잘 모르겠습니다. 아니면 완전히 입니다. 여기이 잘못되었습니다.

그런 다음 3D 점 구름과 표시에서 텍스처로 사용하려는 색 데이터 (0-255의 값)가 포함 된 다른 2D 배열 (크기가 동일한)이 있습니다.

+0

각 지점마다 RGB가 없으므로 glColor3 * (r, g, b)를 사용할 수 없습니다. 마지막 점 (0-255 값)을 3D 포인트 클라우드의 텍스처로 사용하려고합니다. glBegin (GL_POLYGON)에서 메쉬 만들기를 제안합니다. 또 다시 질문은 제가 위에있는 것에서 발전하는 방법입니다. 또는 나는 완전히 잘못된 방향으로 가고 있습니다. – user1733628

+0

위의 코드는 기본적으로 3 개의 좌표 배열에서 점 구름을 그립니다. 채워지는 실제 "버퍼"가 없습니다. 직접 모드로 그립니다. 색상의 경우 : 이해할 수 있듯이 정점 당 하나의 부호없는 바이트 값이 있습니까? 따라서이 값들이 어떤 색을 나타내는 방법을 정의해야합니다. 당신은 강도로 그들을 사용할 수 있습니다 또는 팔레트, 또는 완전히 다른 무언가를 사용할 수 있습니다. – derhass

답변

2

포인트 드로잉 코드는 그대로입니다.

(장기간, 뷰를 회전 할 때 이러한 점을 반복적으로 그려야하는 경우 성능 문제가 발생할 수 있습니다.) 3 배열의 데이터를 x, y, z 값과 함께 1로 다시 배열합니다. 서로간에 더 빠른 정점 배열/VBO를 사용할 수 있습니다. 그러나 지금은 파손되지 않은 경우 고치지 마십시오.

점의 색상을 지정하려면 각 glVertex 앞에 glColor가 있어야합니다. OpenGL glVertex에서는 느슨하게 말해서 완전한 꼭지점이라는 것을 의미하기 때문에 반드시 있어야합니다. 데이터를 점군으로 묘사 했으므로 glBegin을 GL_POLYGON으로 변경하지 말고 GL_POINTS로 남겨 두십시오.

일반적으로 1 바이트 색상 색인 값을 가진 다른 배열이 있습니다. 당신은 검은 색에서 흰색으로 변하는 점을 표시해야하는

glColor3ub(color[i][j], color[i][j], color[i][j]); 

와 그레이 스케일 수준으로 그것을 사용하여 시작할 수 있습니다.

각 포인트의 실제 색상을 얻으려면 색상 룩업 테이블이 필요합니다. 데이터와 함께 제공되는 색상 표나 작성중인 색상 표가 있다고 가정합니다. 그것은

static GLfloat ctab[256][3] = { 
    1.0, 0.75, 0.33, /* Color for index #0 */ 
    ... 
}; 

같은 것을 선언

glColor3fv(ctab[color[i][j]]); 

으로는 glVertex 전에 사용해야 I했습니다 사용되는 OpenGL을 요즘 내부적으로 사용하는 것 때문에 포인트 색상을 떠. 색상에 0..255 값을 선호하는 경우 배열을 GLubyte로 변경하고 glColor3fv를 glColor3ub로 변경하십시오.

희망이 도움이됩니다.

관련 문제