Glsl Love2d着色器-获取像素着色器中所有网格顶点的位置

Glsl Love2d着色器-获取像素着色器中所有网格顶点的位置,glsl,shader,love2d,Glsl,Shader,Love2d,拜托,我有一个着色器,它可以在网格四边形上用适当的插值正确地绘制纹理。 问题是,我目前必须将像素着色器中单独使用的所有4个网格点的数据作为“外部”数据发送,以获得像素的正确位置 我需要为像素着色器提供所有4个位置以获得正确的位置,但我想从love.graphics.draw()中发送的数据中获取它们,这样我就不必重复发送。两者都可以提高性能和使代码更干净。(网格不包含z坐标,因此从第四坐标导出正确的插值) love.graphics.draw(mesh,…)期间发送的变换在TransformMa

拜托,我有一个着色器,它可以在网格四边形上用适当的插值正确地绘制纹理。 问题是,我目前必须将像素着色器中单独使用的所有4个网格点的数据作为“外部”数据发送,以获得像素的正确位置

我需要为像素着色器提供所有4个位置以获得正确的位置,但我想从love.graphics.draw()中发送的数据中获取它们,这样我就不必重复发送。两者都可以提高性能和使代码更干净。(网格不包含z坐标,因此从第四坐标导出正确的插值)

love.graphics.draw(mesh,…)期间发送的变换在TransformMatrix中对我可用,并且已经被应用,但我仍然无法访问love.graphics.draw()期间发送的网格顶点,因此我预先将其作为“extern”提供

是否可以访问像素着色器中的所有网格顶点,而无需在附加功能中提供阵列

*“像素中的数学”着色器源自屏幕坐标,没有直接应用于其上的网格位置或变换

网格数据:

v = {
    { 0,0, 0,0, 255,0,255,255 };
    { 150,0, 1,0, 0,255,255,255 };
    { 100,200, 1,1, 255,255,0,255 };
    { 0,200, 0,1, 255,255,255,255 };
};
mesh = love.graphics.newMesh( v, "fan" )
mesh:setTexture( image )
绘制网格:

love.draw()
    shader.on() --shader on
    shader.sendVertices( v[1],v[2],v[3],v[4] )
    love.graphics.draw( mesh, 250, 250, 0, 2, 3) --mesh to draw
    shader.off() --shader off
end
用于为像素着色器提供顶点的函数:

function sendVertices(v1,v2,v3,v4)
     gl_send(glsl,"vv",v2,v3,v4,v1,v1)
end
着色器:

glsl=love.graphics.newShader[[
    extern vec2[4] vv;

    vec2 v1 = vv[0];
    vec2 v2 = vv[1];
    vec2 v3 = vv[2];
    vec2 v4 = vv[3];

    //vertex shader unmodified

    //pixel shader
    some really long math derived from screen_coords, using all 4 positions 
    v1 to v4, which are exactly same positions as vertices sent to vertex 
    shader before matrix transformation.
]]

这听起来很像。你想做什么,你觉得你需要这样做?更像为什么我需要这样做,我正在“尝试修复”一个在我之前制作的着色器,以更正确地工作,建立在现有的数学基础上。如果真的有这样做的理由,我不确定。我只需要使用x,y坐标,所以更合适的解决方案可能是修改顶点着色器,然后在像素着色器中使用正确的坐标,但这仍然意味着我需要访问顶点着色器中发送到网格的所有顶点,而不是像素着色器,只要我不提供x,y,z和相机位置。如果您询问是否有必要这样做,则不是。这个着色器对我来说更像是一个挑战,因为我想弄清楚love2d着色器是如何运作的,以便能够在将来为它构建适当的着色器,或者在这方面为其他人提供适当的帮助。对我来说,仅仅想弄清楚数据是如何在TransformMatrix中发送和使用的是一件非常重要的事情,因为这些都没有发布在wiki或其他任何地方,而这些问题已经被放弃的人问到了。这听起来非常像。你想做什么,你觉得你需要这样做?更像为什么我需要这样做,我正在“尝试修复”一个在我之前制作的着色器,以更正确地工作,建立在现有的数学基础上。如果真的有这样做的理由,我不确定。我只需要使用x,y坐标,所以更合适的解决方案可能是修改顶点着色器,然后在像素着色器中使用正确的坐标,但这仍然意味着我需要访问顶点着色器中发送到网格的所有顶点,而不是像素着色器,只要我不提供x,y,z和相机位置。如果您询问是否有必要这样做,则不是。这个着色器对我来说更像是一个挑战,因为我想弄清楚love2d着色器是如何运作的,以便能够在将来为它构建适当的着色器,或者在这方面为其他人提供适当的帮助。对我来说,仅仅想弄清楚数据是如何在TransformMatrix中发送和使用的是一件非常重要的事情,因为这些都没有发布在wiki或其他任何地方,而这些问题已经被放弃的人问到了。