Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
openglz-Fighting问题 我用OpenGL和C++实现了Android应用程序,我在渲染不同Y位置的三角形,它们都在X-Z平面,相机是正值投影,值接近3。 glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS);_Android_C++_Opengl Es - Fatal编程技术网

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等)对其进行调试也是有意义的