看一下中间绿色矩形的左下角:
他们在左下角缺少一个像素。
我画的是这样的:
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 坐标缩放为像素坐标,但我不认为这是舍入错误。
我还可以尝试其他什么方法来对齐该角吗?