标签:ram 一个 rspec ati 使用 缩放 view rap pre
进行3D绘图时,我们先船舰一个模型矩阵。这个矩阵包含了位移、缩放、旋转操作,会被一共有过到所有物体的顶点上,以变换到全局的世界空间。
下面的代码是把一个2D平面沿着X轴旋转90度
glm::mat4 model;
mode = glm::rotate(model,glm::radians(-55.0f),glm::vec3(1,0f,1.0f,1.0f));
glm::mat4 view;
view = glm::translate(view,glm::vec3(0.0f,.0.f,-3.0f));
glm::mat4 projection;
projection = glm::perspective(glm::radians(45.0f),800.0f/600.0f,0.1f,100.0f);
#version 330 core
layout(location = 0) in vec3 aPos;
...
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main(){
gl_Position = projection * view * model * vec4(aPos,1.0);
...
}
int modelLoc = glGetUniformLocation(shaderProgram.ID,"model");
glUniformMatrix4fv(modelLoc,1,GL_FALSE,glm::value_ptr(model));
//model view projection 依次传入
首先是时候更新顶点信息辽。
为了好玩一点,我们做一个model矩阵让立方体旋转起来
model = glm::rotate(model,(float)glfwGetTime()*glm::radius(50.0f),glm::vec3(1.0f,1.0f,0.5f));
然后使用glDrawArrays
绘制立方体,但这一次总共有36个顶点
glDrawArrays(GL_TRIANGLES,0,36);
但是如果就这样绘制出来的画,有一种说不出的奇怪。所以引入一个概念叫Z缓冲。
深度值存储在每个片段里面(作为片段的z值),当片段想要输出它的颜色时,OpenGL会将它的深度值和z缓冲进行比较,如果当前的片段在其它片段之后,它将会被丢弃,否则将会覆盖。这个过程称为深度测试(Depth Testing),它是由OpenGL自动完成的。
我们可以使用以下语句来开启深度测试这个功能
glEnable(GL_DEPTH_TEST);
因为我们使用了深度测试,我们也想要在每次渲染迭代之前清除深度缓冲(否则前一帧的深度信息仍然保存在缓冲中)
glClear(GL_COLOR_BUFER_BIT | GL_DEPTH_BUFFER_BIT);
标签:ram 一个 rspec ati 使用 缩放 view rap pre
原文地址:https://www.cnblogs.com/LittleBanana/p/11909115.html