函数原型:
void glViewport(GLintx, GLinty, GLsizeiwidth, GLsizei height)
函数作用:
改变OpengL描绘结果原点在屏幕的位置及尺寸
参数说明:
x 以像素为单位,设置投影结果的原点在屏幕水平方向的位置,屏幕最左端为-width/2(世界坐标系中的-1),右端为width/2(世界坐标的1);
y 以像素为单位,设置投影结果的原点在屏幕垂直方向的位置,屏幕最顶端为height/2(世界坐标系中的1)底端为-height/2(世界坐标系中的-1);
width 屏幕的宽度
height 屏幕的高度
OpenGL默认的屏幕坐标如下:
(-width/2, height/2) (width/2, height/2)
|
(width/2, -height/2)
(-width/2, -height/2)
以上来自于我个人的理解。下面以两个例子作为说明
例一:
代码:
void TriangleWindow::render()
{
const qreal retinaScale = devicePixelRatio();
// 设置世界坐标系原点在屏幕的中央
glViewport(0, 0, width() * retinaScale, height() * retinaScale);
//glViewport(-width() * retinaScale/2.0f, -height() * retinaScale/2.0f, width() * retinaScale, height() * retinaScale);
glClear(GL_COLOR_BUFFER_BIT);
m_program->bind();
QMatrix4x4 matrix;