Graphics Love2D中网格上奇怪的纹理行为,需要帮助才能达到我期望的效果
以下代码具有此结果: 我想知道怎样才能得到这样的结果:Graphics Love2D中网格上奇怪的纹理行为,需要帮助才能达到我期望的效果,graphics,lua,mesh,love2d,Graphics,Lua,Mesh,Love2d,以下代码具有此结果: 我想知道怎样才能得到这样的结果: 如果不使用3D库,如果不实现透视,就无法获得真实的深度效果。问题是多边形是由二维三角形构成的,只能应用二维效果,如剪切或缩放(作为一个整体)。纹理中的平行线将始终平行,而底部图像则不是这样,因为它们会向消失点收敛 更多阅读请参阅 更改纹理贴图的坐标可以通过向消失点(而不是缩放)剪切,在视觉上最小化某些瑕疵 如果纹理中的线是独立三角形的一部分,则它们不必平行,因此添加更多三角形可以使它们彼此剪切,但需要更多的剪裁 对于不同样式的纹理,修改纹
如果不使用3D库,如果不实现透视,就无法获得真实的深度效果。问题是多边形是由二维三角形构成的,只能应用二维效果,如剪切或缩放(作为一个整体)。纹理中的平行线将始终平行,而底部图像则不是这样,因为它们会向消失点收敛 更多阅读请参阅 更改纹理贴图的坐标可以通过向消失点(而不是缩放)剪切,在视觉上最小化某些瑕疵 如果纹理中的线是独立三角形的一部分,则它们不必平行,因此添加更多三角形可以使它们彼此剪切,但需要更多的剪裁 对于不同样式的纹理,修改纹理坐标和使用更多三角形都可能有问题,因此您可能需要根据具体情况对其进行调整
local mesh = nil
local img = love.graphics.newImage("test_blue.png")
function love.load()
mesh = love.graphics.newMesh(5, img, "strip")
local top_left = {125, 100, .125, 0, 255, 255, 255, 255}
local top_right = {150, 100, .875, 0, 255, 255, 255, 255}
local bot_right = {200, 400, 1, 1, 255, 255, 255, 255}
local bot_left = {100, 400, 0, 1, 255, 255, 255, 255}
local bot_mid = {150, 400, .5,1, 255, 255, 255, 255}
mesh:setVertices{
bot_left, top_left, bot_mid, top_right, bot_right,
}
end
function love.draw()
love.graphics.draw(mesh, 200, 0)
end
谷歌上的许多线程通常会解释如何构建能够修复此问题的着色器,并且有多种方法(标记:透视正确纹理贴图) 如果您想构建自己的着色器或使用不同于Love2D的源着色器,请注意,Love2D当前使用GLSL v.1.20,但有一些小改动 有一个论坛线程,您可以获得完整的着色器文件,目前为Love2D v.0.10.2。使用简单,代码注释正确
醉酒的_munki发帖»2017年4月26日星期三上午11:03底部图像有深度(3D效果),而爱情是2D库。@rpattiso深度?真正地我只看到漂亮的2d多边形(或者可能是歪斜)-我不知道Love2D,但看起来他们绘制的是三角形,而不是三角形列表,或者索引错误等等…我们目前使用“三角形扇形”作为我们的MeshDrawMode,在下图中,纹理宽度的缩放是距离的函数。请注意,在上图中,左三角形和右三角形中的棋子在其三角形内的大小从未改变?着色器可以操纵纹理的坐标,也可以修改纹理本身以模拟深度效果,或者只使用3D库。@Jan'splite'Kondelík查看底部图像纹理中的垂直线,它们会聚到一个消失点。因此,这不是正交投影,因为这些线在纹理中是平行的。这就是纹理贴图中的透视正确性问题。如果你用你的语言写一个使用正交投影、三角形和2d坐标的答案,我可以将其转换为Love,但我说这是不可能的,纹理中的垂直线必须在正交投影中保持平行。谢谢你提供的信息,看来我们需要从另一个角度来看待这个问题。。。
local mesh = nil
local img = love.graphics.newImage("test_blue.png")
function love.load()
mesh = love.graphics.newMesh(5, img, "strip")
local top_left = {125, 100, .125, 0, 255, 255, 255, 255}
local top_right = {150, 100, .875, 0, 255, 255, 255, 255}
local bot_right = {200, 400, 1, 1, 255, 255, 255, 255}
local bot_left = {100, 400, 0, 1, 255, 255, 255, 255}
local bot_mid = {150, 400, .5,1, 255, 255, 255, 255}
mesh:setVertices{
bot_left, top_left, bot_mid, top_right, bot_right,
}
end
function love.draw()
love.graphics.draw(mesh, 200, 0)
end