openglz-Fighting问题 我用OpenGL和C++实现了Android应用程序,我在渲染不同Y位置的三角形,它们都在X-Z平面,相机是正值投影,值接近3。 glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS);
正交投影为:openglz-Fighting问题 我用OpenGL和C++实现了Android应用程序,我在渲染不同Y位置的三角形,它们都在X-Z平面,相机是正值投影,值接近3。 glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS);,android,c++,opengl-es,Android,C++,Opengl Es,正交投影为: projectionMatrix = glm::ortho(-(width/2.f)/zoom, (width/2.f)/zoom, -(height/2.f)/zoom,(height/2.f)/zoom,near,far); 这些值是 projectionMatrix = glm::ortho(-100, 100, -197,197,3,50); 有时我会发现三角形似乎有Z形格斗,虽然它们有不同的Y值,但相机从上面看 vertexShader = "
projectionMatrix = glm::ortho(-(width/2.f)/zoom, (width/2.f)/zoom, -(height/2.f)/zoom,(height/2.f)/zoom,near,far);
这些值是
projectionMatrix = glm::ortho(-100, 100, -197,197,3,50);
有时我会发现三角形似乎有Z形格斗,虽然它们有不同的Y值,但相机从上面看
vertexShader = "#version 300 es\n"
"precision highp float;\n"
"layout (location = 0) in vec3 position;\n"
"layout (location = 1) in vec3 normal;\n"
"layout (location = 2) in vec2 texCoord;\n"
"\n"
"uniform mat4 model;\n"
"uniform mat4 view;\n"
"uniform mat4 projection;\n"
"\n"
"out vec2 TexCoords;\n"
"out vec3 Normal;\n"
"out vec3 FragPos;\n"
"\n"
"void main(){\n"
" Normal = mat3(transpose(inverse(model))) * normal;\n"
" TexCoords = texCoord;\n"
" FragPos = vec3(model * vec4(position, 1.0));\n"
" gl_Position = projection * view * model * vec4(position, 1.0);\n"
"}";
fragmentShader = "#version 300 es\n"
"precision highp float;\n"
"\n"
"struct DirectLight{\n"
" vec3 Direction;"
" vec3 color;\n"
" float intensity;\n"
"};\n"
"out vec4 glFragColor;\n"
"\n"
"in vec2 TexCoords;\n"
"in vec3 Normal;\n"
"in vec3 FragPos;\n"
"\n"
"uniform int hasTexture;\n"
"uniform int hasSpecular;\n"
"uniform float alpha;\n"
"uniform vec3 ViewPos;\n"
"\n"
"uniform sampler2D map_diffuse;\n"
"uniform sampler2D map_specular;\n"
"\n"
"uniform vec3 diffuse;\n"
"uniform vec3 specular;\n"
"uniform float shininess;\n"
"uniform DirectLight Sun1;\n"
"vec3 calcLight(DirectLight light,vec3 diffColor,vec3 specColor){"
" vec3 normal = normalize(Normal);\n"
" vec3 lightDir = normalize(-light.Direction);\n"
" float diffFactor = max(dot(normal,lightDir), 0.0);\n"
" vec3 _diffuse = light.intensity * light.color * diffFactor * diffColor;\n"
" vec3 viewDir = normalize(ViewPos - FragPos);\n"
" vec3 halfwayDir = normalize(lightDir + viewDir);\n"
" float specFactor = pow(max(dot(normal, halfwayDir), 0.0), shininess);\n"
" vec3 _specular = specColor * light.intensity * light.color * specFactor;\n"
" return _diffuse + _specular ;\n"
"}"
"void main(){\n"
" vec4 diffColor;\n"
" vec4 specColor;\n"
" if(hasTexture == 1)\n"
" diffColor = texture(map_diffuse, TexCoords);\n"
" else\n"
" diffColor = vec4(diffuse,alpha);\n"
" if(hasSpecular == 1)\n"
" specColor = texture(map_specular, TexCoords);\n"
" else\n"
" specColor = vec4(specular,alpha);\n"
" vec4 _ambient = vec4(0.4,0.4,0.4,alpha) * diffColor;\n"
" vec4 result = vec4("
" calcLight(Sun1,diffColor.xyz,specColor.xyz),alpha)"
" + _ambient;"
" float gamma = 2.2;\n"
" result = pow(result, vec4(1.0/gamma));\n"
" glFragColor = result;\n"
"}";
您能分享精确的正交投影参数吗?如果值太接近,也可能发生Z-战斗。如果知道几何体的确切顺序,可以设置多边形偏移以避免zfighting@MrD我添加了正交投影矩阵参数Z范围看起来很密集,所示三角形的坐标是什么?请共享顶点和片段shaders@MohamedMoussa陛下一切看起来都很好。。。也许你应该在另一台设备上试试。此外,尝试使用平台工具(高通公司的Adreno GPU Profiler等)对其进行调试也是有意义的。您是否可以共享精确的正交投影参数?如果值太接近,也可能发生Z-战斗。如果知道几何体的确切顺序,可以设置多边形偏移以避免zfighting@MrD我添加了正交投影矩阵参数Z范围看起来很密集,所示三角形的坐标是什么?请共享顶点和片段shaders@MohamedMoussa陛下一切看起来都很好。。。也许你应该在另一台设备上试试。此外,尝试使用平台工具(高通公司的Adreno GPU Profiler等)对其进行调试也是有意义的