문제

에 대한 답변 내 질문 DOT3 조명이 OpenGL ES 렌더링에 도움이 될 수 있다고 제안하지만 DOT3 조명이 무엇인지에 대한 적절한 정의를 찾는 데 어려움을 겪고 있습니다.

편집 1

아이폰 관련 정보 정말 감사드립니다.

도움이 되었습니까?

해결책

DOT3 조명은 종종 픽셀당 조명이라고도 합니다.정점 조명을 사용하면 조명이 모든 정점에서 계산되고 결과 조명이 삼각형 위에 보간됩니다.픽셀당 조명에서는 이름에서 알 수 있듯이 개체는 모든 픽셀의 조명을 계산하는 것입니다.

iPhone이 소위 레지스터 결합기를 사용하는 것처럼 고정 기능 하드웨어에서 이것이 수행되는 방식입니다.DOT3라는 이름은 다음 렌더링 상태에서 유래되었습니다.

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB);

보다 이것 이를 설정하는 방법에 대한 자세한 내용은 Wolfgang Engels 블로그의 블로그 항목을 참조하세요.

픽셀당 조명을 수행할 때 소위 말하는 것을 활용하는 것도 인기가 있습니다. 노멀 맵.이는 객체의 모든 점의 법선이 특수 텍스처 맵인 법선 맵에 저장된다는 의미입니다.이것은 매우 낮은 폴리곤 모델이 사용되었지만 고해상도 노멀 맵이 있는 ID 소프트웨어의 DOOM 3 게임에서 대중화되었습니다.이 기술을 사용하는 이유는 눈이 모양의 변화보다 조명의 변화에 ​​더 민감하기 때문입니다.

귀하의 다른 질문에서 이것이 나온 이유는 정점 데이터의 메모리 공간을 줄이고 싶었기 때문이라는 것을 알았습니다.이는 모든 정점의 법선에 대한 세 가지 구성 요소를 저장하는 대신 노멀 맵에 텍스처 좌표에 대한 두 가지 구성 요소만 저장하면 된다는 사실입니다.픽셀당 조명을 활성화하면 성능 비용이 발생하기 때문에 이것이 최종 승리가 될지는 확신할 수 없습니다. 평소처럼 시도해 보는 것이 좋습니다.

마지막으로 한 점의 확산 조명 강도는 표면 법선과 빛의 방향 사이의 각도의 코사인에 비례합니다.두 벡터의 경우 내적 ~이다 한정된 처럼:

a dot b = |a||b| cos(theta)

어디 |a| 그리고 |b| 벡터의 길이입니다 a 그리고 b 각각 그리고 theta 사이의 각도입니다.길이가 1과 같다면, |a| 그리고 |b| 단위 벡터라고 하며 공식은 다음과 같이 단순화됩니다.

a dot b = cos(theta)

이는 확산 조명 강도가 표면 법선과 빛의 방향 사이의 내적에 의해 제공된다는 것을 의미합니다.이는 다음을 의미합니다. 모두 확산 조명은 이름이 픽셀별 종류를 나타내더라도 DOT3 조명의 한 형태입니다.

다른 팁

에서 여기:

범프 맵핑은 각 텍셀의 밝기가 그 텍셀의 높이를 정의하는 모델에 질감을두고 있습니다.

그런 다음 각 텍셀의 높이는 표면을 가로 지르는 조명을 교란시키는 데 사용됩니다.

정상 매핑은 각 텍셀의 색상이 표면의 위치 방향을 정의하는 세 가지 값인 모델에 텍스처를 놓는 것입니다.

예를 들어 (255, 0, 0)의 색상은 해당 위치의 표면이 양의 x 축을 가리 란을 의미 할 수 있습니다.

다시 말해, 각 텍셀은 정상입니다.

DOT3 이름은이 정상에서 실제로하는 일에서 비롯됩니다.

광원의 방향을 가리키는 벡터가 있다고 가정 해 봅시다. 그리고 모델의 특정 텍셀에서 정상인 벡터가 텍셀이 지적하는 방향을 알려주는 벡터를 가지고 있다고 가정 해 봅시다.

이 두 정상 벡터에서 "도트 제품"이라는 간단한 수학 방정식을 수행하는 경우 :

dot = n1xN2X + N1YN2Y + N1Z*N2Z

그런 다음 결과 값은 숫자로, 두 벡터가 같은 방향으로 얼마나 가리키는지를 알려줍니다.

값이 -1 인 경우 반대 방향으로 가리키는데, 이는 실제로 텍셀이 광원을 가리키고 있고 광원이 텍셀을 가리키고 있음을 의미하므로 텍셀이 켜져 있어야합니다.

값이 1이면 같은 방향을 가리 킵니다. 즉, 텍셀이 광원에서 멀어지고 있음을 의미합니다.

값이 0이면 벡터 중 하나가 다른 것보다 90도를 가리 킵니다. IE : 만약 당신이 지상에 서 있다면, 당신의 뷰 벡터는 지점의 정상에 비해 90도입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top