Opengl es 无法从球体内部查看纹理opengl es
我正在学习opengl es 2,我有一个带有纹理的球体。我可以从外面看,但是如果我把相机放进去,我所看到的就是黑暗。我试图用以下方法解决这个问题: GLES20.glCullFace(GLES20.GLU前和GLU后) 但我仍然看到一个黑屏。是因为光线吗?如何从球体内部查看纹理 以下是着色器:Opengl es 无法从球体内部查看纹理opengl es,opengl-es,Opengl Es,我正在学习opengl es 2,我有一个带有纹理的球体。我可以从外面看,但是如果我把相机放进去,我所看到的就是黑暗。我试图用以下方法解决这个问题: GLES20.glCullFace(GLES20.GLU前和GLU后) 但我仍然看到一个黑屏。是因为光线吗?如何从球体内部查看纹理 以下是着色器: final String vertexShader = "uniform mat4 u_MVPMatrix; \n" // A constant representin
final String vertexShader =
"uniform mat4 u_MVPMatrix; \n" // A constant representing the combined model/view/projection matrix.
+ "attribute vec4 a_Position; \n" // Per-vertex position information we will pass in.
+ "varying vec2 vTexCoord; \n"
+ "attribute vec2 vTexCoord0; \n"
+ "void main() \n" // The entry point for our vertex shader.
+ "{ \n"
+ " gl_Position = u_MVPMatrix \n" // gl_Position is a special variable used to store the final position.
+ " * a_Position; \n" // Multiply the vertex by the matrix to get the final point in
+ " vTexCoord = vTexCoord0; \n"
+ "} \n"; // normalized screen coordinates.
final String fragmentShader =
"precision mediump float; \n"
+ "varying vec2 vTexCoord; \n"
+ "uniform sampler2D sTexture; \n"
+ "void main() \n"
+ "{ \n"
+ " gl_FragColor = texture2D( sTexture, vTexCoord );\n"
+ "}
告诉它剔除(不显示)前面和后面的三个。使用该设置时,您不应该从内部或外部看到任何东西。请尝试“无”。GLES20.glCullFace(GLES20.GL\u-FRONT\u和\u-BACK);意味着您希望它同时剔除(即不渲染)正面和背面。很难想象有人会愿意这样做
要在C中关闭剔除,需要执行以下操作
glDisable(GL_CULL_FACE);
我猜想,对于Java绑定,该命令如下所示
GLES20.glDisable(GLES20.GL_CULL_FACE);
取决于着色器的编写方式。我已经发布了着色器。然后它不是灯光,因为着色器中没有任何灯光计算。3年后,我打算再次测试该项目,不得不更改目标SDK版本,只有更改后,我才能从内部看到纹理。不知道为什么我尝试了GLES20.glCullFace(GLES20.Glu NONE);还是什么都看不见。那么这可能是由于近剪裁的缘故?球体的大小是多少?投影矩阵中的近剪裁范围设置为多少?
GLES20.glDisable(GLES20.GL_CULL_FACE);