请看中间绿色矩形的左下角:
他们在左下角缺少一个像素。
我是这样画的: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{};
};
那段代码使用了我的一些辅助方法/类,但你应该能够理解它的作用。我尝试使用简单的GL_LINE_LOOP来绘制矩形,但是出现了同样的问题,所以现在我正在尝试使用GL_LINES,并按相同方向绘制所有线条:从上到下和从左到右,但仍然缺少一个像素。
这些坐标正在通过正交投影进行处理:
gl_Position = projection * model * vec4(inPos, 0.0, 1.0);
因此,着色器将那些0.5的坐标缩放到像素坐标,但我认为这不是一个舍入误差。
还有什么其他方法可以尝试使角落对齐吗?