相关疑难解决方法(0)

如何在现代OpenGL中进行光线跟踪?

所以,我应该开始点亮我的平面彩色模特.测试应用程序是仅实现最新方法的测试用例,因此我意识到理想情况下它应该实现光线跟踪(从理论上讲,它可能是几年内实时图形的理想选择).

但是我从哪里开始呢?

假设我从未在旧的OpenGL中完成照明,所以我将直接使用不推荐的方法.

应用程序当前正确设置了顶点缓冲区对象,顶点,法线和颜色输入,并以平面颜色正确绘制和转换空间模型.

是否存在从平坦的彩色顶点到通过GLSL获得正确最终结果所需的全部信息的来源?理想情况下,可能需要任何其他额外的照明方法来补充它.

opengl graphics raytracing opengl-3

28
推荐指数
3
解决办法
4万
查看次数

OpenGL中的着色器是什么?我们需要它们是什么?

我不是母语是英语,当我试图通过openGL的维基和教程www.learnopengl.com得到的,它永远不会结束的直觉概念如何整部作品可以理解的.有人可以用更抽象的方式向我解释它是如何工作的吗?什么是顶点着色器和片段着色器以及我们将它们用于什么?

opengl shader

18
推荐指数
2
解决办法
1万
查看次数

任何人都可以解释这个GLSL片段着色器在做什么吗?

我意识到这是一个以数学为中心的问题,但是...如果你看一下这个网页(并有一个很好的显卡)http://mrdoob.github.com/three.js/examples/webgl_shader.html

如果您查看源代码,您会注意到一个可怕的片段着色器.

我不是在寻找一个详细的解释,而是一个关于正在发生的事情的想法,或者关于这里究竟发生了什么的信息来源.我不是在追踪GLSL,而是关于数学的信息.我意识到这可能更适合Math StackExchange网站,但我想先在这里试试......

<script id="fragmentShader" type="x-shader/x-fragment">

            uniform vec2 resolution;
            uniform float time;

            void main() {

                vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / resolution.xy;
                float a = time*40.0;
                float d,e,f,g=1.0/40.0,h,i,r,q;
                e=400.0*(p.x*0.5+0.5);
                f=400.0*(p.y*0.5+0.5);
                i=200.0+sin(e*g+a/150.0)*20.0;
                d=200.0+cos(f*g/2.0)*18.0+cos(e*g)*7.0;
                r=sqrt(pow(i-e,2.0)+pow(d-f,2.0));
                q=f/r;
                e=(r*cos(q))-a/2.0;f=(r*sin(q))-a/2.0;
                d=sin(e*g)*176.0+sin(e*g)*164.0+r;
                h=((f+d)+a/2.0)*g;
                i=cos(h+r*p.x/1.3)*(e+e+a)+cos(q*g*6.0)*(r+h/3.0);
                h=sin(f*g)*144.0-sin(e*g)*212.0*p.x;
                h=(h+(f-e)*q+sin(r-(a+h)/7.0)*10.0+i/4.0)*g;
                i+=cos(h*2.3*sin(a/350.0-q))*184.0*sin(q-(r*4.3+a/12.0)*g)+tan(r*g+h)*184.0*cos(r*g+h);
                i=mod(i/5.6,256.0)/64.0;
                if(i<0.0) i+=4.0;
                if(i>=2.0) i=4.0-i;
                d=r/350.0;
                d+=sin(d*d*8.0)*0.52;
                f=(sin(a*g)+1.0)/2.0;
                gl_FragColor=vec4(vec3(f*i/1.6,i/2.0+d/13.0,i)*d*p.x+vec3(i/1.3+d/8.0,i/2.0+d/18.0,i)*d*(1.0-p.x),1.0);

            }

        </script>
Run Code Online (Sandbox Code Playgroud)

math shader webgl

7
推荐指数
1
解决办法
5515
查看次数

标签 统计

opengl ×2

shader ×2

graphics ×1

math ×1

opengl-3 ×1

raytracing ×1

webgl ×1