我正在尝试重新使用OpenGL,但我的知识和数学现在已经生锈了。我曾经使用C ++,但我现在更喜欢C#...试用OpenTK。显然Glu自GL 3.1以来一直被弃用,所以我试图找到一个无胶量的例子,用C#或C ++在屏幕上绘制一个立方体(我可以翻译它)。
我发现挑战的部分是设置视口/视角/相机/透视/初始化的东西。我可以清除缓冲区,在3D空间中放下点,但是我忘记了其他的东西!
特别是,我需要替换Glu.Perpsective
和Glu.LookAt
。
答案 0 :(得分:2)
我建议看看http://openglbook.com/它说它是OpenGL 4,但这里描述的所有东西(目前为止只有基础知识)也直接适用于OpenGL 3。我认为这是使用最新OpenGL版本快速入门的最佳资源。其他非常好的资源是Learning Modern 3D Graphics Programming,这有点深入。
您必须注意OpenGL 3和更新版本忽略了固定管道。您仍然可以使用兼容性配置文件来使用固定管道,但IMO最好学习可编程管道。这意味着没有更多的立即模式(例如。glVertex3f
和类似的)和显示列表。您必须在绘图之前将顶点数据直接提交到图形卡。这是使用缓冲对象完成的,缓冲对象只是一个顶点数据数组。然后你必须提交一个GLSL程序来处理这些数据,例如应用模型视图和投影矩阵(即使你不需要花哨的着色器)。
最后但并非最不重要的是,当前的OpenGL版本没有实现矩阵操作和照明(除非使用兼容性配置文件)。您需要自己创建所有矩阵,但由于这是一项繁琐的工作,我建议您使用外部库。
这一切可能听起来令人恐惧,坦率地说,我发现学习可编程管道比固定管道更困难。然而,它为您提供了更大的灵活性。
答案 1 :(得分:1)
OpenTK拥有自己的数学类,包括4x4矩阵 - Matrix4
。它包括正交投影和透视投影方法 - Matrix4.CreateOrthographic(...);
和Matrix4.CreatePerspectiveFieldOfView(...);
还有一个lookAt方法:Matrix4.LookAt(...);
OpenGL的OpenTK绑定接受Matrix4用于GL.LoadMatrix()
,GL.UniformMatrix4()
等方法。
答案 2 :(得分:0)
从Ch4 of the OpenGL book开始,GLu.Perspective
或多或少等同于:
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 }