스프라이트 시트에서 스프라이트를 그리는 데 GLSL을 사용하고 있습니다. jME 3을 사용하고 있지만, 약간의 차이점이 있으며, 더 이상 사용되지 않는 기능에 대해서만 있습니다.GLSL의 텍스처 부분 표시
스프라이트 시트에서 스프라이트를 그릴 때 가장 중요한 부분은 픽셀의 하위 집합/범위 (예 : (100, 0) ~ (200,100) 범위 만 그립니다. 다음 테스트 케이스 스프라이트 시트에서 이전 경계를 사용하면 스프라이트 시트의 초록색 부분 만 그려집니다.
.
이것은 내가 지금까지 무엇을 가지고 :
정의 :
MaterialDef Solid Color {
//This is the list of user-defined variables to be used in the shader
MaterialParameters {
Vector4 Color
Texture2D ColorMap
}
Technique {
VertexShader GLSL100: Shaders/tc_s1.vert
FragmentShader GLSL100: Shaders/tc_s1.frag
WorldParameters {
WorldViewProjectionMatrix
}
}
}
.vert 파일 :
uniform mat4 g_WorldViewProjectionMatrix;
attribute vec3 inPosition;
attribute vec4 inTexCoord;
varying vec4 texture_coordinate;
void main(){
gl_Position = g_WorldViewProjectionMatrix * vec4(inPosition, 1.0);
texture_coordinate = vec4(inTexCoord);
}
.frag :
JME 3에서uniform vec4 m_Color;
uniform sampler2D m_ColorMap;
varying vec4 texture_coordinate;
void main(){
vec4 color = vec4(m_Color);
vec4 tex = texture2D(m_ColorMap, texture_coordinate);
color *= tex;
gl_FragColor = color;
}
, inTexCoord는 gl_MultiTexCoord0을 참조합니다. , inPosition은 gl_Vertex를 참조합니다.
보시다시피 texture_coordinate에 vec2가 아닌 vec4 유형을 지정하여 해당 p 및 q 값 (texture_coordinate.p 및 texture_coordinate.q)을 참조 할 수있게하려고했습니다. 그것들을 변경하면 색조가 달라집니다.
m_Color는 사용자가 입력 한 색을 나타내며 색조를 변경하는 용도로 사용됩니다. 이 경우 무시해야합니다.
지금까지 셰이더가 예상대로 작동하고 텍스처가 올바르게 표시됩니다.
저는 NeHe (http://nehe.gamedev.net/article/glsl_an_introduction/25007/) 및 Lighthouse3D (http://www.lighthouse3d.com/tutorials/glsl-tutorial/simple-texture/)의 자료 및 자습서를 사용하고 있습니다.
텍스처의 일부만 표시하는 데 필요한 효과를 얻기 위해 변경해야하는 기능/값은 무엇입니까?