2009/02/17

Text display for menu button

I couldn't add bitmap text for my menu button on Python/OpenGL. By some reason, I cannot use glutBitmapCharacter(). I couldn't find any information on Web. Finally, I found an example at,
Python25\Lib\site-packages\OpenGL\tests\test_glutwindow.py
Now, I can add some text, but I still cannot specify text color yet.

OpenGL/Pythonでメニューボタンを作ろうと思ったのですが、どうしてもうまくテキストが表示できません。教科書には次のように書いてあるのですが。
glWindowPos*()
glutBitmapCharacter( GLUT_BITMAP_8_BY_13, 'a')
これはPythonではエラーになってしまいます。

どうやらPythonでは、
glutBitmapCharacter( GLUT_BITMAP_8_BY_13, ord('a'))
らしいのですが、これもうまくいきません。

Webを見ても回答を得られません。これは困った。しょうがないので、PythonのOpenGLのライブラリの中にヒントがないかと探してみたところ、ありました。
Python25\Lib\site-packages\OpenGL\tests\test_glutwindow.py
です。これを見ると、


def drawText( value, x,y, windowHeight, windowWidth, step = 18 ):
"""Draw the given text at given 2D position in window
"""
glMatrixMode(GL_PROJECTION);
# For some reason the GL_PROJECTION_MATRIX is overflowing with a single push!
# glPushMatrix()
matrix = glGetDouble( GL_PROJECTION_MATRIX )

glLoadIdentity();
glOrtho(0.0, windowHeight or 32, 0.0, windowWidth or 32, -1.0, 1.0)
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glRasterPos2i(x, y);
lines = 0
for character in value:
if character == '\n':
glRasterPos2i(x, y-(lines*18))
else:
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, ord(character));
glPopMatrix();
glMatrixMode(GL_PROJECTION);
# For some reason the GL_PROJECTION_MATRIX is overflowing with a single push!
# glPopMatrix();
glLoadMatrixd( matrix ) # should have un-decorated alias for this...

glMatrixMode(GL_MODELVIEW);

drawText( 'hello', 20,20, size[0],size[1] )
#glutBitmapCharacter( GLUT_BITMAP_8_BY_13, ord('a'))


と書いてあります。これをそのままコピーして使うと、やっと文字が書けるようになったのでした。しかし、まだ文字の色が自由に決められないので完全ではありません。まあ、でも、これでOpenGLでメニューボタンを作るめどがたちました。

0 件のコメント: