我想在OpenGL ES 3.0中绘制Invisible三角形。我认为制作Alpha通道Zero会做到这一点。 以下是我传递三角形顶点的方法:
在我的构造函数中,我正在使用初始化我的Triangle顶点:
final float[] triangle2VerticesData = {
// X, Y, Z,
// R, G, B, A
-0.5f, -0.25f, 0.0f,
1.0f, 1.0f, 0.0f, 0.0f, // Alpha is zero
0.5f, -0.25f, 0.0f,
0.0f, 1.0f, 1.0f, 0.0f, // Alpha is zero
0.0f, 0.559016994f, 0.0f,
1.0f, 0.0f, 1.0f, 0.0f}; // Alpha is zero
额外信息:
在onSurfaceCreated:
GLES20.glClearColor(0.5f, 0.5f, 0.5f, 0.5f);
// ... Creating and attaching shaders, creating veiw matrix using Lookat
在onDrawFrame中:
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
// ... performaing simple rotation and passing MVP to shaders
在着色器中:
final String vertexShader = “统一mat4 u_MVPMatrix; \ n”
+ "attribute vec4 a_Position; \n"
+ "attribute vec4 a_Color; \n"
+ "varying vec4 v_Color; \n"
+ "void main() \n"
+ "{ \n"
+ " v_Color = a_Color; \n"
+ " gl_Position = u_MVPMatrix \n"
+ " * a_Position; \n"
+ "} \n";
final String fragmentShader =
"precision mediump float; \n"
+ "varying vec4 v_Color; \n"
+ "void main() \n"
+ "{ \n"
+ " gl_FragColor = v_Color; \n"
+ "}
我可以通过播放R G B值来改变三角形的颜色。 但是当A(Alpha)设置为1.0f或0.0f时,不会产生任何变速/不可变性吗? 任何人都可以告诉我我在哪里错了吗?
答案 0 :(得分:1)
如果您希望三角形完全不可见,请不要渲染它。这是性能的最佳方法,并且有一点额外的逻辑,应该很容易实现。
如果您想要一些透明度,即不完全不可见,请务必启用混合。 (网上有很多关于如何进行混合的信息。在帖子中解释太多了。)
GLES20.glEnable(GLES20.GL_BLEND);
渲染透明对象后,
GLES20.glDisable(GLES20.GL_BLEND);