gpt4 book ai didi

opengl - 如何使用 OpenGL 使用 GLSL 着色器将光度均匀地应用到头发颗粒上?

转载 作者:行者123 更新时间:2023-12-01 14:35:40 27 4
gpt4 key购买 nike

我使用头发粒子系统用 Blender 2.66 创建了一个发型。这看起来像这样:

enter image description here

如您所见,亮度已应用到线片段上。转换后,我将发型网格导出为 OBJ 文件格式。我在我的程序中解析了它,渲染看起来像这样:

enter image description here

粒子被绘制为 GL_LINES(在我的 OBJ 文件中,每个面有 2 个顶点)。

在另一个测试程序中,我想用一个简单的线条片段来测试亮度。这是我的顶点缓冲区:

static GLfloat vertices[6] =
{
0.000000f, 0.000000f, -2.000000f,
0.000000f, 0.000000f, 2.000000f
};

static GLfloat normals[6] =
{
0.000000f, 1.000000f, 0.000000f,
0.000000f, 1.000000f, 0.000000f
};

static GLfloat colors[6] =
{
0.000000f, 0.000000f, 1.000000f,
0.000000f, 0.000000f, 1.000000f
};

结果(线在原点旋转,与 X 轴正交 -> 我调用 glLineWidth(5.0f) 以获得更好的可见结果):

enter image description here

通过实时动画,我可以看到亮度是正确的,但只是在线的特定“一侧”。这很正常,因为一条线段应该有无限多条法线,而我只有两条法线(每个顶点一条)​​。我想准确地说这两条法线是方程 Y = 0 -> n(0.0, 1.0, 0.0) 平面的法线。所以我想知道是否可以为每个顶点添加多个法线?我相信 OpengL 不能那样做。但也许另一种方式是可能的。这是一张图,解释了我想做什么来计算线段每个部分的正确亮度:

enter image description here

就像您在上面的第一张图片中看到的那样,Blender 可以在线段上实时计算光度。此外,它是出现在这张图片上的 OpenGL 渲染。所以我确信这样做是可能的。我尝试重复相同的线段坐标两次,但对于第二条线,我应用了相反的法线 n2(0.0, -1.0, 0.0) 但它不起作用。 “另一边”是“黑暗”。两个多边形也是一样的。目前,我使用 GLSL 着色器。我认为使用特殊着色器(如几何着色器或曲面分割着色器)是可能的。也许需要 CUDA 语言。但我不确定。

有谁能帮帮我吗?

最佳答案

这是一个复杂的话题。您应该先阅读 Marschner's 2003 paper在头发照明上。一旦你足够困惑,看看nvidia's explanation这个模型(第 23.3 节,头发着色),其中包括漂亮的图表和着色器代码。

希望这对您有所帮助!

关于opengl - 如何使用 OpenGL 使用 GLSL 着色器将光度均匀地应用到头发颗粒上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15936107/

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