相关疑难解决方法(0)

OpenGL:如何修复矩形(线条或线条循环)中丢失的角像素

看一下中间绿色矩形的左下角:

在此输入图像描述

他们在左下角缺少一个像素。

在此输入图像描述

我画的是这样的:

class Rect: public StaticModel {
  public:
    Rect() {  
        constexpr glm::vec2 vertices[] {
                {-0.5,0.5},  // top left
                {0.5,0.5},  // top right
                {0.5,-0.5},  // bottom right
                {-0.5,-0.5},  // bottom left
        };
        _buf.bufferData<glm::vec2>(vertices,BufferUsage::StaticDraw);
        _idxBuf.bufferData<GLuint>({0,1,3,2,0,3,1,2},BufferUsage::StaticDraw);
    }

    void bind() const override {
        _buf.bindVertex(); 
        _idxBuf.bind();
    }

    void draw() const override {
        gl::drawElements(8,DrawMode::Lines);
    }

  private:
    VertexBuffer _buf{sizeof(glm::vec2)};
    ElementArrayBuffer _idxBuf{};
};
Run Code Online (Sandbox Code Playgroud)

该代码使用了我的一堆辅助方法/类,但您应该能够知道它的作用。我尝试使用简单的 GL_LINE_LOOP 绘制矩形,但有同样的问题,所以现在我尝试 GL_LINES 并以相同的方向绘制所有线条:从上到下,从左到右,但即使如此,我仍然缺少一个像素。

这些坐标经过正交投影:

gl_Position = projection * model * vec4(inPos, 0.0, 1.0);
Run Code Online (Sandbox Code Playgroud)

因此着色器将这些 0.5 坐标缩放为像素坐标,但我不认为这是舍入错误。

我还可以尝试其他什么方法来对齐该角吗?

c++ opengl

7
推荐指数
1
解决办法
628
查看次数

标签 统计

c++ ×1

opengl ×1