WebGL에서 다면체를 렌더링하는 중이고 정점 위치 및 법선을 생성하는 데보다 효율적이고 오류가 적은 방법이 있는지 궁금합니다.다면체 정점 위치, 법선 및 텍스처 좌표를 열거하는 방법 GLSL
이상적으로 GPU에 인덱스 만 포함 된 버퍼를 보내고 버텍스 쉐이더에서 버텍스 별 위치 및 법선을 계산합니다.
uniform mat4 transform;
uniform ??? polyhedra; // some kind of representation of the polyhedra type
attribute int index;
varying vec4 normal;
varying vec2 uv;
vec3 calculatePosition() { /* mathemagic w/index and polyhedra */ };
vec3 calculateNormal () { /* mathemagic w/index and polyhedra */ };
vev2 calculateUV () { /* mathemagic w/index and polyhedra */ };
void main() {
gl_Position = transform * vec4(calculatePosition(), 1.0);
normal = transform * vec4(calculateNormal(), 1.0);
uv = calculateUV();
}
을 다음 index
에 그것을 정점 인덱스의 배열을 보내 버텍스 쉐이더는 다음과 같이 보일 것입니다. 평면 당 두 개의 삼각형으로 렌더링 된 큐브의 경우 (평행선이 다른면 사이에서 공유 될 수 없기 때문에 중요 함) 법선이 다른 점 때문에 인덱스를 버퍼로 보냅니다. 36) (6면 * 2 삼각형 * 3 개의 꼭지점).
영웅적인 노력 없이도 효율적이고 효율적입니까?
WebGL은 기본적으로 OpenGL ES 2.0이므로 기하학적 셰이더가 없습니다.
벡터/행렬 연산자의 편의성 이외에도 GLSL에서 정점을 생성하는 것이 JavaScript보다 나은 이유는 없습니다. –