我正在尝试编写一个简单的片段着色器来在多边形上显示网格(或更确切地说是棋盘格图案)。我希望这个图案“保持在原位”,即当多边形本身移动时,正方形保持在同一位置,因此生成的图案会在图案的表面上滑动。
我正在 Java 中使用 LWJGL 针对基于 ARM 的嵌入式系统进行开发,我可以在连接到我的 PC 的 ARM 设备上远程调试,也可以在 PC 本身上进行本地调试。我为此使用intelliJ。
在 PC 上,我的程序默认使用 OpenGL 3.2。在 ARM 上,上下文是 OpenGL ES 3.0。ARM上的显卡是Vivante GC 2000。
问题是:在本地,在我的电脑上,着色器工作完美,就像我想要的那样。但当我使用 ARM 时,图案会抖动、扭曲,并且构成多边形的两个三角形之间不同步。有趣的事实是,图案会根据相机位置而变化和移动,即使着色器仅使用模型矩阵和平面的顶点位置进行计算,这两者在帧之间保持完全相同(我检查过)。然而相机位置在某种程度上会极大地影响结果,这是不应该发生的。
这是我的顶点着色器:
#version 300 es
layout (location=0) in vec3 position;
uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
uniform mat4 modelMatrix;
out highp vec3 vertexPosition;
void main()
{
// generate position data for the fragment shader
// does not take view matrix or projection matrix into account
vec4 vp = modelMatrix * vec4(position, 1.0);
vertexPosition = vec3(vp.x, vp.y, vp.z);
// position data for the OpenGL vertex drawing
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
片段着色器:
#version 300 es
precision highp float;
in highp vec3 vertexPosition;
out mediump vec4 fragColor;
void main()
{
highp float c = float((int(round(vertexPosition.x/5.0))+int(round(vertexPosition.z/5.0))) % 2);
fragColor = vec4(vec3(c/2.0 + 0.3), 1);
}
正如你所看到的,我尝试修改浮动操作的精度,可惜没有成功。您还可以注意到,只有多边形的 modelMatrix 和 Vertex 位置会影响 fragColor,我可以保证我将它们连接起来,并且它们在着色器调用之间不会改变,但不知何故,相机移动最终会影响生成的片段颜色/图案。
还值得注意的是,场景中物体上的其他纹理似乎没有受到该问题的影响
元芳怎么了
白板的微信
炎炎设计
相关分类