我正在使用GLSL從精靈表中繪製精靈。我正在使用jME 3,但只有很小的差異,並且僅針對已棄用的函數。顯示GLSL中紋理的一部分
從sprite工作表繪製sprite最重要的部分是繪製像素的一個子集/範圍,例如從(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:
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;
}
在JME的3, inTexCoord是指gl_MultiTexCoord0 ,inPosition指gl_Vertex。如你所見,我試着給texture_coordinate一個vec4類型,而不是vec2,以便能夠引用它的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/)的資源和教程。
我應該改變哪些函數/值來獲得僅顯示部分紋理的所需效果?