OpenGL Alpha 通道无效
OpenGL Alpha Channel not affective
尝试在 openGL 中制作随时间淡出的对象。
我通过降低我用来绘制对象的颜色的 Alpha 值来实现这一点。但是这个好像对物体没有任何影响,还是画成实心的。
我已将代码简化为简单地绘制三个矩形。每个矩形都使用相同的颜色但不同的 alpha 值绘制。
#include <GLUT/glut.h>
#include <stdlib.h>
void display(void)
{
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
// Set the color to red, with alpha at 100%
float f1[] = {1.0, 0, 0, 1.0};
glColor4fv(f1);
glRecti(10, 10, 110, 110);
// Set the color to red, with alpha at 50%
float f2[] = {1.0, 0, 0, 0.5};
glColor4fv(f2);
glRecti(120, 10, 220, 110);
// Set the color to red, with alpha at 20%
float f3[] = {1.0, 0, 0, 0.2};
glColor4fv(f3);
glRecti(230, 10, 330, 110);
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, w, h);␣
glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 5000.0);
gluLookAt(0, 0, 500, 0, 0, 0, 0, 100, 0);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_ALPHA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(1200, 1200);
int id = glutCreateWindow(argv[0]);
// Set up call back
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
glutDestroyWindow(id);
}
显示的代码都在display()
中。我已经包含了我使用的所有其他函数 openGL 函数,因为我可能没有正确设置某些东西。
您需要启用混合并设置适当的混合函数(参见 Blending). To run an OpenGL instruction, you need an OpenGL Context。上下文是在使用 glutCreateWindow
创建 OpenGL window 时创建的。因此您必须添加glutCreateWindow
.
后的说明
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_ALPHA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(1200, 1200);
int id = glutCreateWindow(argv[0]);
//
// After the window has been created set the window
// To enable the alpha part of the color.
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
// DONE
// Set up call back
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
glutDestroyWindow(id);
}
尝试在 openGL 中制作随时间淡出的对象。
我通过降低我用来绘制对象的颜色的 Alpha 值来实现这一点。但是这个好像对物体没有任何影响,还是画成实心的。
我已将代码简化为简单地绘制三个矩形。每个矩形都使用相同的颜色但不同的 alpha 值绘制。
#include <GLUT/glut.h>
#include <stdlib.h>
void display(void)
{
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
// Set the color to red, with alpha at 100%
float f1[] = {1.0, 0, 0, 1.0};
glColor4fv(f1);
glRecti(10, 10, 110, 110);
// Set the color to red, with alpha at 50%
float f2[] = {1.0, 0, 0, 0.5};
glColor4fv(f2);
glRecti(120, 10, 220, 110);
// Set the color to red, with alpha at 20%
float f3[] = {1.0, 0, 0, 0.2};
glColor4fv(f3);
glRecti(230, 10, 330, 110);
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, w, h);␣
glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 5000.0);
gluLookAt(0, 0, 500, 0, 0, 0, 0, 100, 0);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_ALPHA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(1200, 1200);
int id = glutCreateWindow(argv[0]);
// Set up call back
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
glutDestroyWindow(id);
}
显示的代码都在display()
中。我已经包含了我使用的所有其他函数 openGL 函数,因为我可能没有正确设置某些东西。
您需要启用混合并设置适当的混合函数(参见 Blending). To run an OpenGL instruction, you need an OpenGL Context。上下文是在使用 glutCreateWindow
创建 OpenGL window 时创建的。因此您必须添加glutCreateWindow
.
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_ALPHA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(1200, 1200);
int id = glutCreateWindow(argv[0]);
//
// After the window has been created set the window
// To enable the alpha part of the color.
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
// DONE
// Set up call back
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
glutDestroyWindow(id);
}