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


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

查看所有标签

猜你喜欢:

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

小团队构建大网站:中小研发团队架构实践

小团队构建大网站:中小研发团队架构实践

张辉清 等 / 电子工业出版社 / 2019-1 / 69

《小团队构建大网站:中小研发团队架构实践》结合作者近几年的工作经验,总结了一套可直接落地、基于开源、成本低、可快速搭建的中小研发团队架构实践方法。《小团队构建大网站:中小研发团队架构实践》共5篇22章,开篇是本书的导读;架构篇是设计思想的提升,包括企业总体架构、应用架构设计、统一应用分层等;框架篇主讲中间件和工具的使用,包括消息队列、缓存、Job、集中式日志、应用监控和微服务等;公共应用篇是技术与......一起来看看 《小团队构建大网站:中小研发团队架构实践》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具