画立方体的无胶例子

Glu-less example of drawing a cube?

本文关键字:立方体      更新时间:2023-10-16

我想回到OpenGL,但是我的知识和数学现在生锈了。我以前用c++,但我现在更喜欢c#。试用OpenTK。显然Glu自GL 3.1以来已被弃用,所以我试图找到一个在c#或c++(我可以翻译它)中在屏幕上绘制立方体的无Glu示例。

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

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

我建议看一下http://openglbook.com/,它说它是opengl4,但这里描述的一切(到目前为止只是基础)也直接适用于opengl3。我认为这是快速开始使用最新OpenGL版本的最佳资源。另一个非常好的资源是《学习现代3D图形编程》,它更深入一些。

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

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

这一切听起来可能很可怕,坦率地说,我发现学习可编程管道比学习固定管道更难。但是它给了你更多的灵活性。

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

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

从OpenGL书的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 }