복잡한 배경을 렌더링하기 위해 여러 버텍스 배열 객체를 사용하는 렌더링 인프라가 있습니다. 각 정점 배열 객체는 자체적으로 바인드 된 버퍼, 포인터 및 속성 집합을 유지 관리합니다.여러 버텍스 배열 객체를 사용하는 렌더러에 깊이 버퍼를 소개합니다.
을 감안할 때 여러 배열이 어떻게 각각 별도의 배열 객체 렌더링 동안 동일한 깊이 버퍼를 사용하는 방식으로 깊이 버퍼링을 소개 않는, 렌더링에 대한 책임을 객체? 다른 말로하면, 어떻게하면 좀 더 글로벌 개념 인 것처럼 보이는 Vertex Array Objects (그리고 그 좋은 캡슐화 속성)와 깊이 버퍼링의 개념을 통일 할 수 있을까요?
내가 발견 한 모든 예제는 프레임 버퍼의 컨텍스트에서 깊이 버퍼를 사용하여 설명합니다. 애플은이 기술을 descibes here. 그렇다면 프레임 버퍼 레벨에서 깊이 버퍼링을 구현 한 다음 그 프레임 버퍼에 버텍스 배열 객체를 쓰는 기술이 있을까요? VAO와 깊이 버퍼링을 사용하는 예가 있습니까?
I는 정점 어레이 객체를 캡슐화하는 클래스를 가지며 이것은 (다양한 버퍼 포인터 및 속성을 설정해야)의 결합 방법이다.
void scene_GLBuffer::BindTriangles()
{
glBindVertexArrayOES(_mVertexArrayObject);
glGenVertexArraysOES(1, &_mVertexArrayObject);
// generate the buffer and configure the gl pointers for position and normal data
glGenBuffers(1, &_mVertexPositionNormalTriangles);
/* Bind and set up vertex position and normal data */
glBindBuffer(GL_ARRAY_BUFFER, _mVertexPositionNormalTriangles);
glBufferData(GL_ARRAY_BUFFER,
sizeof(crVertexPN)*_mPositionNormalTriangleData->size(),
_mPositionNormalTriangleData->data(),
GL_STATIC_DRAW);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE,
sizeof(crVertexPN), (void*)offsetof(crVertexPN,Position));
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE,
sizeof(crVertexPN), (void*)offsetof(crVertexPN,Normal));
glEnableVertexAttribArray(GLKVertexAttribNormal);
// generate the buffer and configure the gl pointers for color and alpha data
glGenBuffers(1, &_mVertexColorTriangles);
glBindBuffer(GL_ARRAY_BUFFER, _mVertexColorTriangles);
glBufferData(GL_ARRAY_BUFFER,
sizeof(crVertexC)*_mColorTriangleData->size(),
_mColorTriangleData->data(),
GL_DYNAMIC_DRAW);
glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_TRUE,
sizeof(crVertexC), (void*)offsetof(crVertexC,Color));
glEnableVertexAttribArray(GLKVertexAttribColor);
glBindBuffer(GL_ARRAY_BUFFER,0);
// generate the buffer and configure the gl pointers for triangle index data
glGenBuffers(1, &_mVertexIndexTriangles);
/* Bind and set up triangle index data */
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _mVertexIndexTriangles);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(bits32)*_mIndexTriangleData->size(),_mIndexTriangleData->data(), GL_STATIC_DRAW);
// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
glBindVertexArrayOES(0);
}
바인딩 후, 추첨 방법은 다음과 같이 구현됩니다 (이 그리기 방법은 각 버텍스 버퍼 오브젝트에 호출) :
void scene_GLBuffer::Draw()
{
glBindVertexArrayOES(_mVertexArrayObject);
glBindBuffer(GL_ARRAY_BUFFER, _mVertexPositionNormalTriangles);
glDrawElements(GL_TRIANGLES, _mIndexTriangleData->size(), GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArrayOES(0);
}
이 원활하게 작동 모든하지만 문제보고를 데 여기에 깊이 버퍼링이 들어갑니다.
고맙습니다! 그것은 내 마음 속의 관계를 풀어 놓을 먼 길을 갔다. –