我試圖在opengl項目上繪製線條。如果使用glTranslate虛線
如果我使用的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的建議,但沒有成功:我在vec2和vec3聲明之前嘗試過編譯包(1 | 2 | 4),我嘗試使用/ Zp1編譯|/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定義。以前模式中的行爲仍令我困惑。
「trailPoints」本身有什麼。您正在使用GL_LINE_STRIP。結合頂點數據中不愉快的幾何佈局,這可能會導致奇怪的效果。 – datenwolf 2013-03-12 13:36:41
我仍然迷路,trailPoints包含世界座標中的3d點(x,y,z)的有序列表。問題存在於我測試的這些基元中的任何一個(GL_LINES,GL_LINE_STRIP,GL_LINE_LOOP,GL_POINTS),這裏是截圖GL_POINTS:(http://img27.imageshack.us/img27/7018/pointsbroken.png) – Zac 2013-03-12 15:02:49
那麼,這個列表是如何定義的? C struct-s的內存佈局沒有被指定,並且編譯器可能會根據需要添加間隙(除非您將其強制爲打包佈局)。 – datenwolf 2013-03-12 16:04:38