무엇을 사용합니까? Tao, SharpGL, OpenTK, DirectX P / Invoke, XNA, MDX, SlimDX, Windows API 코덱 팩
과거에는 쉬웠습니다. 당신은 자신의 3D 작품을 만든 다음 DirectX를, OpenGL을 사용했습니다. .Net 개발자에게는 MDX가 좋았습니다. 그런 다음 XNA가 MDX를 대신했지만 동일하지는 않습니다. XNA는 모든 콘텐츠 파이프 라이닝과 고정 모델 및 물건의 사전로드를 통해 매우 게임 중심적인 것 같습니다.
그래서 우리는 지금 어디에 서 있습니까? 며칠 동안 연구 / 시행 및 오류를 겪은 후 어디서나 절반이 개발 된 라이브러리, 오버 헤드가있는 라이브러리, 심각한 제한 또는 지나치게 복잡한 라이브러리를 발견합니다.
"자유로운"3D 작업을하고 싶습니다. 예를 들어 화면에 200k 도트를 3D로 표시하고 30fps (Kinect 깊이 이미지)로 이동합니다. 3D 화면 보호기, 오디오 분석 플러그인 등을 만들고 싶습니다. 모두 콘텐츠 파이프 라인을위한 프리 팹이 아니며 고성능이 필요합니다. 그리고 (ehm) .Net에서하고 싶습니다.
누구나 쉽고 / 이해할 수 있고 여전히 상당한 자유와 속도를 제공하는 라이브러리에 대한 경험이 있습니까?
나는 OpenTK에 착륙 한 것 같습니다 . OpenGL API에 어느 정도 직접 액세스 할 수 있으며 많은 종속성이 필요하지 않습니다.
비교적 이해하기 쉽습니다. 시작하려면 몇 줄의 (그리고 이해할 수있는) 코드가 필요합니다. 그것은 나를 위해 객체를 보유하지 않으므로 각 패스마다 자유롭게 변경할 수 있습니다. 주로 안전하지 않은 메모리 포인터로 작업하기 때문에 좋습니다.
물론 속도와 사용 편의성을 결합하는 것은 어렵습니다. 속도는 3D API와 직접 대화해야하는 반면 사용의 용이성은 추상화가 필요합니다. 따라서 이것은 내가 시도한 다른 API보다 낮은 수준의 API로 간주되어야합니다. 프리 팹 캐릭터 애니메이션을 만들고 싶다면 XNA가 아마도 더 나은 선택이 될 것입니다.하지만 내 사용 (위에서 설명 함)을 위해 이것은 지금까지 매우 유망 해 보입니다 (4-5 시간의 해킹).
일부 샘플 코드 :
private void Render()
{
// Every frame
GL.MatrixMode(MatrixMode.Modelview);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.LoadMatrix(ref cameraMatrix);
GL.Begin(BeginMode.Points);
// Here I can add lots of points. I add 200k without any big problem.
// It seems these points could have been passed in as an array pointer too,
// but I'll look at that later.
GL.Vertex3(x2, y2, z2);
GL.End();
glControl.SwapBuffers();
}
MDX가 마음에 들면 SlimDX가 바로 골목길에 있어야합니다. 기본적으로 MDX를 대체하지만 의심스러운 디자인 결정이 많이 수정되었고 더 많은 기능이 포함되었습니다. MDX로 가지고 있던 모든 것이 SlimDX에서 어떤 형태로든 존재하는 것을 찾을 수 있습니다.
또는 OpenGL 용 다른 C # 래퍼 패키지 인 OpenGL DotNet이 있습니다. 나를 위해 잘 작동합니다! http://www.taylaninan.com/opengl-dotnet.php 에서 확인 하십시오 .
OpenGL을 버전 4.4까지 래핑하고 550 개 이상의 OpenGL 확장을 지원합니다. 또한 GLU, GLUT, FreeGLUT, DevIL (개발자 이미지 라이브러리), ILU 및 DevIL 용 ILUT를 지원합니다.
위의 라이브러리에 대한 저수준 API입니다.
우리는 얼마 전에 비슷한 문제에 직면했으며 다음은 물론 우리의 의견을 나타냅니다. 우리의 주요 관심사 중 하나는 라이브러리가 다재다능해야하고, 매우 좋은 품질의 3D 이미지를 무료로 생성하고 설치 프로그램에 추가 제약을 두지 않아야한다는 것입니다. 예를 들어 올바른 파일을 설치해야하는 XNA 에서처럼 말입니다. 이것은 두통의 원인 인 것 같았습니다. 결국 우리는 DirectX를 결정하고 C #으로 GUI를 작성했습니다. 3D와 필요한 모든 상호 작용은 wndproc으로 수행되었습니다. 이것은 우리에게 DirectX의 힘과 C #을 사용한 GUI 개발의 용이함을 제공했습니다. 우리는 이것을 전혀 후회하지 않았습니다.
'development' 카테고리의 다른 글
명령형 대 일반 이전 하위 유형 (0) | 2020.12.09 |
---|---|
인덱스로 인해 레코드 수가 증가함에 따라 SQLite 삽입 속도가 느려집니다. (0) | 2020.12.09 |
고성능 동시 MultiMap Java / Scala (0) | 2020.12.09 |
TaskScheduler.Current가 기본 TaskScheduler 인 이유는 무엇입니까? (0) | 2020.12.09 |
typescript 파일에서 정의 파일없이 js 라이브러리를 가져 오는 방법 (0) | 2020.12.09 |