Lum*_*ire 2 c++ opengl sdl pixel line
我想制作一个内部为320x240的游戏,但以整数倍(640x480,960,720等)渲染到屏幕.我打算复古的2D像素图形.
我通过glOrtho()设置内部分辨率来实现这一点:
glOrtho(0, 320, 240, 0, 0, 1);
Run Code Online (Sandbox Code Playgroud)
然后我将输出分辨率放大3倍,如下所示:
glViewport(0,0,960,720);
window = SDL_CreateWindow("Title", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 960, 720, SDL_WINDOW_OPENGL);
Run Code Online (Sandbox Code Playgroud)
我画这样的矩形:
glBegin(GL_LINE_LOOP);
glVertex2f(rect_x, rect_y);
glVertex2f(rect_x + rect_w, rect_y);
glVertex2f(rect_x + dst_w, dst_y + dst_h);
glVertex2f(rect_x, rect_y + rect_h);
glEnd();
Run Code Online (Sandbox Code Playgroud)
它完美地工作在320x240(未缩放):
当我扩展到960x720时,像素渲染一切正常!然而,似乎GL_Line_Loop不是在320x240画布上绘制并按比例放大,而是在最终的960x720画布上绘制.结果是3px世界中的1px行:(
如何在320x240 glOrtho画布上绘制线条,而不是960x720输出画布?
没有"320x240 glOrtho canvas".只有窗口的实际分辨率:960x720.
您所做的只是缩放渲染图元的坐标.所以,你的代码说要渲染一条线,例如,(20,20)到(40,40).OpenGL(最终)在每个维度上将这些坐标缩放3:(60,60)和(120x120).
但那只是处理终点问题.中间发生的事情仍然基于你在窗口的实际分辨率下渲染的事实.
即使您习惯glLineWidth改变线条的宽度,也只能修复线条宽度.它不能解决线条栅格化基于您渲染的实际分辨率这一事实.所以对角线不会有你想要的像素化外观.
正确地做到这一点的唯一方法是,正确地做到这一点.渲染到实际为320x240的图像,然后将其绘制到窗口的实际分辨率.
您必须创建该大小的纹理,然后将其附加到帧缓冲对象.将FBO绑定到渲染并渲染到它(将视口设置为图像的大小).然后取消绑定FBO,并将该纹理绘制到窗口(将视口设置为窗口的分辨率).
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |