2010-03-21 3 views
11

나는 컴퓨터 그래픽 과정을 시작하고 있으며 언어를 선택해야합니다.pyopengl : C++을 대체 할 수 있습니까?

선택 항목은 C++과 Python 사이입니다. C++에는 아무런 문제가 없습니다. 파이썬은 진행중인 작업입니다. 그래서 python을 그래픽 부분에 사용하여 파이썬로드로 내려갈 생각을하고있었습니다.

성능은 문제입니다.

python/pyopengl은 성능면에서 C++에 도전하기에 충분히 성숙합니까?

나는 그 긴 샷을 깨달았지만, 당신의 생각, pyopengl의 사용에 대한 경험을 듣고 싶습니다.

미리 감사드립니다.

+2

이 아니 파이썬은 충분히 컴퓨터 성능의 그 단지 문제 성숙인지, 컴퓨터 (또한 구조와 같은 링크에서 객체에 대한 포인터를 이진 트리와 같은 선형 메모리를 사용하고 있지 않은지 확인) 아직 파이썬이 C++에 비해 사용하는 여분의 사이클을 낭비 할 여유가없는 수준의 성능 수준은 아니지만, 필연적으로 (컴퓨터 속도가 매년 높아짐에 따라) 어느 정도는 변화 할 것입니다. C++과 같은 언어는 항상 최첨단 과학 등을 위해 사용됩니다. 컴퓨팅 자원의 모든 마지막 비트를 사용하려고 시도하지만 대부분의 응용 프로그램에서는 더 높은 수준의 언어가 역사상 처음부터 끝날 것입니다. – Rick

답변

25

컴퓨터 그래픽 코스의 내용에 따라 크게 달라집니다. 과거에 배웠던 입문 과정과 같은 일을하는 경우, 기본적으로 큐브와 구체, 일부 텍스처 맵핑 및 일부 정점 애니메이션을 회전시키고 있습니다. 이 경우 Python은 OpenGL의 상태 머신 패러다임 인 Unpythonic (그리고 정직하고 un-C++이 될 수 있다고 가정)을 전제로 완벽하게 적절할 것입니다.

매트릭스 수학을 할 때 Numpy를 사용할 수 있습니다. Numpy의 핵심은 C로 작성되어 있으며 실제로는 매우 빠릅니다. 당신은 빨리 돌아가고, 더 빨리 반복하며, 더 재미있을 것입니다.

그러나 컴퓨터 그래픽스 모든 과정에서 C#을 고수하면서 최첨단의 수백만 개의 삼각형을 장면을 통해 애니메이션으로 처리하는 경우.

클래스가 선택 사항을 제공했다면 아마 파이썬이 괜찮을 것입니다.

지식을 컴퓨터 그래픽으로 실제 작업에 활용하려면 거의 모든 게임 및 그래픽 엔진이 C 또는 C++로 작성되고 Python (또는 Lua)은 스크립팅 언어로 남겨집니다. 내가 처음 PyOpenGL에 대해 들었을 때

, 나는 절대적으로 했다을 흥분 :

+1

고마워, 나는 현실 세계 컴퓨터 그래픽 단락을 주셔서 고맙습니다 – Tom

+0

이 답변이 얼마나 정확하다고 생각하는지 설명 할 수 없습니다. – phkahler

+0

@phkahler - 무엇을 의미합니까? – kibibu

0

파이썬은 런타임에 해석되어 컴파일되는 동적 언어이므로 더 나은 성능을 낼 수없는 C++입니다. 여러 프로그래밍 언어를 비교하기 위해 this post을 살펴보십시오.

C++를 선호하는 또 다른 이유는 병렬 실행입니다. CG에서 많은 작업을 병렬로 실행되는 여러 스레드로 분할하여 최적화 할 수 있습니다. 파이썬을 사용하여 새 스레드를 시작하려고 시도한 적이 있습니까?

+3

너 "파이썬을 사용하여 새 스레드를 시작하려했습니다"라는 것을 암시하는 정확한 것을 만드시겠습니까? 스레드는 파이썬에서 시작하기 매우 쉽습니다. :) 당신은 CPython의 쓰레드가 전역 인터프리터 락 (Global Interpreter Lock)을 겪고 있다는 것을 의미 했습니까? – EOL

+0

사실 저는 파이썬에서 멀티 스레드 개발을 한 적이 없었습니다.하지만 그에 대한 많은 게시물을 보았습니다. –

2

파이썬은 멋진 언어이지만 그래픽에 적합한 도구는 아닙니다. 그리고 원격으로 무엇인가를하기 원한다면 unpythonic 라이브러리를 사용해야하고 파이썬으로 작성된 추한 C 코드로 끝날 것입니다.

+0

정확히 친구가 저에게 말한 것과 똑같은 단어, 다른 언어를 말합니다. – Tom

+0

의심의 여지가 생길 때 자신 만의 라이브러리를 작성하는 것입니다. –

4

은 여기 내 개인적인 경험입니다. 내가 좋아하는 언어로 된 OpenGL? 거래! 그래서 저는 3D 그래픽 프로그래밍을 배우기 시작했습니다.

나는 NeHeOpenGL SuperBible과 같은 여러 설명서와 책을 읽었습니다. PyOpenGL's functions은 OpenGL 그 자체의 (매우 작은 차이점과) 동일하므로 대부분의 예제를 복제하는 것이 어렵지 않았습니다. 게다가, NeHe는 Python에서 많은 사람들이 만든 많은 소스 코드를 가지고 있습니다.

Quaternions를 읽고 (Python에서 구현 한) 약 2 주가 지나지 않았습니다. 이제 완전한 3D 카메라 상호 작용 옵션을 갖춘 GLSL 지원 환경이 생겼습니다. 나는 간단한 Phong 쉐이더를 만들고 Quaternions를 사용하여 카메라 회전을 구동했습니다. 나는 아직 한 번의 성과를 얻지 못했다.

개월 후에이 코드로 돌아 왔습니다.

필자는 Python Octree 구현을 시도했는데 8 레벨 (256x256x256 voxels)로 갔을 때 계산에 2G 이상의 RAM이 필요했고 그 후에도 여전히 완료되지 않았습니다. 파이썬에서 많은 객체를 저장할 때 C++과 같은 단순한 구조체가 아니라는 것을 깨달았습니다. 그것이 내가 이것을 배제하고, 이것을 C++로 작성한 다음, 파이썬 호출로 다시 붙여야한다는 것을 깨달은 곳입니다.

내가 이것을 끝내면 내가 기억한다면, 나는 당신을 업데이트 할 것입니다. ]

(.. 귀하의 질문에 대답하기 위해, 아니, 파이썬은 그 두 lanaguages ​​다른 목적으로, 서로 다른 강점을 가지고 ++ C를 대체하지 않습니다)

+1

컴퓨터 성능이 향상됨에 따라 동적 인 언어가 고성능 게임에서도 잠재적으로 유용해질 수 있고, 컴퓨터의 힘은 ​​항상 프로그래머보다 덜 가치 있다고 여겨 져야합니다. 컴퓨터가 충분히 발전하면 C++로만 수행 할 수있는 일에 Python을 사용하는 것이 당연합니다. 물론 컴퓨터에서 실행하는 것이 더 빠르지는 않지만 개발 시간은 될 것입니다. 패러다임 전환이 가능해 이제는 불가능한 일만이 C++에서 끝나고 이제는 모든 일이 파이썬 같은 언어로 이루어질 수 있습니다 – Rick

+0

>> 물론 컴퓨터에서 실행되는면에서 더 빠르지는 않습니다 –

+2

Python에서 Numpy 연산의 시리즈로 큰 octree를 완성했습니다.Numpy는 정신 나간다. 나는 C에서 그것을 시도하는 단순한 생각에 나를 싫어하게 만드는 것들을 몇 줄의 파이썬에서 할 수 있다는 생각에 익숙해있다. Numpy는 큰 데이터 처리를 위해 동일한 작업을 수행합니다. –

5

파이썬 길을 가야하는 것입니다. 모든 OpenGL 프로그래밍이 비디오 카드 RAM에 데이터를 업로드하고 OpenGL을 사용하여 데이터를 조작하기 때문에 파이썬의 속도 제한은 중요하지 않습니다. 또한 C++에서 어렵게 만듭니다. 즉, 파일, 이미지, 사운드 등을 여는 것입니다.

octree를 구현 한 사람은 C로 작성된 numpy를 사용하지 못하게 할 수 없습니다.

Blog post on this subject