0

これは、ポイントを変換するための私のユーティリティ関数です:

void translatePoints(float x, float y, int transX, int transY)
{
    glMatrixMode(GL_MODELVIEW);
    //glLoadIdentity();
    glBegin(GL_LINES);
    // original points
    glVertex2f(x,y);    
    glVertex2f(x + transX, y + transY);
    glEnd();
    glFlush();
}

円を描画し、ポイントをスケーリングし、ポイントを回転させるための同様の関数があります。行列の変換を使用せずに、myDisplay から x 値と y 値を渡して、形状を変換し、中心からスケーリングおよび回転させる必要があります。星のような 6 つの点を持つ形状の場合、この関数は機能しません。この関数が機能するには、2 つのポイントを返す必要があるか、ポインターを使用できると思います。しかし、これらのいずれかを実装する方法がわかりません。また、この関数でこれらのポイントを描画するべきではないと考えています。最後に、さまざまな形のシーンを描かなければなりません。

4

2 に答える 2

1

私があなたの質問を理解していることは、ここで説明しようとしています。たとえば、4 点を使用して 2D の正方形を描画したとします。正方形を描画するための座標値を保持する vairable を作成し、変数名を次のように想定します。

x1, y1, z
x2, y2, z
x3, y3, z
x4, y4, z

ここで z 座標は固定です。正方形を変換する関数を作成する場合は、次のように関数を実装します。

void translateSquare(int transX, int transY)
{
  x1 + transX; y1 + transY;
  x2 + transX; y2 + transY;
  x3 + transX; y3 + transY;
  x4 + transX; y4 + transY;
}

この関数を呼び出すと、正方形は値 transX と transY によって変換されます。したがって、ディスプレイ用にこのような関数を作成してください。

于 2013-03-15T11:41:59.383 に答える
1

あなたが欲しいと私が思うのは

glVertex2f(x + transX, y + transY);
glVertex2f(a + transX, b + transY);

行が (x,y) から (a,b) に移動する場所。両方のポイントを翻訳するのではなく、元のポイントから翻訳された元のポイントまで線を引いていました。

うまくいけば、私はあなたの質問を正しく解釈しました

于 2013-03-15T07:26:27.237 に答える