所以我的问题和标题完全一样。我不是在寻找一个具体的代码示例,只是一些关于任何首选方法的想法/指南。
在我的2D游戏引擎中,我希望有一个网格表示一定数量的像素(例如32x32像素)。我特别希望能够定义,每个网格在世界空间的宽度和高度,在所有线上有一个一致的笔画宽度,并能够根据相机缩放调整瓷砖的大小。
我曾经尝试过几种不同的方法来绘制这个网格:
,
有人有更好的解决办法吗?在我所有的方法中,我从来没有尝试过根据相机的缩放水平动态调整网格。因此,对于这些方法是否是典型的解决方案,或者是否有更好的解决方案,我们将不胜感激。另外,如果你对如何将这些方法扩展到3D空间有任何想法的话,这也会很好,我似乎找不到一个很好的方法,在世界空间绘制的线条上得到一个一致的笔画宽度。
我的引擎目前也在使用Opengl和C++进行编码,所以我主要关注如何使用现代的opengl,而不是直接模式来实现这个功能。
下面是我想要达到的目标:

编辑:我主要关注渲染技术。你用过几个四角码吗?一个平面和一个复杂的着色器?还是每一行用一个四角码?或者完全是别的什么?
这是我的尝试之一,作为我试图达到的外观和感觉的另一个参考。我只是情不自禁地认为必须有一个比我尝试过的方法更好的方法。

发布于 2020-06-18 07:03:01
不管呈现方法如何,首先必须计算网格。我这样做:
世界坐标下屏幕的
(x0,y0,x1,y1) 最好的方法是拥有3x3矩阵,并将从世界坐标转换为GL屏幕空间的所有转换积累起来:
vec2世界,屏幕;mat3 w2s;screen = w2s* world;
为了获得AABB,我们需要相反的屏幕角转换成世界:
mat3 s2w;s2w =反向(W2s);world =S2W*屏幕;
因此,只需将所有4种组合的selecting...
x,y (AABB)让它们称为(x0,y0,x1,y1),这个矩阵对于鼠标交互也是额外有用的,因为它将把鼠标(如果转换为屏幕坐标)转换为世界坐标,您可以使用它来编辑,(+/-1,+/-1) size gx。从AABB计算网格大小。简单地说,如果你的网格是某个世界单位大小的基础(比如10),那么简单地说,网格正方形将会有多大。为了简单起见,我只做单轴(要么使用两个轴的最小值,要么分别使用两个轴):
//假设x0=-50,x1=+180 gx = log10(x1-x0);//最大功率为10,在gx =2.361727836017597886771122512 gx =地板(gx-1);//使用10倍小的网格gx = pow(10,gx);//您在世界坐标x1=+180 start 中的网格大小。
只需将x0,y0与gx,gy...重新对齐,只需一个轴:
x0 =地板(X0/gx)-1 x0*= x0*=
简单地从x0循环到x1通过步骤gx和渲染行..。通常,当我通过gx/10并在gx步长线之前渲染一个点或不太亮/粗的线时,我也会进行另一次传递。
https://stackoverflow.com/questions/62442050
复制相似问题