gpt4 book ai didi

opengl - OpenGL 中具有粒子效果的 Alpha 透明度

转载 作者:行者123 更新时间:2023-12-01 12:01:30 24 4
gpt4 key购买 nike

我在 OpenGL 中使用 GL_POINTS 有一个简单的粒子效果。以下被调用,被传递的粒子顺序是从最远离相机的粒子到最后一个最接近相机的粒子:

void draw_particle(particle* part) {
/* The following is how the distance is calculated when ordering.
* GLfloat distance = sqrt(pow(get_camera_pos_x() - part->pos_x, 2) + pow(get_camera_pos_y() - part->pos_y, 2) + pow(get_camera_pos_z() - part->pos_z, 2));
*/

static GLfloat quadratic[] = {0.005, 0.01, 1/600.0};
glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, quadratic);
glPointSize(part->size);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_POINT_SPRITE_ARB);
glEnable(GL_TEXTURE_2D);

glBegin(GL_POINTS);
glColor4f(part->r, part->g, part->b, part->a);
glVertex3f(part->pos_x, part->pos_y, part->pos_z);
glEnd();

glDisable(GL_BLEND);
glDisable(GL_POINT_SPRITE_ARB);
}

但是,在渲染时存在一些伪像,如下面的效果所示:artifacted image http://img199.imageshack.us/img199/9574/particleeffect.png

如果我禁用深度测试,问题就会消失,但我需要效果能够与场景的其他元素交互,根据深度出现在同一 GL_TRIANGLE_STRIP 元素的前面和后面。

最佳答案

如果您的粒子已经排序,您可以像这样渲染:

  • 使用 GL WRITE DEPTH 渲染粒子但没有深度测试(我不记得确切的常量)
  • 使用深度测试渲染场景的其余部分。

通过这种方式,您一定会获得与漂亮的粒子的场景交互。

关于opengl - OpenGL 中具有粒子效果的 Alpha 透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/901885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com