2012-02-03 4 views
1

개체가 너무 많지만 마우스가 움직이는 개체 중 하나를 "빛나게"(신속하게 색을 변경)하고 싶습니다.OpenGL : 많은 작은 VBO가 괜찮습니까?

이렇게하는 한 가지 방법은 각 개체에 고유 한 VBO가 있어야합니다. 색상 배열이 없습니다. 그렇다면 나는 약 20 개의 쿼드로 각각 1000 개의 VBO를 가질 것입니다 ... 그리고 선택된 오브젝트라면 glColor3f (blah, blah, blah)를 호출 할 것입니다. 그렇지 않으면 기본 색상이됩니다.

또 다른 방법은 모두 하나의 큰 VBO에 포함시키는 것입니다. 색상 배열이 있습니다. 그런 다음 glBufferSubDataARB와 같은 작업을 색상 배열에 적용하여 하나의 객체를 매우 밝게 만듭니다.

더 좋은 이유는 무엇입니까? 두 가지 방법이 모두 나쁘다면 다른 방법을 제안하십시오.

답변

6

아시겠습니까? 색상 배열을 잊어 버리십시오. 색상 배열은 아무 의미가 없습니다. 왜냐하면 정점마다 다른 색상이 아니고 전체 객체 그룹에 대해 색상이 없기 때문입니다.

모든 정점 데이터를 색상 데이터없이 단일 VBO에 넣습니다.

그리고 색상 (또는 객체 그룹)을 통해 루프는, 각각에 대해 당신은 firstcount 매개 변수는 해당 색상의 객체에 속하는 정점의 수와 일치 glColor3fglDrawArrays를 호출 할 수 있습니다.

고정 기능 파이프 라인에서 언젠가 셰이더로 이동할 때 glColor3fglUniform3f으로 바꿉니다.

+0

고마워; 이게 가장 의미가 있으며 내 생각이 얼마나 제한적 이었는지 알게 해줍니다. – pete

0

분명히 더 큰 VBO입니다. 그 이유는 간단합니다. VBO가 많은 경우 각 그리기 호출이 발행되기 전에 각 VBO를 버퍼에 바인딩해야합니다.

편집 : 여러 VBO를 사용하고 싶었던 이유를 알고 나도 궁금해합니다. 셰이더에서 색상 변수를 균일 한 변수로 전달하지 않는 이유는 무엇입니까?

+0

"유니폼 변수"또는 셰이더 코드에 익숙하지 않습니다. 셰이더 코드를 파헤쳐 야할까요? – pete

+0

그럼 완벽한 튜토리얼 라인이 있습니다. "현대적인"(ver 3.0 ++) OpenGL 방식을 사용하는 방법을 설명합니다. http://www.arcsynthesis.org/gltut/ – Lefteris

0

몇 가지 색상이 다양합니까? 한 번에 모두 VBO에 넣을 수 있으며, 각 프레임에 대해 선택한 객체에 대해 VBO의 다른 부분을 선택하려면 glColorPointer을 사용하면됩니까? 오프셋을 VBO로 변경하면 다른 버퍼를 바인딩하거나 버퍼에 새 데이터를 업로드하는 것보다 더 효율적입니다.

본질적으로 나는 일반적인 선택되지 않은 객체를 그려 넣고 glColorPointer을 호출하여 강조 표시 색상을 선택한 다음 선택한 객체를 그리고 나서 glColorPointer을 호출하여 VBO 오프셋을 다시 가져온 다음 나머지 객체를 그립니다.

모든 정점 및 색상 데이터가 단일 VBO에 있기 때문에 단일 호출로 모든 객체를 렌더링해야한다는 의미는 아닙니다.

+0

하나의 오브젝트가 빛나고 다른 오브젝트가 기본 색상이되기 때문에 효과가 있는지 확실하지 않습니다. – pete

+0

@Peter : 어떤 그리기 기능을 사용하고 있으며 얼마나 많은 오브젝트가 있습니까? 당신은 한 번의 전화로 그릴 수 있습니까? –

+0

벤의 제안은 그래픽 메모리에 공간이 있다고 가정 할 때 가장 적합합니다.드로잉하는 객체의 수가 너무 크지 않다면 VBO에서 한 번만 색을 사용하고 한 번만 "글로우"색을 사용하고 도면 호출을 호출하면 적절한 VBO 인덱스를 선택할 수 있습니다. 일반 오브젝트 또는 광선 오브젝트. – Lefteris

관련 문제