2012-02-29 2 views
2

OpenGL ES 2.0의 조명 사용법을 설명하고 보여주는 자습서 나 샘플 코드를 찾으려고합니다. 제가 온라인에서 본 자료의 대부분은 Opengl ES 1.1을 가리 킵니다.OpenGL ES 2.0을 사용하여 광원을 어떻게 적용합니까?

누구나 OpenGL ES 2.0에서 조명을 수행하는 방법에 대한 링크 나 설명서를 제공 할 수 있습니까?

+0

질문을 다시 말하게하십시오. 누군가가 쉐이더를 사용하여 광원을 구현하는 방법을 보여주는 자습서를 알고 있습니까? – Abhi

답변

11

OpenGL ES 2.0의 어려움은 원하는 방식으로 자신 만의 쉐이더를 작성할 수 있기 때문에 객체에 조명을 제공하는 설정 방법이 없다는 것입니다. 콘텐츠를 어떻게 표시할지에 따라 다릅니다.

그렇다면 가벼운 방향을 제공하고 각 꼭지점에서 빛의 강도를 계산하는 등의 작업을 수행하여 OpenGL ES 1.1의 고정 함수 조명 기능을 복제 할 수 있습니다. this sample application에서 예를 볼 수 있습니다. 제 수업 중 하나를 위해 함께 쳤습니다. 정합 단편 쉐이더

attribute vec4 position; 
attribute vec4 normal; 

varying float lightIntensity; 

uniform mat4 modelViewProjMatrix; 
uniform vec3 lightDirection; 

void main() 
{ 
    vec4 newNormal = modelViewProjMatrix * normal; 
    vec4 newPosition = modelViewProjMatrix * position; 
    gl_Position = newPosition; 

    lightIntensity = max(0.0, dot(newNormal.xyz, lightDirection)); 
} 

:

varying highp float lightIntensity; 

void main() 
{ 
    lowp vec4 yellow = vec4(1.0, 1.0, 0.0, 1.0); 
    gl_FragColor = vec4((yellow * lightIntensity * 0.2).rgb, 1.0); 
} 

광 방향의 내적 그 정점에서의 법선의 계산에 사용된다

여기서 사용 버텍스 쉐이더는 다음과 빛의 강도는 그 정점에서 보는 사람의 눈을 때린다. 이 빛의 강도는 각 삼각형의 꼭지점 사이에 삽입되어 각 조각마다 강도를 부여합니다.

오픈 소스 Molecules 응용 프로그램에서 픽셀 당 조명을 좀 더 발전 시켰습니다. 각 구체와 원통은 실제로 사각형 내에있는 raytraced 사기꾼입니다. 각 픽셀에 대해 가상 객체의 해당 점에서 반사 및 주변 조명 기여도를 계산 한 다음이를 모델 로딩시 계산 된 앰비언트 오 클루 전 계수와 결합합니다. 조명으로 할 수있는 것의 다른 극단적 인 부분이 있습니다. 그러나 코드를 파헤 치면이 작동 방식에 대해 my little writeup을 읽어보십시오.

+0

Brad에게 감사드립니다.이 코드는 매우 도움이 될 것입니다.이 문제에 대해 많은 시간을 할애했으며, 제공 한 소스 코드가 결승선에 가장 도움이 될 것이라고 생각합니다. 내 경험을 잠시 후에 게시 할 것입니다. 추신. – Abhi

+1

@ user1200008 이상의 평판 포인트를 추가 할 수있는 방법이 있었으면합니다. - 내 iTunes U 과정에 관심이 있습니다. 여기에서 내가 사용했던 OpenGL ES 2.0 클래스를 찾을 수 있습니다. http://itunes.apple .com/WebObjects/MZStore.woa/wa/viewCourse? id = 497193807 & s = 143441 & ls = 1 –

+0

사실 나는 질문이 있습니다. 현재 내 지오메트리는 간단한 큐브로 구성됩니다. 나는 이것에 대한 법선을 어떻게 계산할 수 있는지 알고 싶었습니다. – Abhi

관련 문제