2010-05-14 1 views
3

프로젝트가 최적화 단계에 가까워지면서 Vertex Metadata를 줄이면 3D 렌더링의 성능이 크게 향상 될 수 있습니다.Vertex 및 Normal을 나타내는 GLshort를 사용하는 데 문제가 있습니다.

궁극적으로, 나는 주위에 검색하고 stackoverflow에서 다음과 같은 조언을 발견했습니다.

Using GL_SHORT instead of GL_FLOAT in an OpenGL ES vertex array

How do you represent a normal or texture coordinate using GLshorts?

Advice on speeding up OpenGL ES 1.1 on the iPhone

간단한 실험을 "SHORT"정점 "FLOAT"에서 전환과 정상 힘든 아니라고 보여,하지만 나를 괴롭게하는 것은 당신이있을 때입니다 정점을 원래 크기로 다시 스케일하려면 (glScalef 사용) 법선에 스케일의 역수를 곱합니다. 이것에 대한 자연적인 치료법은 GPU에 제출하기 전에 스케일을 기준으로 법선을 곱하는 것입니다. 그런 다음 내 짧은 법선은 거의 0이됩니다. 배율 인수가 보통 0보다 작기 때문입니다. Duh!

어떻게 정점과 법선을 동시에 "짧게"사용합니까? 나는 이것을 하루 종일 시도해 왔지만 지금까지는 "float vertex w/byte normal"또는 "short vertex w/float normal"에 대해서만 갈 수있었습니다.

귀하의 도움을 진심으로 감사드립니다.

+0

스케일 인자가 0보다 작습니까? – UncleZeiv

답변

1

이것을 호출하여 법선을 정상화 할 수 없습니까?

glEnable(GL_NORMALIZE); 

그것 적합하지 정상화 가능성이 GPU를 조금 명중하지만 당신의 병목 현상이 GPU 또는 너무 많이하고있는 GPU에 의해 통과 데이터에 의한 경우 정말 의존하기 때문이다. 모든 최적화와 마찬가지로 더 나은 속도를 제공하는 것이 무엇인지 파악해야합니다. 나는 용의자 당신은 아마 당신이 속도를 얻을 것이다 버텍스 데이터를 전달하여 속도가 느려집니다.

+0

정상화에 대해 생각해 보았지만 읽은 적이있는 모든 문서에서 "normalizaing"이 일반적으로 말하기 때문에 결코 시도하지 않았습니다. 하지만 네 말이 맞아. 또한 무엇을 상관없이 항상 거래가 이루어집니다. 곧 알려 드리겠습니다. 고마워. – Xylopia

0

가능한 상황이 시도 :

  • 시도를 정점 데이터를 확장하지 않는 GL_NORMAL 매트릭스
  • 을 원하는대로 계산을 수행하는 버텍스 쉐이더를 사용 손보는에 의해 스케일링에 대응하기 위해 카메라 매트릭스를 확대하십시오.
+0

1.GL_NORMAL 행렬은 나에게 좋은 소리입니다. 나는 그것과 GL_NORMALIZE를 비교하려고 노력할 것이다. 2) 내 proj가 고정 렌더 파이프에 있으므로 버텍스 쉐이더가 없습니다. 3) 내 카메라 매트릭스를 확대하는 중 ... 모델 뷰 공간에 모든 것을 직접 전달하기 때문에 가능하지 않습니다. : GL_NORMAL 행렬을 이용해 주셔서 감사합니다. :) 3)와 같이 – Xylopia

+0

과 같이, 뭔가를 놓치지 않는 한 더 큰 "modelview space"를 처리 할 수 ​​있습니다. 제 말은 여러분이 세상을 화면 좌표로 매핑하는 방법에 대한 특정 시점을 제어해야한다는 것입니다. 그리고 뭔가를 놓치지 않는 한 다시 ...이를 활용할 수 있어야합니다. – UncleZeiv

관련 문제