2015-10-06 78 views
1

我所试图做的是,当我画的每一个对象,我检查,看它是否被标记,如果标记,写物体附近的一些文字,使用glRasterPos2f /我在屏幕上设置的位置,然后是glutBitmapCharacter。glRasterPos单位glutBitmapCharacter

对于glRasterPos2,我看到很多的实例与像素坐标作为参数(例如:100,100)通过。像素坐标对我来说不起作用,而我必须翻译成[-1.0 1.0]比例的坐标。 [-1 -1]是屏幕的左下角,[1 1]是右上角。我的例子已经注意到

一件事是改变的正投影。这是我的问题的原因吗?

我有gluPerspective();在开始时设置一次,并且不会改变(现在)。如果每次我想在像素坐标处写文本时都必须更改为gluOrtho,则看起来很乱。对于每个对象,我从gluPerspective()开始,然后根据需要更改gluOrtho(),然后再返回。

我曾经想过另一种选择,是因为事情似乎在[-1.0 1.0]范围内工作,我可以手动转换屏幕坐标到规模。但是这对于性能来说似乎也是混乱和不好的。

有关如何进行的任何建议?

+0

你有什么问题?您询问“我的问题的原因”,但我没有看到任何描述问题的内容。 –

+0

我的问题是,如果我使用glRasterPos2f(4.0,4.0);作为一个例子,随后对glutBitmapCharacter的调用不会显示在屏幕上。在这一点上,我看到了不同的行为与我见过的一些例子。但是,如果我使用glRasterPos2f(x/windowWidth * 2-1,y/windowHeight * 2-1),我会在屏幕上显示x,y位置处的文本。 –

回答

1

函数的glRasterPos函数将使用当前的ModelView和Projection矩阵转换坐标,类似于应用于顶点数据的坐标转换。

您可以在此阶段使用任何您喜欢的矩阵。如果使用与绘制对象相同的矩阵,则可以简单地使用glRasterPos3f变体直接指定3D对象坐标中的点。

1

glRasterPos采用相同的坐标系图元的坐标。因此,如果您已经为3D对象设置了转换并为绘制该对象创建了调用,则可以简单地将您用于对象顶点的相同坐标传递到glRasterPos

例如,如果要将文本放在顶点旁边,则可以使用与顶点相同的坐标调用glRasterPos,同时仍然设置相同的变换。然后glRasterPos将使用也应用于顶点的模型视图和投影变换来变换这些坐标,并且您使用glutBitmapCharacter()绘制的文本的左下角将与顶点对齐。

如果要将文本放置在给定的像素位置,可以使用glWindowPos而不是glRasterPos

顾名思义,它需要在窗口坐标它的参数,这意味着没有一个模型/视图/凸起的被应用。窗口坐标以像素为单位,原点位于窗口的左下角。

例如,下面的调用将设置光栅位置100个像素的权利和30个像素以上窗口的左下角:

glWindowPos2i(100, 30); 

使用这种电话,你不必担心改变渲染文本的转换。

+0

但是OP想要“在对象附近写入一些文本”,这需要考虑转换。 – usr2564301

+1

@Jongware嗯,是的。对于这种情况,'glRasterPos'实际上应该很好。他们谈论“我的问题”,但没有真正说出问题所在。 –