画立方体的无胶例子
Glu-less example of drawing a cube?
我想回到OpenGL,但是我的知识和数学现在生锈了。我以前用c++,但我现在更喜欢c#。试用OpenTK。显然Glu自GL 3.1以来已被弃用,所以我试图找到一个在c#或c++(我可以翻译它)中在屏幕上绘制立方体的无Glu示例。
我发现具有挑战性的部分是设置视口/视角/相机/视角/初始化的东西。我可以清除缓冲区,并在3D空间中放置点,但其他东西我忘记了!
我特别需要替换Glu.Perpsective
和Glu.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 }
- 如何使用 std::累积在 C++ 中计算总和立方体
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 如何使用采样器立方体作为数组
- OpenGL,为什么这不是一个立方体?
- 在具有 MPI 的超立方体中广播
- Opengl 和 c++ 绘制多个立方体
- C++没有标准功能的立方体根查找器
- 现代OpenGL:如何获得立方体的矢量位置
- 使用此网格函数的立方体的正确顶点和索引是什么
- 为什么在GLFW窗口中没有用这个代码在我的屏幕上绘制立方体
- OpenGL中立方体的位置
- 在犰狳立方体中添加一列 1 的有效方法
- 使用犰狳时无法加载犰狳立方体<uword>
- 将粒子投影到立方体的表面
- 犰狳:将立方体子视图(管)转换为矢量
- Armadillo是否支持布尔和8位型矩阵和立方体
- 有没有像犰狳中的稀疏立方体或某种使用稀疏矩阵作为立方体切片的方法?
- Qtopengl,为什么不能用不同的vbo画两个立方体
- OpenGL - 深度缓冲区在渲染半透明立方体时剪切掉不应该剪切的面
- 在 OpenGL 中呈现空白的线框立方体