PyOpenGLでx,y軸の交換テスト
OpenGLで描画対象となる点のx軸とy軸を交換したい。そこで現在の行列に引数の行列を掛けるglMultMatrixでx,y軸を交換する小さなプログラムを書いた。
ネイピア数の指数関数をプロットしたあとにx,y軸を交換してまたプロットする。
# coding: utf-8 import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from math import exp axisRange = 7 def exponential(): glBegin(GL_LINE_STRIP) n = 800 for i in xrange(n): x = -axisRange/2. + float(axisRange)/n*i y = exp(x) glVertex2f(x, y) glEnd() def display(): glClear(GL_COLOR_BUFFER_BIT) glColor4f(0,0,0, .5) glPointSize(5) glBegin(GL_LINES) glVertex2f(-axisRange, 0) glVertex2f(+axisRange, 0) glVertex2f(0, -axisRange) glVertex2f(0, +axisRange) glEnd() glColor3f(1, 0, 0) exponential() glColor3f(0, 0, 1) glPushMatrix() glMultMatrixf([0,1,0,0, 1,0,0,0, 0,0,1,0, 0,0,0,1]) # 交換 exponential() glPopMatrix() glutSwapBuffers() def reshape(w, h): glViewport(0, 0, w, h) glutPostRedisplay() def keyboard(k, x, y): if k in ['q', 'Q', '\033']: sys.exit() glutPostRedisplay() def init(): glClearColor(1, 1, 1, 1) glScalef(2./axisRange, 2./axisRange, 1) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); def main(): glutInit(sys.argv) glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE) glutCreateWindow("Transpose X and Y") init() glutDisplayFunc(display) glutReshapeFunc(reshape) glutKeyboardFunc(keyboard) glutMainLoop() if __name__ == '__main__': main()