繁体   English   中英

场景/视口外的对象(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);
}

MVP:

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;
}

带有问题的图片: http//imgur.com/VckmghQ

使用glDraw…提交的所有顶点均由顶点着色器处理(如果使用了几何和/或镶嵌着色器,则还会处理几何和/或镶嵌着色器)。 仅在顶点处理阶段(顶点,镶嵌和几何着色器)之后才可以应用裁剪。 裁剪后,仅处理那些落入视口和剪刀矩形并通过像素所有权测试的片段。

当您的问题是:我必须自己处理可见区域之外的对象时,答案是否定的。

OpenGL自动裁剪所有图元,并确保即使部分可见它们也能正确显示。 从技术上讲,这是在调用片段着色器之前直接完成的。 这样做的原因是,先前的着色器阶段可以转换图元,因此只能在所有着色器阶段之后才能做出决定。 然后在规范化的设备坐标中进行裁剪(从而在3D中,也针对近平面和远平面)进行裁剪。

请查看此内容 ,以获取有关渲染管道的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM