level 7
永远的伊厨🌸
楼主
最近在整一个函数绘图软件,关于显函数绘制部分有思路,了解绘制原理,但是关于隐函数的绘制还是没啥头绪。
前几天想到了个把x,y传入shader中由shader计算后绘制的方法,然而调了一晚上啥也没搞出来,我是这样写的
float pw = 512.0; // 定义x,y基向量(ps:i=pw/1024,j=ph/1024)
float ph = 512.0;
// 储存uv坐标并对其进行放大处理
vec2 uv = (v_vTexcoord * vec2(pw, ph) - vec2(pw / 2.0, ph / 2.0)) / 2.0; // 使坐标原点回到纹理中心
float end = (pow(uv.x, 2.0) + pow(uv.y, 2.0)) / 100.0; // 计算隐函数方程的值
gl_FragColor = v_vColour * vec4(0.0, 0.0, 0.0, floor(2.0 * clamp(abs(end), 0.0, 1.0) - abs(end))); // 只保留符合条件的值(只保留1或负数,没有任何小数或大于1的数)
把这个shader套用到一个1024*1024大小的spr上,绘制的时候没有出现任何东西,但是如果把gl哪一行代码改成
gl_FragColor = v_vColour * vec4(0.0, 0.0, 0.0, floor(2.0 * clamp(abs(end), 0.0, 1.0) - abs(end)));
2022年03月04日 16点03分
1
前几天想到了个把x,y传入shader中由shader计算后绘制的方法,然而调了一晚上啥也没搞出来,我是这样写的
float pw = 512.0; // 定义x,y基向量(ps:i=pw/1024,j=ph/1024)
float ph = 512.0;
// 储存uv坐标并对其进行放大处理
vec2 uv = (v_vTexcoord * vec2(pw, ph) - vec2(pw / 2.0, ph / 2.0)) / 2.0; // 使坐标原点回到纹理中心
float end = (pow(uv.x, 2.0) + pow(uv.y, 2.0)) / 100.0; // 计算隐函数方程的值
gl_FragColor = v_vColour * vec4(0.0, 0.0, 0.0, floor(2.0 * clamp(abs(end), 0.0, 1.0) - abs(end))); // 只保留符合条件的值(只保留1或负数,没有任何小数或大于1的数)
把这个shader套用到一个1024*1024大小的spr上,绘制的时候没有出现任何东西,但是如果把gl哪一行代码改成
gl_FragColor = v_vColour * vec4(0.0, 0.0, 0.0, floor(2.0 * clamp(abs(end), 0.0, 1.0) - abs(end)));
