Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
通过顶点Alpha进行OpenGL纹理处理,如何避免跟随对角线?_Opengl - Fatal编程技术网

通过顶点Alpha进行OpenGL纹理处理,如何避免跟随对角线?

通过顶点Alpha进行OpenGL纹理处理,如何避免跟随对角线?,opengl,Opengl,这是我目前的节目。我知道它非常难看,我在网上发现了两种随机纹理(“熔岩”和“纸”),它们看起来都不平铺。这不是目前的问题 我正试图找出RPG的第一步。这是一个10x10高度贴图的自上而下的屏幕截图(当前设置为所有0,所以它只是一个平面),我通过每四个纹理进行一次纹理处理,每个顶点都有每个纹理的alpha值,以便它们与OpenGL混合 问题是,请注意纹理沿对角线的趋势,即使我使用GL_QUAD绘制,这大概是因为四边形被转化为两个三角形的集合,然后角上的alpha值沿斜边具有更多权重。。。但我没想到

这是我目前的节目。我知道它非常难看,我在网上发现了两种随机纹理(“熔岩”和“纸”),它们看起来都不平铺。这不是目前的问题

我正试图找出RPG的第一步。这是一个10x10高度贴图的自上而下的屏幕截图(当前设置为所有0,所以它只是一个平面),我通过每四个纹理进行一次纹理处理,每个顶点都有每个纹理的alpha值,以便它们与OpenGL混合

问题是,请注意纹理沿对角线的趋势,即使我使用GL_QUAD绘制,这大概是因为四边形被转化为两个三角形的集合,然后角上的alpha值沿斜边具有更多权重。。。但我没想到这会有什么影响。通过绘制四边形,我希望即使它们在较低的层次上被分割成三角形,顶点alpha也会导致纹理从顶点向外呈圆形梯度辐射

我怎样才能修复它使它看起来更好?我需要放弃这个,尝试一个完全不同的方法吗?对于这样的事情有不同的方法吗?我也想听听其他的选择

请随意提问,我会在这里刷新,直到我得到一个有效的答案,所以我会尽快评论。 谢谢

编辑: 这就是我想要实现的目标。不,我显然不是“试图制作MMORPG”的数十亿Noob中的一员,我以它为例,因为它非常像我想要的:
你认为这是怎么做到的?它的一部分必须是顶点阿尔法,就像我做的,因为平滑的梯度。。。但也许他们在一个磁贴中有一个不同三角形配置的列表,每个磁贴存储它使用的配置?例如,配置1是左上角的三角形,右下角的三角形,2是右上角和左下角的三角形,3是顶部的四边形和底部的四边形,等等?你能想出我错过的任何其他方式吗?或者如果你已经弄明白了,那么请分享他们是如何做到的

我认为你做得对,但是你应该提高你的高度图的分辨率以获得更好的细分

例如,查看此高度贴图渲染器:


它在低分辨率下显示相同的工件,但如果增加迭代次数,效果会更好。我自己从来没有这样做过,但我读过几本指南(我现在找不到),它看起来非常简单,甚至可以通过使用着色器进行优化

创建主纹理以控制4个子纹理的混合。使用主纹理的r、g、b、a组件作为每个子纹理(熔岩、纸张等)的百分比混合。您可以使用paint.net、photostop、gimp轻松绘制主纹理,只需在每个颜色通道中绘制即可。可以使用所有5个纹理在手之前计算结果纹理,也可以使用片段着色器动态计算结果。我也没有一个很好的例子,但我想你可以考虑到你已经走了多远


最终结果将是“像素”效果混合(取决于纹理分辨率和过滤),并将避免顶点混合问题。

对角线伪影是由所有四边形沿同一对角线拆分为三角形造成的。为四边形定义点[0,1,2,3]。每个四边形被拆分为三角形[0,1,2]和[1,2,3]。尝试使用GL_三角形绘制,并交替选择对角线。使用GL_三角形条带或GL_四边形条带可能有更有效的方法来实现这一点。

不太清楚如何混合纹理。嘿,Ricket。对于每个顶点,我存储它的高度和alpha值,每个纹理一个。例如,熔岩纹理为0.3,纸张纹理为0.7。然后,当我渲染时,我循环通过每组4个顶点。在其中,我循环通过这4个顶点使用的每个纹理。现在,对于每个纹理,我在完全相同的坐标处绘制一个四边形(由顶点的位置及其高度决定)。对于每个顶点,我设置了glColor4f(1.0f、1.0f、1.0f、v.textures[i].alpha)和适当的纹理坐标(其中左下角为0,右上角为1)。基本上,我对每个四边形的每个纹理进行1次传递。这意味着我在同一个位置画了几个四边形;它们与OpenGL的alpha混合,使用glColor4f alpha值。我希望有一种方法可以解决这个问题:(我可能在早上问得太早了……我想我可能看得太近了,但我希望会有一个不同的解决方案,以低分辨率避免这个问题……即使将其放大到100x100,也会显示清晰的对角线,尽管当我真的将其制作成一个编辑器而不仅仅是d时,可以使用它我展示了一个随机模式…这实际上是写在我的另一个问题上的:我正试图避免像那样有一个完整的alpha图,但最终可能不得不这样做…看起来,看那个RuneScape图像,我看不到任何像素。这就是我想要的,这让我觉得我的方法有点不对劲,但我没有我认为他是对的一般概念。我不想要像素完美。这是光栅和矢量图形之间的区别…矢量图形是我想要的。也许你可以对整个地形使用这种技术,比如草地、石头、沙子。然后对路径、边等使用特殊的瓷砖细节纹理。我会继续给你公认的answ呃,因为我还没有标记一个,这确实是我发现的。交替三角形方向是许多heightmap引擎不做的事情,但似乎是一个很好的技巧。我发现了“纹理飞溅”,并打算存储不同alphamap的列表,每个平铺将有一个alphamap和两个纹理,然后OpenGL将混合