2

opengl プロジェクトでライン ストリップを描画しようとしています。

変換行列に glTranslatef 関数を使用すると、図に示すように、マゼンタのライン ストリップが壊れて描画されます。

破線

ビューを移動すると、ライン ストリップがさまざまな点で壊れたり、正しく描画されたり、まったく描画されなかったりします。

ポイントを手動で移動すると、ライン ストリップは常に正しく表示されます。

他の行 (赤い線: GL_LINE_LOOP、シアンの線: GL_LINES) は手動で変換され、適切に機能します。

glTranslate を使用したコードは次のとおりです。

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef( offs_x, offs_y, 0);

glLineWidth(2.0f);
glColor3f(1.0f, 0.0f, 1.0f);

glVertexPointer( 3, GL_FLOAT, 0, trailPoints );
glDrawArrays(GL_LINE_STRIP,0,numTrailPoints);

glPopMatrix();

そしてここに手動翻訳を伴う作業コード:

for (i=0; i< numTrailPoints; i++)
{
  translatedTrailPoints[i].x = trailPoints[i].x + offs_x;
  translatedTrailPoints[i].y = trailPoints[i].y + offs_y;
  translatedTrailPoints[i].z = trailPoints[i].z;
}

glLineWidth(2.0f);
glColor3f(1.0f, 0.0f, 1.0f);

glVertexPointer( 3, GL_FLOAT, 0, translatedTrailPoints);
glDrawArrays(GL_LINE_STRIP,0,numTrailPoints);

ここで何が欠けていますか?

編集 :

質問を完了するために、データ構造を次に示します (読みやすくするために宣言の順序を逆にしています)。

vec3 translatedTrailPoints[C_MAX_NUM_OF_TRAIL_POINTS];
vec3 trailPoints[C_MAX_NUM_OF_TRAIL_POINTS];

typedef union 
{ 
    float array[3];
    struct { float x,y,z; };
    struct { float r,g,b; };
    struct { float s,t,p; };
    struct { vec2 xy; float zz; };
    struct { vec2 rg; float bb; };
    struct { vec2 st; float pp; };
    struct { float xx; vec2 yz; };
    struct { float rr; vec2 gb; };
    struct { float ss; vec2 tp; };
    struct { float theta, phi, radius; };
    struct { float width, height, depth; };
    struct { float longitude, latitude, altitude; };
    struct { float pitch, yaw, roll; };
} vec3;

typedef union 
{ 
    float array[2];
    struct { float x,y; };
    struct { float s,t; };
} vec2;

datenwolf の提案を 2 番目にしたいのですが、成功しませんでした。/Zp2 | /Zp4 (私は VisualStudio 2008 を使用しています) ですが、破線/点はまだ残っています。

EDIT2:

テクスチャ化されたクワッドと同じ問題:

vec3 point;
point.x = lon;
point.y = lat;
point.z = 500;

glTranslatef( offs_x, offs_y, 0);

glBindTexture(GL_TEXTURE_2D, iconTextures[0]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(point.x-C_ICON_WORLD_SIZE, point.y-C_ICON_WORLD_SIZE,  point.z);
glTexCoord2f(1.0f, 0.0f); glVertex3f(point.x+C_ICON_WORLD_SIZE, point.y-C_ICON_WORLD_SIZE,  point.z);
glTexCoord2f(1.0f, 1.0f); glVertex3f(point.x+C_ICON_WORLD_SIZE, point.y+C_ICON_WORLD_SIZE,  point.z);
glTexCoord2f(0.0f, 1.0f); glVertex3f(point.x-C_ICON_WORLD_SIZE, point.y+C_ICON_WORLD_SIZE,  point.z);
glEnd();

ビューを変更した結果:

正しい描画

悪い 1

悪い 2

EDIT3:

(point.x + offs_x, point.y + offs_y, point.z) で変換し、glVertex 定義のポイント座標を削除することで、テクスチャ付きクワッドのケースを修正できました。以前のモードでの動作は、まだ私を困惑させます。

4

1 に答える 1