Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
Graphics Love2D中网格上奇怪的纹理行为,需要帮助才能达到我期望的效果_Graphics_Lua_Mesh_Love2d - Fatal编程技术网

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