相关疑难解决方法(0)

OpenGL ES2 Alpha测试问题

我在3D中渲染具有alpha纹理的多个对象.所有纹理加载都很好但是当我尝试将它们呈现在彼此前面时,我得到以下结果:

左边是我的. 对,就是我想要的

左边是我的.它应该是正确的.网格只是为了帮助可视化透视.

红色圆圈纹理前面的纹理被剪裁.我四处寻找答案,它告诉我使用:

GLES20.glEnable( GLES20.GL_BLEND );
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA );
Run Code Online (Sandbox Code Playgroud)

但我使用它仍然无法正常工作.我在onSurfaceCreated()函数中正确放置的设置是:

GLES20.glClearColor( 0.75f, 0.85f, 1f, 1.0f );
GLES20.glEnable( GLES20.GL_BLEND );
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA );
GLES20.glEnable( GLES20.GL_DEPTH_TEST );
GLES20.glDepthFunc( GLES20.GL_LEQUAL );
GLES20.glDepthMask( true );
GLES20.glClearDepthf( 1f );
Run Code Online (Sandbox Code Playgroud)

我的片段着色器是:

uniform sampler2D texture;
varying vec2 texCoord;  
void main(){ 
   gl_FragColor = texture2D( texture, texCoord );
} 
Run Code Online (Sandbox Code Playgroud)

我是否必须在Android清单中包含任何内容才能启用Alpha测试?我不想最终必须手动组织我的多边形或使用alpha discard(),因为我需要并希望一些像素是半透明的.

如何让3D alpha测试深度缓冲区工作?

java 3d android depth-buffer opengl-es-2.0

9
推荐指数
1
解决办法
5743
查看次数

如何在OpenGL上使立方体面不透明?

我正在编写一个程序在OpenGL上绘制一个立方体,并在单击鼠标时不断旋转它。在特定角度下,我可以透视立方体(透明)。我启用了深度测试,所以我不知道为什么会这样。我不确定是否已正确启用它。

在此图像中,隐藏的面孔仍然可见

#include <math.h>
#include <vector>
#include <Windows.h>
#include <gl\glut.h>

using namespace std;


void myInit() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(0, 0, 0, 1);
    glOrtho(-2, 2, -2, 2, 2, -2);
    glMatrixMode(GL_MODELVIEW);
}

float Cube[][3] = { {-1, -1, -1}, {1, -1, -1}, {1, 1, -1}, {-1, 1, -1}, {-1, -1, 1}, {1, -1, 1}, {1, 1, 1}, {-1, 1, 1} };
float Colors[][3] = { {0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {0, 0, 1}, {1, 1, 0}, {0, 1, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glut depth-testing

4
推荐指数
1
解决办法
61
查看次数

OpenGL GL_DEPTH_TEST vs glDepthFunc和glDepthMask?

我一直在使用glDisable(GL_DEPTH_TEST)禁用深度测试,认为它只会禁用深度"测试".我之所以感到困惑的原因是因为我创建了两个函数,一个用于禁用深度"test",另一个用于禁用深度"写入"glDepthMask(GL_FALSE);

如果禁用GL_DEPTH_TEST禁用"测试"和"写入",那么它是否相当于:

glDepthFunc(GL_ALWAYS?); // DISABLE TESTS (OR ACTUALLY ALWAYS LET THE TEST SUCCEED)
glDepthMask(GL_FALSE); // DISABLE WRITES
Run Code Online (Sandbox Code Playgroud)

我认为GL_DEPTH_TEST除非我想禁用测试和写入,否则禁用很少,我想知道哪一个更好.措辞似乎令人困惑,但也许只是我.我认为禁用深度测试glDepthFun(GL_ALWAYS)仍然会进行比较,我想在仍然允许写入的情况下,没有办法完全禁用深度测试?

opengl graphics zbuffer depth-buffer

2
推荐指数
1
解决办法
439
查看次数