가장 간단한 방법은 GL_LINES로 그리려는 모든 선의 월드 포인트를 포함하는 VBO를 만드는 것입니다.
가장 쉬운 방법은 glDrawArrays를 사용하는 것입니다. 만약 (10.000s +) 사이에 선이 필요한 객체 쌍이 극단적 인 경우에는 VBO에 모든 점을 저장 한 다음 IBO (인덱스 버퍼)를 사용하여 VBO의 어떤 점이 선.
선 정점은 뷰 행렬에 의해 변형되어야합니다.
다음은 예입니다. GLuint vao, vbo;
// generate and bind the vao
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
// generate and bind the buffer object
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
struct Point{
float x,y,z;
Point(float x,float y,float z)
: x(x), y(y), z(z)
{}
};
// create two points needed for a line. For more lines, just add another point-pair
std::vector<Point> vertexData;
vertexData.push_back(Point(-0.5, 0.f, 0.f));
vertexData.push_back(Point(+0.5, 0.f, 0.f));
// fill with data
size_t numVerts = vertexData.size();
glBufferData(GL_ARRAY_BUFFER, sizeof(Point)*numVerts, &vertexData[0], GL_STATIC_DRAW);
// set up generic attrib pointers
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, numVerts*sizeof(Point), (char*)0 + 0*sizeof(GLfloat));
// "unbind" vao
glBindVertexArray(0);
// In your render-loop:
glBindVertexArray(vao);
glDrawArrays(GL_LINES, 0, numVerts);
당신이 glBufferData을의 표준 : : 벡터를 업데이트, 런타임 동안 더 많은 포인트 쌍을 추가 VBO를 바인딩하고 호출해야합니다.
많은 라인 (100s, 1000s)을 원한다면 포인트를 유니폼으로 보내는 것이 비효율적입니다. 또한 어떻게 그 선을 그립니까? 방법 (각 픽셀을 테스트하는 lines_strips 또는 fragement shader를 출력하는 geometry shader)이 있지만, 이것은 불필요하게 복잡합니다. – torbjoernwh
좋아요, 배열을 사용해야하는 경우, 제발 그걸 어떻게 수행하는지에 대한 예제를 친절하게 제공해 주실 수 있습니까? –
다음은 같은 질문입니다. 고정 된 함수 GL : http://stackoverflow.com/questions/11593053/opengl-draw-line-between-two-elements – torbjoernwh