渲染管线的角度
- 处于图元装配的视口变换的管线上(裁剪->背面剔除->透视除法->视口变换)
- 一般而言,Viewport一般跟窗口同大
- 常见代码如下
function framebufferSizeCallback(width, height) {
canvas.width = width;
canvas.height = height;
gl.viewport(0, 0, width, height);
requestAnimationFrame(render);
}
window.onresize = () => {
framebufferSizeCallback(window.innerWidth, window.innerHeight);
};
glLineWidth(3.0f);
glLineStipple(1, 0x3F07);
glEnable(GL_LINE_STIPPLE);
glViewport(0,0,WIDTH,HEIGHT);
glPushMatrix();
glTranslatef(0.0f,0.0f,-4.0f);
glBegin(GL_LINES);
glColor3f(1.0f,1.0f,1.0f);
glVertex3f(-WIDTH/2,0.0f,0.0f);
glVertex3f(WIDTH/2,0.0f,0.0f);
glVertex3f(0.0f,-HEIGHT/2,0.0f);
glVertex3f(0.0f,HEIGHT/2,0.0f);
glEnd();
glPopMatrix();
glViewport(0,0,WIDTH/2,HEIGHT/2);
glPushMatrix();
glTranslatef(0.0f,-0.5f,-3.0f);
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(0.0f,0.0f,0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(0.0f,1.0f,0.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,0.0f,0.0f);
glEnd();
glPopMatrix();
glViewport(WIDTH/2,0,WIDTH/2,HEIGHT/2);
glPushMatrix();
glTranslatef(0.0f,-0.5f,-3.0f);
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(0.0f,0.0f,0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(0.0f,1.0f,0.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,0.0f,0.0f);
glEnd();
glPopMatrix();
glViewport(WIDTH/2,HEIGHT/2,WIDTH/2,HEIGHT/2);
glPushMatrix();
glTranslatef(0.0f,-0.5f,-3.0f);
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(0.0f,0.0f,0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(0.0f,1.0f,0.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,0.0f,0.0f);
glEnd();
glPopMatrix();
glViewport(0,HEIGHT/2,WIDTH/2,HEIGHT/2);
glPushMatrix();
glTranslatef(0.0f,-0.5f,-3.0f);
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(0.0f,0.0f,0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(0.0f,1.0f,0.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,0.0f,0.0f);
glEnd();
glPopMatrix();
