Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Opengl,three.js-如何绘制圆形太阳_Javascript_Three.js_Glsl_Webgl_Shader - Fatal编程技术网

Javascript Opengl,three.js-如何绘制圆形太阳

Javascript Opengl,three.js-如何绘制圆形太阳,javascript,three.js,glsl,webgl,shader,Javascript,Three.js,Glsl,Webgl,Shader,我正在使用three.js开发基于glsl大气的大气着色器 首先,我将此着色器应用于球体,并获得了非常好的结果: 原始着色器没有太阳绘图元素,所以我只是使用 float spot = smoothstep(0.0, 1000.0, pMie)*10.0; 然后将此部分添加到return语句中: return iSun * (spot*totalMie+pRlh * kRlh * totalRlh + pMie * kMie * totalMie); 从这个角度看,它看起来不错,但当它靠近屏幕

我正在使用three.js开发基于glsl大气的大气着色器

首先,我将此着色器应用于球体,并获得了非常好的结果:

原始着色器没有太阳绘图元素,所以我只是使用

float spot = smoothstep(0.0, 1000.0, pMie)*10.0;
然后将此部分添加到return语句中:

return iSun * (spot*totalMie+pRlh * kRlh * totalRlh + pMie * kMie * totalMie);
从这个角度看,它看起来不错,但当它靠近屏幕边界时:

它变成了一个椭球体


我能做些什么来修复它呢?

那是透视失真。您所需要的只是缩小相机的视野。

要回答您的问题,我们需要分析您链接的着色器,我怀疑任何人都不会这样做。。。我正在使用不同的方法,请参见。我基本上测试相机光线是否与太阳圆盘相交,我最多支持3颗本地恒星,如果是,我在散射积分到太阳之前设置颜色和强度。在代码中搜索星号。这会从任何角度形成圆形,也会为我们的白色太阳设置适当的颜色,从红色到黄色。