그래서이 기술의 효율성에 대해서는 약속하지 않지만 텍스트 렌더링이 내 프로그램의 속도를 늦추는 것은 내가하는 일이고 저주받을 것입니다.
나는 데이터의 벡터 벡터와 업로드 된 데이터에 대한 포인터를 저장하는 약간의 숫자로 구성된 메시를 저장하기위한 전용 클래스를 가지고있다. 나는이 같은 OpenGL과 데이터를 업로드 :
다음
glBindBuffer(GL_ARRAY_BUFFER, position);
glBufferData(GL_ARRAY_BUFFER, sizeof(vec3) * data.position.size(), &data.position[0], GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, normal);
glBufferData(GL_ARRAY_BUFFER, sizeof(vec3) * data.normal.size(), &data.normal[0], GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, uv);
glBufferData(GL_ARRAY_BUFFER, sizeof(vec2) * data.uv.size(), &data.uv[0], GL_DYNAMIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * data.index.size(), &data.index[0], GL_DYNAMIC_DRAW);
이 그것을 그릴이 같은 이동 :
glEnableVertexAttribArray(positionBinding);
glBindBuffer(GL_ARRAY_BUFFER, position);
glVertexAttribPointer(positionBinding, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(normalBinding);
glBindBuffer(GL_ARRAY_BUFFER, normal);
glVertexAttribPointer(normalBinding, 3, GL_FLOAT, GL_TRUE, 0, NULL);
glEnableVertexAttribArray(uvBinding);
glBindBuffer(GL_ARRAY_BUFFER, uv);
glVertexAttribPointer(uvBinding, 2, GL_FLOAT, GL_FALSE, 0, NULL);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index);
glDrawElements(GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, NULL);
glDisableVertexAttribArray(positionBinding);
glDisableVertexAttribArray(normalBinding);
glDisableVertexAttribArray(uvBinding);
당신은 확실히 아래로 음색 수 있도록이 설정은 전체 본격적인 3D 엔진 설계 조금. 기본적으로, 나는 4 개의 버퍼, 위치, uv, normal, index를 가지고있다. 처음 두 개만 필요하기 때문에 나머지는 무시하십시오.
어쨌든 내가 텍스트를 그리려 할 때마다, 내가 보여준 첫 번째 코드 청크를 사용하여 데이터를 업로드 한 다음 두 번째 청크를 사용하여 데이터를 그립니다. 그것은 꽤 잘 작동하고, 그것은 매우 우아합니다. 다음 코드를 사용하여 텍스트를 그립니다.
vbo(genTextMesh("some string")).draw(); //vbo is my mesh containing class
질문이 있으시면 언제든지 문의하십시오.
UV 좌표가 올바른 위치에 설정되어있는 메쉬를 생성하는 함수를 만듭니다. 공원에서 산책하는 것이 아니라 너무 어렵지 않습니다. – BWG
@BWG "올바른 위치에 UV 좌표가 설정되었습니다."라는 말이 무슨 뜻인지 잘 모르겠습니다. 명확히하기 위해, 나는 문자/숫자를 초기에 렌더링 할 수 있도록 관리하지만 텍스쳐 좌표를 변경함으로써 텍스쳐 아틀라스를 사용하여 문자/숫자를 변경하려고합니다. – user3162904
"셰이더와 데이터를 그렇게 링크"라고 말하면, 그렇게하지 말아야합니다. 셰이더는 한 번만 설정하면되지만 새 문자를 그리면 메쉬의 데이터를 업데이트해야합니다. 또는 셰이더에 정수를 전달하고 텍스처 좌표를 생성 할 수 있습니다. – BWG