场景/视口外的对象 (OpenGL)
Objects that are out of scene/viewport (OpenGL)
请帮助我了解绘制2D场景(正射)的好方法。我正在使用带有着色器的OpenGL。
例如,如果我有一个大小为 800x600 的视口并绘制四边形。有些四边形在视口中,有些则不在视口中。
不在视口之外的四边形是否由 OpenGL 和着色器处理?如果是,我需要从绘制功能中剪切它们吗?对于这种情况,是否有标准决策(glEnable(???)
),还是我需要自己做出一个?
画:
void Draw()
{
glUseProgram(ProgramId);
glUniformMatrix4fv(MVPId, 1, GL_FALSE, (float*)pMVP);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glBindBuffer(GL_ARRAY_BUFFER, BaseQuadBufferId);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, BaseColorBufferId);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, OffsetQuadBufferId);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribDivisor(0, 0); //basic size
glVertexAttribDivisor(1, 0); //basic color
glVertexAttribDivisor(2, 1); //offset
glDrawArraysInstanced(GL_QUADS, 0, 4, QuadCount);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
}
最有价值球员:
CameraPosition = glm::vec3(0,0,1);
CameraDirection = glm::vec3(0,0,0);
Projection = glm::ortho(0.0f, 800.0f, 0.0f, 600.0f, -1.0f, 1.0f);
Model = glm::mat4(1.0f);
View = glm::lookAt(CameraPosition, CameraDirection, glm::vec3(0,1,0));
MVP = Projection * View * Model;
顶点着色器:
layout(location = 0) in vec3 vertexPosition;
layout(location = 1) in vec4 vertexColor;
layout(location = 2) in vec2 vertexOffset;
uniform mat4 MVP;
out vec4 Color;
void main()
{
gl_Position = MVP * vec4(vertexPosition + vec3(vertexOffset.xy,0), 1);
Color = vertexColor;
}
带有问题的图片:https://i.stack.imgur.com/oSiXd.jpg
所有使用 glDraw 提交的顶点...由顶点着色器处理(如果使用几何图形和/或镶嵌着色器,则由几何体和/或镶嵌着色器处理)。只有在顶点处理阶段(顶点、镶嵌和几何着色器)之后才能应用剪裁。剪切后,仅处理落入视口和剪刀矩形并通过像素所有权测试的片段。
当你的问题是:我必须自己处理可见区域之外的物体吗,那么答案是否定的。
OpenGL 会自动裁剪所有基元,并确保所有基元都正确显示,即使它们部分可见。从技术上讲,这是在调用片段着色器之前直接完成的。这样做的原因是,以前的着色器阶段可以转换基元,因此只能在所有这些阶段之后做出决定。然后,在归一化设备坐标中完成裁剪(因此在 3D 中,也针对近平面和远平面)。
有关渲染管线的详细信息,请查看此内容。
相关文章:
- 无法使用VAO和EBO(openGL)绘制多个对象
- 如何在OpenGL中正确旋转和缩放对象?
- 创建 OpenGL 对象期间出错
- 在类中渲染OpenGL对象
- OpenGL 对象在移动一段距离后振动
- 我的3D OpenGL对象围绕世界来源,而不是本地空间来源.我在做什么错或误会
- 使用纹理,法线和索引列表从VBO绘制OpenGL对象的问题
- 为什么我的 OpenGL 对象相对于最后一个绘制的对象绘制
- OpenGl 对象不显示,着色器相关
- OpenGL对象在PC上以正常速度旋转,但在笔记本电脑上非常快
- OpenGL-对象转换和VBO
- OpenGL对象包装器中的自动绑定
- Opengl对象拉伸
- 用于OpenGL对象的RAII包装器
- 在架构x86_64中找不到openGL对象
- Opengl对象加载器与纹理
- OpenGL对象自动在圆中移动
- OpenGL对象创建
- openGl对象在特定位置消失
- OpenGl -对象在旋转180度后反转