OpenGL - GlVertex相对/绝对位置

时间:2011-04-27 18:24:50

标签: opengl absolute

Imagen我有一个2D点(x,y)列表,用于描述我简单游戏中的2D地形。 然后我用glVertex()在GL_POINTS模式下绘制所有这些点。

然后我有一个Ball也有(x,y)坐标。

我希望球相对于其他一切(例如地形)具有一定的尺寸。 我应该如何设置(x,y)坐标的值来绘制我想要的所有尺寸? 拥有600x400的屏幕。

我也很困扰因为glVertex2f(1,1)会在右上角绘制一个原始点。所以1代表100%向右或向上。但是屏幕是600x400,所以我不能在x和y轴上具有相等长度的尺寸。

2 个答案:

答案 0 :(得分:0)

由于0为0%(绝对左/下),1为100%(绝对右/上),您只需要找到与像素对齐的点。

例如。假设你的球是20x20像素。这意味着它是屏幕高度的5%和屏幕宽度的3.33%。因此,球周围的方形将具有以下顶点:

void drawBall()
{
   glVertex2f(ball.x - (20/600)/2, ball.y - (20/400)/2);
   glVertex2f(ball.x - (20/600)/2, ball.y + (20/400)/2);
   glVertex2f(ball.x + (20/600)/2, ball.y + (20/400)/2);
   glVertex2f(ball.x + (20/600)/2, ball.y - (20/400)/2);
}

看看我如何将球的宽度除以屏幕的宽度,以获得与glVertex2f一起使用的浮点值?另外,ball.x和ball.y应该是0到1之间的浮点值。

我将这些数字除以2,因为我假设(ball.x,ball.y)是球心的坐标,因此加法的一半位于中心的两侧。

答案 1 :(得分:0)

您可以编写自己的函数来绘制顶点并在参数中获取像素:

#define WINDOW_WIDTH 600
#define WINDOW_HEIGHT 400
void glVertex_pixels(const double x,const double y){
    glVertex2d(x * 2.0 / (double)WINDOW_WIDTH - 1.0, 1.0 - y * 2.0 / (double)WINDOW_HEIGHT);
}

您还可以使用宏:

#define WINDOW_WIDTH 600
#define WINDOW_HEIGHT 400
#define glVertex_pixels(x,y) glVertex2d((double)(x) * 2.0 / (double)WINDOW_WIDTH - 1.0, 1.0 - (double)(y) * 2.0 / (double)WINDOW_HEIGHT);

无论您使用上述哪种代码,此功能的使用都很简单。例如,以下代码从左侧绘制一个顶点10个像素,从顶侧绘制20个像素:

glVertex_pixels(10,20);