写这个着色器有多难?多点阴影照明

时间:2015-05-24 04:20:51

标签: c++ shader glew

所以,我现在有一个简单的项目。基本上它只是一堆长方体,所有的轴都是轴对齐的...所以它的几何形状非常简单。

无论如何,我正在考虑为它添加更好的着色器。目前我正在使用"平面着色器"这是GLShaderManager中的股票着色器。它用平面颜色着色所有东西。但是如果我能像下面那样构建一个着色器,我会很高兴。

基本上我想要一个在不同位置具有不同强度的点光源阵列的着色器。 可能是这样定义的。

struct Light {
float x;
float y;
float z;
float intensity;
};

Light Lighting[20];

基本上基于关卡几何和灯光,我很想模拟基本的灯光和阴影,在玩家下方有一个圆圈也很酷(就像玩家实际上是他们的一样)。

这有多难?我如何将它传递给我的水平几何和光阵列。 (请注意,即使每个长方体都是自己的QUADS批次,也可以轻松制作存储数据的任何变量。)

我正在使用Glew,GLTools,GLShaderManager,GLBatch,visual studio 2010,可能是什么" GSHL"。

如果您能让我知道这样的着色器有多复杂,请告诉我。此外,如果你可以链接它,很容易找到一个在线工作的着色器。

这两种着色器有什么区别? (顶点和片段)。

1 个答案:

答案 0 :(得分:0)

我会说它相对简单,但现代GL的事情是初始学习曲线非常陡峭。起初,似乎你必须卷起袖子,学习如何做所有事情(基本上是正确的)但后来,它似乎开始变得比以往任何时候都容易更容易预测,因为你在司机的座位。

您要学习的第一件事就是了解如何指定从CPU到GPU的属性。对于不会在每个顶点或每个片段的基础上变化的属性,例如光的位置和强度,您需要统一的属性。查看使用glUniform*函数的示例,了解如何执行此操作。这将允许您进行实验,将值从CPU端传递到GPU端,然后查看它们如何影响着色器以加速您的学习。

在此之后,如果光线从具有phong着色的表面反射,分离环境,漫反射和镜面反射术语,则值得学习如何计算直接光照。

稍后您甚至可能希望将此灯光数据存储到环境贴图中。这将使您能够在不影响着色器速度的情况下使用任意数量的灯光。

关于顶点与片段着色器,顶点着色器在逐个顶点的基础上计算事物,包括然后使用的片段着色器的数据。片段着色器有点像像素着色器(在HLSL中,它实际上只是称为像素着色器')。它涉及光栅化这些顶点之间的内容并逐个像素地运行(但是有一些潜在的过度绘制)。通常对于照明,逻辑的真正核心将在片段着色器中,而顶点着色器用作计算片段着色器的所有相关值以进行插值和使用的中间步骤。顶点着色器是3D几何管道的一部分,而片段着色器是2D光栅化的一部分。

它不应该花费太长时间或者太难以掌握这一点,但是你想要慢慢接近这种类型并且在babysteps中。为您的软件建立照明/着色管道涉及许多设置工作,具有您想要的精确特性,对于最终工作,您希望提前做好计划。因此,建立一个单独的废料项目并开始尝试去弄清楚工作原理是很好的。