PyODE 자습서 3

6484 단어 pyOpenGLPythonPyODE

PyODE 자습서 3 구현


사이트 제목
Tutorial 3은 접촉 판정의 표본이다.시각화는 PyOpenGL입니다.
・PyOpenGL을 설치해야 합니다.
・OpenGL이기 때문에 3D도 있고 시각화된 코드에 대한 기술이 많습니다.
※ 필자는 C/C++에서 OpenGL을 사용한 적이 있으며, (이미 무엇을 하고 있는지 짐작이 가는데) 이 코드는 거의 읽은 적이 없습니다.탓하지 마세요.

PyOpenGL 설정


좀 부산스럽다.
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopengl
"PyOpenGL -3.1.5-cp38-cp38-win amd64.whl"에서 획득한 후 pip로 설치.
→ 튜토리얼 3 정상적인 동작.
※ pip 자동 획득부터 정상적으로 작동하지 않습니다.자세히 이쪽→PyOpenGL 설정
참고로 pyopengl과 함께'PyOpenGL accelerate'를 넣은 것 같지만 필자는 아직 설치하지 않았다.

결실


Tutorial 3이 시작되었습니다.
이미지 저장 프로그램을 추가해 GIF 애니메이션을 만들었다.(Pillow 사용)

・시점은 본가의 코드에 따라 값이 바뀌었다.

이미지 저장 프로그램


파일은 PNG 이미지 팜과 1개의 GIF 애니메이션을 내보냅니다.
추기 부분만 ↓에 실었다.
※ 원래 코드에 이미지 출력이 없기 때문에 이렇게 추가되었습니다. 잘못 본 것 같습니다.
사용 방법:
· "Pillow"를 설치합니다.
· 실행하기 전에 현재 두 개의 폴더'#'과'gif'를 만듭니다.
· 231줄의 원시 줄'glutSwapBuffers(') 다음에 추가 루틴'capture(')를 호출한다.
・ 같은 220 줄 "syst.exit(0)"이전 또는 "export movie(")
     
PyOpenGL에서 스냅샷 생성/저장
from PIL import Image
from PIL import ImageOps

step=-1
intvl = 10
imgs = []
def capture():
  global step
  step += 1

  if step % intvl != 0:
      return

  pad_step = '{0:04d}'.format(step)
  print( pad_step )
  savepath = "img/tutorial3_"+pad_step+".png"

  width = glutGet(GLUT_WINDOW_WIDTH)
  height = glutGet(GLUT_WINDOW_HEIGHT)

  glReadBuffer(GL_FRONT)
  glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
  data = glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE)

  #image = Image.fromstring("RGBA", (width, height), data)
  image = Image.frombytes("RGBA", (width, height), data)
  image = ImageOps.flip(image)
  image.save( savepath )
  imgs.append( image )
비디오 저장 프로그램

def export_movie():
    if not imgs:
        return
    imgs[0].save('gif/tutorial3.gif'
               , save_all=True
               , append_images=imgs[1:]
               , optimize=False
               , duration=100 #40
               , loop=0)

좋은 웹페이지 즐겨찾기