ページ 11

OpenGLで直線の引く

Posted: 2015年11月10日(火) 14:54
by 西野
OpenGL-ESにて直線を引きたいと考えております。

それっぽい処理はできたのですが、太さを設定できるようにすると
斜線時に細く見えてしまう気がします。

こちら原因が分かる方おりませんでしょうか。
width引数が太さに当たります。

コード:


void DrawLine( int x1, int y1, int x2, int y2, int width, int color, int alpha ){
	
	int r = color >> 16; 
	int g = (color >> 8) & 0xff; 
	int b = color & 0xff;	
	
	const GLfloat squareVertices[] = {
		x1,		y1,
		x2,		y2,
	};	
	const GLubyte squareColors[] = {
		r, g, b, alpha,
		r, g, b, alpha,
	};
	
	// ブレンディングのセット
	glEnable( GL_BLEND );
	glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
	
	glLineWidth( width );
	glVertexPointer(2, GL_FLOAT, 0, squareVertices);
	glEnableClientState(GL_VERTEX_ARRAY);
	glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
	glEnableClientState(GL_COLOR_ARRAY);
	
	glDrawArrays(GL_LINES, 0, 2);
	
	// ブレンディングの解除
	glDisable( GL_BLEND );
}


Re: OpenGLで直線の引く

Posted: 2015年11月12日(木) 09:23
by peach
斜線時に細く見えてしまう気がします
描画設定にアンチエイリアスを有効にしていませんか?
アンチエイリアスを有効にした状態で、単色の線を引くと周りの色に侵食されて普段より線が
見えにくくなり、細く感じることがあります。
ちなみに、直線に比べて斜めの線のほうが、この侵食の影響を強く受ける傾向があります

一度glReadPixels等でカラーバッファの内容を読みだして画像として保存して、ペイントソフトで線の周りのピクセルを確認してみてください。
もし、アンチエイリアスが有効になっていれば、線の周囲に背景色との線色のグラデーションが見られるはずです。