728x90
char LightPosition = ProgramManagerObj->ProgramGetUniformLocation(program,(char*)"LightPosView");
char ModelColor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"ModelColor");
char DotColor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"DotColor");
char BackSideModelColor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"BackSideModelColor");
char BackSideDotColor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"BackSideDotColor");
char DotSize = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"DotSize");
char Side = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"Side");
if (DotColor >= 0){
glUniform3f(DotColor, 0.4, 0.5, 1.0 );
}
if (BackSideModelColor >= 0){
glUniform3f(BackSideModelColor, 0.0, 1.0, 0.0 );
}
if (BackSideDotColor >= 0){
glUniform3f(BackSideDotColor, 1.0, 1.0, 1.0 );
}
if ( DotSize >= 0 ){
glUniform1f(DotSize, 0.13);
}
Vertex Shader
#version 300 es
// Vertex information
layout(location = 0) in vec4 VertexPosition;
layout(location = 1) in vec3 Normal;
// Model View Project matrix
uniform mat4 ModelViewProjectionMatrix;
uniform mat3 NormalMatrix;
out vec3 ObjectCoord;
void main()
{
ObjectCoord= VertexPosition.xyz;
gl_Position = ModelViewProjectionMatrix * VertexPosition;
}
Fragment Shader
#version 300 es
precision mediump float;
// 최종 출력 색상 (컬러 버퍼 0번으로 출력)
layout(location = 0) out vec4 outColor;
// 정점 셰이더에서 전달된 오브젝트 공간 좌표
in vec3 ObjectCoord;
// 큐브 셀 한 변의 길이와 도트(구형 점)의 반지름
uniform float Side;
uniform float DotSize;
// 앞면과 뒷면 각각의 배경색과 도트 색
uniform vec3 ModelColor, DotColor;
uniform vec3 BackSideModelColor, BackSideDotColor;
void main() {
// 셀 하나의 큐브 크기를 정의
vec3 Cube = vec3(Side, Side, Side);
// 최종 렌더링 색상을 저장할 변수 초기화 (검정색)
vec3 RenderColor = vec3(0.0, 0.0, 0.0);
// 구 안에 들어가는지 판정할 변수와 거리 계산용 변수
float insideSphere, length;
// ObjectCoord를 Cube 크기로 나눈 후, 중심 기준으로 위치 계산
// → 큐브 셀 내부의 상대 좌표를 얻음
vec3 position = mod(ObjectCoord, Cube) - Cube / 2.0;
// 거리 계산 (정확히는 구의 반지름 계산용)
length = sqrt(position.x * position.x +
position.y * position.y +
position.z * position.z);
// 점(구) 안에 들어가면 1, 아니면 0 (도트 영역 판단)
insideSphere = step(length, DotSize);
// 앞면이면 앞면 색상 + 도트 색상 혼합
if (gl_FrontFacing) {
RenderColor = mix(ModelColor, DotColor, insideSphere);
}
// 뒷면이면 뒷면 색상 + 도트 색상 혼합
else {
RenderColor = mix(BackSideModelColor, BackSideDotColor, insideSphere);
}
// 최종 색상 출력 (불투명 알파)
outColor = vec4(RenderColor, 1.0);
}
728x90
'Opengles 3.0 with Android' 카테고리의 다른 글
Chapter 6.3 Pattern Effect - Brick Style (0) | 2025.04.22 |
---|---|
Chapter 6.1 Pattern Effect - Circle (0) | 2025.04.16 |
Chapter 6.0 Warble Effect (0) | 2025.04.16 |
Chapter 5.2 Multi Light (0) | 2025.04.15 |
Chapter 5.1 Phong Shader (0) | 2025.03.24 |