Ok ... 6 개의 다른 법선을 가지고 있지만 실제로는 48면 (한면에 8 개의면)에 가까운 비교적 간단한 솔리드가 있다고 가정하면 얼굴 사이에 공유 꼭지점이 많이 있습니다. OpenGL에서 렌더링하는 가장 효율적인 방법은 무엇입니까?Normals 렌더링을 사용하는 OpenGL ES 다각형
배열의 정점을 배치 한 다음 인덱스 배열을 사용하여 렌더링 할 수 있다는 것을 알고 있지만 법선을 변경하기 위해 렌더링 단계를 중단해야합니다 (예 : 보통 1 ... 8면 렌더링). .. normal normal 2 ... render 8 faces, etc.) 그 때문에 나는 인덱스 배열 배열을 유지해야한다. 안좋다!
내가 할 수있는 다른 방법은 별도의 정상 및 정점 배열 (또는 심지어 interleave)을 사용하는 것입니다. 그러나 이것은 법선과 정점의 일대일 비율이 필요하다는 것을 의미합니다. 즉 법선이 될 것입니다. 그들이 필요로하는 것보다 8 배 더 중복! 구형 또는 곡면을 가진 무언가에, 각 정상은 확률이 높습니다, 그러나 이것을 위해, 실제로 기억의 낭비 같이 보인다.
완벽한 세계에서 정점을 갖고 싶습니다. 그리고 정상적인 배열의 길이가 다른데, 삼각형이나 쿼드를 그릴 때 그 정점에 대한 각 배열의 인덱스를 지정해야합니다.
이제 OBJ 파일 형식을 사용하면 ... 정점 배열과 길이가 다른 일반 배열을 지정할 수 있습니다. 그러면 렌더링 할면을 지정할 때 꼭지점과 일반 인덱스를 지정할 수 있습니다. 텍스처를 사용하는 경우 UV coord) 완벽한 솔루션처럼 보입니다! 48 개의 정점들만 있지만 8 개의 법선들만 있으면, 모양의면들을 정의하는 인덱스의 쌍. 하지만 OpenGL ES에서 렌더링하는 방법을 잘 모르겠습니다. (다시 'ES'에 주목하십시오.) 현재 저는 법선을 1 대 1로 역 정규화해야합니다 (SQL은 유감스럽게 생각합니다). 정점 배열, 렌더링. 그냥 나에게 메모리 낭비.
누구에게 도움이됩니까? 나는 여기서 아주 간단한 것을 놓치기를 바란다.
마크
좋아, 모델을 더 간단하게하십시오. 테이프 롤처럼 펼쳐지는 사각형의 스트립이 있습니다. 두 번째 테이프를 두 번째 테이프처럼 모서리 아래쪽에 추가하면 모든 꼭지점이 '접기'아래로 공유됩니다. 그러나 법선 때문에 꼭지점을 공유 할 수 없으므로 이제 버텍스 데이터의 메모리가 33 % 증가합니다. (즉, b와 c가 똑같은 버텍스이고 다른 법선 일지라도 ab를 누른 다음 cd를가집니다. 기술적으로 단일 스트립의 쿼드를 사용하더라도 얼굴을 원하지 않으면 똑같은 문제가 발생합니다. 부드럽지만 오히려 편평합니다. (꼭지점을 부드럽게하면 부드럽게됩니다.) – MarqueIV
또한 꼭지점이 3D 공간의 같은 위치에 있기 때문에 꼭지점 변환을 잃지 않습니다. 내가 명령을 그들에게 영향을주지 않는 그들을 그리기로 선택하고 그게 정확히 DrawElements 명령을 무엇입니까? .. 비아 색인? 결국 내가 참조하는 10 가지 작업에서 사용하는 하나의 색인을 가지고 인덱스를 사용하면 위의 명령문과 정확히 반대되는 점인 10에 반대되는 해당 정점에 대한 계산/최적화가 하나만 있지 않습니까? – MarqueIV
지형과 비슷하게 들릴 수 있습니다. 대부분의 경우 법선을 공유해야합니다 지형 테이프 롤에. "평면"을 원한다면 오히려 예외는 내 메시지에서 말한 것입니다. post-vertex transform에 관해서 : 정점 위치 출력이 normal에 의존한다면? 꼭 꼭지점 입력 위치만을 기반으로 계산 된 것은 아닙니다. 그리고 나는 현재 내가 사용하고있는 최적화를 설명하는 것일뿐입니다 (크기는 대개 작습니다. 특히 지형 스트립이 길면 항상 그다지 치지는 않습니다). – Bahbar