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();
ビューを変更した結果:
EDIT3:
(point.x + offs_x, point.y + offs_y, point.z) で変換し、glVertex 定義のポイント座標を削除することで、テクスチャ付きクワッドのケースを修正できました。以前のモードでの動作は、まだ私を困惑させます。