备注:本系列文章介绍如何使用Python和OpenGL 4.5进行数据可视化的开发。因此请参考《准备工作(一)Windows下检测显卡和OpenGL信息》一文检测读者的电脑是否支持OpenGL 4.5版本(基本上2018年之后销售的电脑都可以支持OpenGL 4.5)。
再参考《准备工作(二)配置Windows下VS Code + Python + OpenGL开发环境》配置本文需要的开发环境)
前几节通过绘制三维坐标轴和三维立方体,我们已经初步了解了OpenGL如何通过一系列的数学变换,把三维世界的图形映射到了二维屏幕上(见下图):
本节我们详细讨论视图矩阵和投影矩阵。如上图所示,作为开发人员,我们需要自己完成前四步的空间变换,OpenGL只需要程序开发人员提供几个变换矩阵给它,正如前几节顶点着色器中的如下代码:
gl_Position = projection * view * model * vec4(position, 1.0);
之后OpenGL会完成后两步的变换。
“照相机”和“照相机空间”是人类参考人眼成像的过程抽象出来的概念,从而便于进行数学变换:
还是通过代码的实践来帮助我们的理解。
运行VS Code,选择File菜单里“Open Folder”,打开D:\pydev\pygl,在basic文件夹下新建一个camera_app.py文件
在camera_app.py输入以下代码:
import sys
parent_dir = "../pygl"
sys.path.append(parent_dir)
import ctypes
import OpenGL.GL as gl
import glm
import imgui
import numpy as np
import pygl
from common import App, AxesHelper, Cube
class CameraApp(App):
# 初始化着色器,vao vbo等
def setupVertex(self) -> None:
gl.glEnable(gl.GL_DEPTH_TEST)
self.back