我试图在使用着色器的球体上绘制大量的圆。基本alogrith是这样的:球体上的绘制圆圈
- 从所述片段计算的距离(使用它的纹理坐标),以圆的中心的位置(圆的中心也是在纹理坐标指定)
- 从计算角度朝向圆心的尖锐。基于角度,访问纹理(其中具有360个像素并且红色通道指定半径距离),并且如果从片段到圆心的距离较小,则检索给定角度的半径
- 比检索的半径大,则片段的颜色是红色的,否则是蓝色的。
我想画...说60蓝色球体上的红色圆圈。我有着色器工作了一个循环,但如何做60?这是我到目前为止已经试过....
我在数据纹理指定给定角半径过去了,但我发现文物在蠕动,我相信这是由于线性插值时我尝试使用检索来自数据纹理信息:
float returnV = texture2D(angles, vec2(x, y)).r;
其中角是数据的纹理(Sampler2D),其包含对于给定的角度的半径,并且x =角/ 360.0(角度为0至360)和y = 0至60(y是圆圈编号)
我试过p分配统一的浮动半径[360],但我无法通过动态索引访问半径。我甚至试过这个烂摊子......
getArrayValue(int index) { if (index == 0) { return radii[0]; } else if (index == 1) { return radii[1]; }
等等...
如果我创建一个纹理,并把各界对纹理,然后多纹理蓝色球与包含它的圆圈的工作,但正如你所期望的,我有非常糟糕的别名。我喜欢根据片段的位置和圈的顺序生成圆的想法,因为实际上没有混叠。但是,我是否比一个人做矿石?
Thx !!!
〜博尔特
谢谢!我认为它很可能必须在顶点程序中做一些工作。 Thx为灵感! – Boltimuss 2009-07-15 12:34:55
我已在此答案中添加了评论。 (由于格式和大小的限制,它在下面显示为答案)。 – RJFalconer 2009-12-31 15:31:48