4

Imagen単純なゲームの2D地形を表す2Dポイント(x、y)のリストがあります。次に、glVertex()を使用して、GL_POINTSモードでこれらすべてのポイントを描画します。

次に、(x、y)座標も持つボールがあります。

私は、ボールが他のすべて(地形など)に対して明確なサイズを持つようにしたいです。(x、y)座標の値を設定して、必要なサイズですべてを描画するにはどうすればよいですか?600x400の画面があります。

また、glVertex2f(1,1)が右上隅にプリミティブポイントを描画するため、問題が発生します。したがって、1は100%右または上に移動することを表します。ただし、画面は600x400であるため、x軸とy軸で同じ長さの寸法を設定することはできません。

4

2 に答える 2

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までの浮動小数点値である必要があります。

(ball.x、ball.y)がボールの中心の座標であると仮定しているので、これらの数値を2で割ります。したがって、加算の半分は中心の両側になります。

于 2011-04-27T18:35:21.023 に答える
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);
于 2016-08-02T10:20:47.580 に答える