【GLSL】Flatten Shader
우선, 우리는 모델 보기를 바꾸기 전에 z 좌표를 0으로 설정하여 3d모델을 납작하게 한다.정점 shader는 다음과 같습니다.
void main(void)
{
vec4 v = vec4(gl_Vertex);
v.z = 0.0;
gl_Position = gl_ModelViewProjectionMatrix * v;
}
일단glvertex에 국부 변수,gltex는 GLSL에서 제공하는 속성 변수입니다. 따라서 정점shader에서는 읽기만 하기 때문에 국부 변수 v를 부여해서 (프로그램) 입력한 정점 값을 수정해야 합니다.
스크린 shader는 색깔만 설정하는 데 사용되기 때문에 앞에서 언급한 Hello World의 것처럼 사용할 수 있습니다.
여기에 정점 프로그램에서 z값을 0으로 설정하여 찻주전자 모형에 적용할 때 얻은 결과는 다음과 같을 수 있다
그럼 다른 효과를 다시 한 번 시험해 보겠습니다. z의 계산 항목을 다음과 같이 계산하면 결과는 다음과 같습니다.
void main(void)
{
vec4 v = vec4(gl_Vertex);
v.z = sin(5.0*v.x )*0.25;
gl_Position = gl_ModelViewProjectionMatrix * v;
}
자, 다음은 정점 애니메이션을 추가하려고 합니다. 우선 현재 시간을 추적하는 변수가 필요합니다. 정점 프로그램은 이런 변수를 할 수 없습니다. 따라서 Opengl 프로그램에서 이 변수를 정의하고 uniform 변수를 통해 정점shader에게 전달해야 합니다.응용 프로그램에 시간 변수가 있고 정점shader에 같은 이름의 uniform 변수가 있다면 정점shader는 이렇게 됩니다.
uniform float time;
void main(void)
{
vec4 v = vec4(gl_Vertex);
v.z = sin(5.0*v.x + time*0.01)*0.25;
gl_Position = gl_ModelViewProjectionMatrix * v;
}
위에서 언급한 속성 변수와 같이 응용 프로그램 세그먼트에는 두 가지 절차가 있습니다.
설정:속성 변수의 위치 가져오기
렌더링:속성 변수 업데이트
구축 단계:loc =glGetUniformLocationARB(p,time);
여기 p는 정점shader의 핸들입니다. time는 uniform 변수이고,loc는 GLint 형식입니다. 렌더링 단계에서 접근할 수 있는 위치를 정의해야 합니다.
렌더링 함수는 다음과 같습니다.
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0,0.0,5.0,
0.0,0.0,0.0,
0.0f,1.0f,0.0f);
glUniform1fARB(loc, time);
glutSolidTeapot(1);
time+=0.01;
glutSwapBuffers();
}
이 시간 변수는 초기화할 때 주는 초기값으로 프레임마다 업데이트됩니다.
프로젝트 코드는 여기에서 flatten을 다운로드할 수 있습니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node.js에서 Base64 데이터를 이미지로 변환최근에 브라우저에서 이미지를 base64 형식으로 반환하는 프로젝트에 참여했고 이미지를 디스크에 써야 합니다. base64 , 버퍼, 바이너리 및 실제 이미지가 어떻게 작동하는지에 대한 자세한 설명을 얻을 수 있는지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.