opengl - OpenGL color4 alpha 是如何工作的?

标签 opengl

我正在glColor4f中测试alpha,但是使用glColor4f(1.0, 1.0, 0, 0);的结果与使用glColor4f(1.0, 1.0, 0, 1)相同;

enter image description here

我尝试将 glClearColor(0.0, 0.0, 0.0, 0.0); 更改为 glClearColor(0.0, 0.0, 0.0, 1.0);,但它没有任何改变。

这是我的代码:

#include <GL/glut.h>

void init();
void display();

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(0, 0);
    glutInitWindowSize(300, 300);

    glutCreateWindow("OpenGL 3D View");

    init();
    glutDisplayFunc(display);

    glutMainLoop();
    return 0;
}

void init()
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glOrtho(-5, 5, -5, 5, 5, 15);
    glMatrixMode(GL_MODELVIEW);
    gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glColor4f(1.0, 1.0, 0, 0.01);
    glutWireTeapot(3);

    glFlush();
}

我想知道透明度是如何运作的。谢谢~

最佳答案

所以我看到的第一件事是您没有初始化显示以使用混合。这是通过以下方式完成的:

glEnable(GL_BLEND);

默认情况下,GL 混合处于禁用状态。请参阅此处的描述: http://lmb.informatik.uni-freiburg.de/people/reisert/opengl/doc/glBlendFunc.html

下一步是设置你的混合模式。上面的链接显示了设置混合函数的例程。

此外,如果您查看此处的 glutInitDisplayMode 例程描述: https://www.opengl.org/resources/libraries/glut/spec3/node12.html

它显示“请注意,GLUT_RGBA 选择 RGBA 颜色模型,但它不请求分配任何 alpha 位(有时称为 alpha 缓冲区或目标 alpha)。要请求 alpha,请指定 GLUT_ALPHA。相同适用于 GLUT_LUMINANCE。”

关于opengl - OpenGL color4 alpha 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22265356/

相关文章:

c++ - GLUT 中使用的全局类不好吗?如果是这样,如何避免这种情况?

c++ - 使用 Intel HD 和 NVidia GPU 的 OpenGL 程序

opengl - 初始化 vao 时出错(glCreateVertexArrays())

c++ - 在类中渲染 OpenGL 对象?

c++ - 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?

c++ - 函数 'texelFetchOffset' 的参数 4 必须是常量表达式

opengl - Tizen UI - Enlightenment Foundation 库中的 E17 和 EVAS

C++ OpenGL 用鼠标拖动多个对象

java - glReadPixels 返回错误值

c++ - 如何更改顶点着色器中的 gl_PointSize?