我正在尝试使用着色器在球体上绘制很多圆圈。基本算法是这样的:
- 计算从片段(使用它的纹理坐标)到圆心位置的距离(圆心也在纹理坐标中指定)
- 计算从碎片到圆心的角度。
- 根据角度,访问纹理(其中有 360 个像素,红色通道指定半径距离)并检索给定角度的半径
- 如果从片段到圆心的距离小于检索到的半径,则片段的颜色为红色,否则为蓝色。
我想画……在蓝色球体上画 60 个红色圆圈。我让 y 着色器为一个圆圈工作,但如何做 60?这是我到目前为止尝试过的......
我传入了一个指定给定角度半径的数据纹理,但我注意到伪影蔓延。我相信这是由于当我尝试使用以下方法从数据纹理中检索信息时的线性插值:
float returnV = texture2D(angles, vec2(x, y)).r;
其中角度是包含给定角度半径的数据纹理 (Sampler2D),x = 角度 / 360.0(角度为 0 到 360)和 y = 0 到 60(y 是圆数)
我尝试传入一个统一的浮点半径 [360],但我无法通过动态索引访问半径。我什至试过这个烂摊子......
getArrayValue(int index) { if (index == 0) { return radii[0]; } else if (index == 1) { return radii[1]; }
等等 ...
如果我创建一个纹理并将所有圆圈放在该纹理上,然后将蓝色球体与包含圆圈的球体进行多重纹理处理,但正如您所料,我的锯齿非常糟糕。我喜欢根据片段的位置和圆的位置在程序上生成圆的想法,因为几乎没有混叠。但是,我做的不止一个吗?
谢谢!!!
〜螺栓