第六课,OpenGL的3D坐标系统

启动深度测试

glEnable(GL_DEPTH_TEST);

启动3D深度测试,绘制的图形不会因为先后顺序改变。

模型矩阵

glm::mat4 mode = glm::mat4(1.0f);
mode = glm::rotate(mode, (float)glfwGetTime() * glm::radians(50.0f), glm::vec3(0.5f, 1.0f, 0.0f));

对模型的平移,旋转。

观察矩阵

glm::mat4 view = glm::mat4(1.0f);
view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f));

对摄影机的平移旋转(一般对摄影机操作的值全部取负)

投影矩阵

 glm::mat4 projection = glm::mat4(1.0f);
projection = glm::perspective(glm::radians(45.0f), (float)viewwidth / (float)viewheight, 0.1f, 100.0f);

正视投影

glm::ortho(,,,,,);

透视投影

glm::mat4 proj = glm::perspective
	(glm::radians(视锥上下面之间的夹角), 视窗的宽/, 近截面的深度,远界面的深度);

将矩阵传入渲染管线

PVPCShader.setMat4(“mode”, mode);
PVPCShader.setMat4(“view”, view);
PVPCShader.setMat4(“projection”, projection);

管线

uniform
uniform mat4 mode = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
uniform mat4 view = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
uniform mat4 projection = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};

初始化变量,防止对其他渲染的影响。

图形变换

在这里插入图片描述
gl_Position = projection * view * mode * vec4(aPos, 1.0);//顺序一定不能错
如果将view和mode的顺序颠倒,将先转变为摄像机视角,再对图形做变化。

重点

注意矩阵运算的顺序是相反的(记住我们需要从右往左阅读矩阵的乘法)。最后的顶点应该被赋值到顶点着色器中的gl_Position,OpenGL将会自动进行透视除法和裁剪。

例如在如下程序中

for (unsigned int i = 0; i < 10; i++){
	float angle = 20.0f * i;
	mode = glm::mat4(1.0f);//**1**
	mode = glm::translate(mode, cubePositions[i]);//**2**
	mode = glm::rotate(mode, (float)glfwGetTime() * glm::radians(50.0f), glm::vec3(0.5f, 1.0f, 0.0f));//**3**
	mode = glm::rotate(mode, glm::radians(angle), glm::vec3(1.0f, 0.3f, 0.5f));//**4**
}

在数学逻辑(从左向右计算)上有:
mode = 4(自身旋转) * 3(按时间轴旋转) * 2(移动一定距离) * 1(单位矩阵)
在glsl语言中

gl_Position =   projection * view * mode * vec4(aPos, 1.0);

需要从右往左阅读矩阵的乘法

代码

摘自LearnOpenGL CN

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elsa的迷弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值