【发布时间】:2016-08-07 06:53:29
【问题描述】:
我目前在坐标开始环绕的位置处遇到纹理 VBO 问题。我在纹理周围添加了一个 30px 的黄色边框,以使效果更加突出。
当仔细观察时,它看起来几乎整个纹理都被压扁并涂抹在黄线之间。
纹理坐标代码(buffer[0] = 顶点 X,buffer[2] = 顶点 Y):
if ((buffer[0] * s) < 0) Logger.logDebug(buffer[8]+","+buffer[9]);
if ((buffer[2] * s) < 0) Logger.logDebug(buffer[8]+","+buffer[9]);
buffer[8] = (buffer[0] * s) % 1f; //tx
buffer[9] = (buffer[2] * s) % 1f; //ty
if (buffer[8] > 1f || buffer[9] > 1f) Logger.logDebug(buffer[8]+","+buffer[9]);
if (buffer[8] < 0f || buffer[9] < 0f) Logger.logDebug(buffer[8]+","+buffer[9]);
我对低于 0 或高于 1 的坐标的检查均未通过,因此它们在正确的范围内。
片段着色器:
#version 150 core
uniform sampler2D texture1;
in vec4 vColor;
in vec4 pass_Color;
in vec2 pass_texCoord;
out vec4 out_Color;
void main()
{
out_Color = pass_Color;
out_Color = texture(texture1, pass_texCoord.st);
}
垂直着色器:
uniform mat4 projection = mat4(
1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0);
uniform mat4 view = mat4(
1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0);
uniform vec4 overrideColor = vec4(-1,-1,-1,-1);
in vec4 in_Color;
in vec4 in_Position;
in vec2 texCoord;
out vec4 pass_Color;
out vec2 pass_texCoord;
void main()
{
gl_Position = projection * view * gl_Vertex;
if (overrideColor == vec4(-1,-1,-1,-1))
{
pass_Color = in_Color;
}
else
{
pass_Color = overrideColor;
}
pass_texCoord = texCoord;
}
【问题讨论】:
-
%看起来很可疑。那时你的坐标可以小于零吗?尝试在这里和那里添加一些fabs。 -
是所有的一个四边形,还是带有 [0,1] tex 坐标的多个?
-
这是Java,对吧?
-
我更新了问题。我在修改坐标之前和之后添加了检查。所有坐标都在 0.0-1.0 范围内。是的,这是Java,我只是添加了那个标签来指定。