2011-12-24 2 views
1

OpenGL로 돌아 가려하지만, 지식과 수학은 녹슬 었습니다. 저는 C++을 사용 했었지만 C#을 선호합니다 ... 지금 OpenTK를 사용해보십시오. 분명히 Glu는 GL 3.1부터 사용되지 않으므로 C# 또는 C++ (내가 번역 할 수 있음)에서 화면에 큐브를 그리는 Glu-less 예제를 찾으려고합니다.큐브를 그리기위한 Glu-less 예제?

도전적인 부분은 뷰포트/시야각/카메라/원근감/초기화 항목 설정입니다. 나는 버퍼를 지우고 3D 공간에서 포인트를 내려 놓는 것이 좋지만 다른 것들은 잊어 버린다.

특히, Glu.PerpsectiveGlu.LookAt 대체품이 필요합니다.

+3

: Matrix4.CreateOrthographic(...);Matrix4.CreatePerspectiveFieldOfView(...);도 바라 방법있다 - 그것은 모두 직교 및 원근 투영 방법을 포함 GL 3.1 이상, 필요한 것은 * shaders *입니다. 셰이더 기반 세계에서 OpenGL이 어떻게 작동하는지 확고하게 이해해야합니다. 나는 [OpenGL 3.0 +이 페이지의 자습서] 중 하나를 제안 할 것입니다. (http://www.opengl.org/wiki/Getting_started#Tutorials_and_How_To_Guides) –

+1

또한 [this] (http://www.songho.ca/)를 읽으십시오. opengl/gl_transform.html). 필요한 모든 행렬 계산을 수행하는 수식 및 방법론. – Lalaland

+0

오 ... 분명히 우리는 지금 4.1에 달렸어 ?? 아니면 4.2? 지난번에 내가 이걸 연주했을 때 우리는 여전히 2s 내 생각이었습니다. 최신 안정 버전을 사용할 수도 있습니다. – mpen

답변

2

http://openglbook.com/을 살펴 보는 것이 좋습니다. OpenGL 4라고 말하면서 여기에 설명 된 모든 내용 (지금까지 기본 내용 만)은 OpenGL 3에도 직접 적용됩니다. 최근 OpenGL 버전으로 빠르게 시작하는 데 가장 좋은 자료라고 생각합니다. 다른 좋은 리소스는 Learning Modern 3D Graphics Programming이며 좀 더 심층적 인 정보를 제공합니다.

OpenGL 3 이상은 고정 파이프 라인을 무시한다는 점에 유의해야합니다. 호환성 프로파일을 사용하여 고정 파이프 라인을 계속 사용할 수 있지만 프로그래밍 가능한 파이프 라인을 배우는 것이 좋습니다. 즉, 즉각적인 모드 (예 : glVertex3f 등) 및 표시 목록이 없음을 의미합니다. 먼저 그리기 전에 그래픽 카드에 정점 데이터를 직접 제출해야합니다. 이것은 버텍스 데이터의 배열 일 뿐인 버퍼 객체를 사용하여 수행됩니다. 그런 다음 모델 뷰 및 투영 행렬을 적용하는 것과 같은 데이터를 처리 할 GLSL 프로그램을 제출해야합니다 (멋진 쉐이더 항목이 필요하지 않은 경우에도).

현재 OpenGL 버전은 행렬 작업 및 조명을 구현하지 않습니다 (호환성 프로파일을 사용하지 않는 한 다시). 모든 매트릭스를 직접 만들어야하지만 지루한 작업이므로 외부 라이브러리를 사용하는 것이 좋습니다.

이 모든 것이 놀랍고 솔직하게 들릴 수도 있습니다. 고정 파이프 라인보다 프로그래밍 가능한 파이프 라인을 배우는 것이 더 어렵다는 것을 알았습니다. 그러나 그것은 훨씬 더 많은 유연성을 제공합니다. GLu.Perspective이 더 많거나 적은 상당하다 Ch4 of the OpenGL book에서

+0

몇 가지 차이점을 설명해 주셔서 감사합니다! 저는 OpenGL 3 예제를보고 있었고, 정확하게 "VAO"와 "Shader Program"... 새로운 개념을 만들어 냈습니다.나는 내가 들어가기 전에 약간의 독서를해야한다고 생각한다. – mpen

+0

OpenGL 책의 첫 번째 장을 읽은 후에 조금 회의적이었다. 설명 할 부분이별로 필요하지 않은 사소한 것 같았지만 다행히 시간을내어 나중에 장에서 자세하게 설명했습니다. 선형 대수학에 좋은 원기를 회복하십시오! – mpen

0

:

98 Matrix CreateProjectionMatrix(
99  float fovy, 
100  float aspect_ratio, 
101  float near_plane, 
102  float far_plane 
103) 
104 { 
105  Matrix out = { { 0 } }; 
106 
107  const float 
108   y_scale = Cotangent(DegreesToRadians(fovy/2)), 
109   x_scale = y_scale/aspect_ratio, 
110   frustum_length = far_plane - near_plane; 
111 
112  out.m[0] = x_scale; 
113  out.m[5] = y_scale; 
114  out.m[10] = -((far_plane + near_plane)/frustum_length); 
115  out.m[11] = -1; 
116  out.m[14] = -((2 * near_plane * far_plane)/frustum_length); 
117 
118  return out; 
119 } 
1

OpenTK 그것이 4 × 4 매트릭스를 포함하여 자신의 수학 수업,없는거야 - Matrix4. 당신이 코어를 사용하려는 경우 OpenGL을위한 Matrix4.LookAt(...);

OpenTK 바인딩 GL.LoadMatrix(), GL.UniformMatrix4() 같은 방법에 대한 Matrix4 동의 등

+0

예! 최근에 저의 연구 중에 발견했습니다. 감사! 그래도 Matrix4 클로즈드에 거의 재미 있지는 않지만 ... OpenGL 외부의 애플리케이션에서는이 행렬이 충분히 일반 적이 지 않으므로 일부 GL 클래스와 구별되는 것처럼 보입니다.하지만 상관 없습니다 작업. – mpen

+0

코어 OpenGL은 매트릭스 관련 모든 것을 제거했으며 사용자가 자신의 매트릭스 연산을 수행 할 것을 기대합니다. 'OpenTK.Graphics' 네임 스페이스의 일부가 아닌 이유는 수학 수업이 OpenAL 바인딩에 사용되며 향후 OpenCL 바인딩에서 확실히 사용되기 때문입니다. –

+0

아 ... 그래서 그들은 오디오에서 응용 프로그램을 가지고 .... .... 어떤 OpenCL이 사용됩니까? 충분히 공정한! – mpen

관련 문제