c++ 如何使用OpenGL在2D模式下渲染完美的线框矩形?

栏目: C++ · 发布时间: 6年前

内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/10320332/how-to-render-perfect-wireframed-rectangle-in-2d-mode-with-opengl

编辑:只是这样你知道:我还没有完全解决这个问题,目前我使用的是0.5px的偏移,似乎有效,但正如其他人所说,这不是“正确”的解决方案.所以我正在寻找真正的交易,钻石出口规则解决方案根本没有工作.

我相信这可能是显卡的错误,但如果是,那么任何专业的 程序员 都应该有这样的防弹解决方案呢?

编辑:我现在买了一个新的nvidia卡(以前有ATI卡),我仍然遇到这个问题.我也在许多游戏中看到同样的错误.所以我想这是不可能修复一个干净的方式?

这是错误的形象:

你如何克服这个问题?如果可能,最好是非着色器解决方案.我试图设置第一行的偏移量,当我自己绘制4个单独的行,而不是使用线框模式,但没有很好的工作:如果矩形大小改变,它有时看起来完美的矩形,但有时甚至比我的修复之前更糟.

这是我渲染四边形的方式:

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_QUADS);
    glVertex2f(...);
    glVertex2f(...);
    glVertex2f(...);
    glVertex2f(...);
glEnd();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

是的,我知道我可以使用顶点数组或VBO,但这不是重点.

我也试过GL_LINE_LOOP,但它没有修复这个错误.

编辑:一个解决方案,迄今为止工作: Opengl pixel perfect 2D drawing by Lie Ryan:

Note that OpenGL coordinate space has no notion of integers,

everything is a float and the “centre” of an OpenGL pixel is really at

the 0.5,0.5 instead of its top-left corner. Therefore, if you want a

1px wide line from 0,0 to 10,10 inclusive,

you really had to draw a

line from 0.5,0.5 to 10.5,10.5.

This will be especially apparent if you turn on anti-aliasing, if you

have anti-aliasing and you try to draw from 50,0 to 50,100 you may see

a blurry 2px wide line because the line fell in-between two pixels.

这不是一个bug,这正是遵循规范.没有绘制一行的最后一个像素,以防止使用以下线段进行过度绘制,这会导致混合问题.解决方案:发送最后一个顶点两次.

代码更新

// don't use glPolygonMode, it doesn't
// do what you think it does
glBegin(GL_LINE_STRIP);
    glVertex2f(a);
    glVertex2f(b);
    glVertex2f(c);
    glVertex2f(d);
    glVertex2f(a);
    glVertex2f(a); // resend last vertex another time, to close the loop
glEnd();

BTW:你应该学习如何使用顶点数组.立即模式(glBegin,glEnd,glVertex调用)已经从OpenGL-3.x内核和之后移除.

代码日志版权声明:

翻译自:http://stackoverflow.com/questions/10320332/how-to-render-perfect-wireframed-rectangle-in-2d-mode-with-opengl


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程真好玩

编程真好玩

[英] 乔恩·伍德科克 / 余宙华 / 南海出版公司 / 2017-8-1 / 88.00元

在美国,编程已进入幼儿园和中小学课堂,是备受欢迎的课程之一。 在英国,编程被列入国家教学大纲,成为6~15岁孩子的必修课。 在芬兰,编程理念融入了小学的各门课程,孩子们可以随时随地学编程。 编程已经成为世界的通用语言,和听、说、读、写、算一样,是孩子必须掌握的技能。 Scratch是美国麻省理工学院设计开发的可视化少儿编程工具,全球1500多万孩子正在学习使用。它把枯燥乏味......一起来看看 《编程真好玩》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码