1

我正在尝试重新使用 OpenGL,但我的知识和数学现在已经生疏了。我曾经使用 C++,但我现在更喜欢 C#……尝试 OpenTK。显然 Glu 自 GL 3.1 以来已被弃用,所以我试图找到一个用 C# 或 C++ 在屏幕上绘制立方体的无 Glu 示例(我可以翻译它)。

我发现具有挑战性的部分是设置视口/视角/相机/透视/初始化的东西。我可以清除缓冲区并在 3D 空间中放置点,但其他的东西我忘记了!

特别是,我需要替换Glu.PerpsectiveGlu.LookAt

4

3 回答 3

2

我建议看一下http://openglbook.com/它说它是 OpenGL 4,但这里描述的所有内容(到目前为止只是基础知识)也直接适用于 OpenGL 3。我认为这是快速开始使用最新 OpenGL 版本的最佳资源。其他非常好的资源是Learning Modern 3D Graphics Programming,它更深入一点。

您必须注意 OpenGL 3 和更新版本忽略了固定管道。您仍然可以使用兼容性配置文件使用固定管道,但 IMO 最好学习可编程管道。这意味着不再有即时模式(例如glVertex3f和类似模式)和显示列表。您必须在绘图之前将顶点数据直接提交到显卡。这是使用缓冲区对象完成的,缓冲区对象不过是一个顶点数据数组。然后你必须提交一个 GLSL 程序来处理这些数据,例如应用模型视图和投影矩阵(即使你不需要花哨的着色器)。

最后但同样重要的是,当前的 OpenGL 版本没有实现矩阵运算和光照(同样,除非使用兼容性配置文件)。您需要自己创建所有矩阵,但由于这是一项繁琐的工作,我建议使用外部库。

这一切听起来可能很可怕,坦率地说,我发现学习可编程流水线比学习固定流水线更难。但是,它为您提供了更多的灵活性。

于 2011-12-24T10:02:29.807 回答
1

OpenTK 有它自己的数学类,包括一个 4x4 矩阵 - Matrix4。它包括正交投影和透视投影方法——Matrix4.CreateOrthographic(...);还有Matrix4.CreatePerspectiveFieldOfView(...);一个lookAt方法:Matrix4.LookAt(...);

OpenGL 的 OpenTK 绑定接受 Matrix4 等GL.LoadMatrix()方法GL.UniformMatrix4()

于 2011-12-30T07:51:40.423 回答
0

OpenGL book 的 Ch4 中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 }
于 2011-12-28T03:55:42.177 回答