我正在阅读Schaum的概述COMPUTER GRAPHICS。 Book说一个简单的图形管道是这样的:几何表示 - >转型 - >扫描转换 (尽管作者决定在转换章之前教授扫描转换章节)。我希望通过openGL中的一个例子来学习这个简单的管道。假设我希望在窗口大小(750,500)中创建一个结束坐标(150,400)和(700,100)的行。下面的代码效果很好。我向专家询问的是解释转换发生时和扫描转换时的“顺序步骤”。我知道这可能听起来很愚蠢,但我真的需要这样做。我只是一个成年初学者,在我自己的学习图形作为一种爱好。 我的猜测是程序中没有发生扫描转换。它由glGL在glBegin和glEnd调用之间自动完成。 我是对的吗?
#include <GL/glut.h>
void init(void)
{
glClearColor (0.5, 0.2, 0.3, 0.0);
glClear (GL_COLOR_BUFFER_BIT);
glColor4f(0.5,0.7,0.3,0.0);
glLineWidth(3);
}
void display(void)
{
glBegin(GL_LINES);
glVertex2i(50, 400);
glVertex2i(700, 100);
glEnd();
glutSwapBuffers();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);
}
int main (int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_RGBA | GLUT_DEPTH);
glutInitWindowPosition(100,150);
glutInitWindowSize(750,500); // aspect ratio of 3/2
glutCreateWindow (argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop(); // this is when the frame buffer is displayed on the screen
return (0);
}
答案 0 :(得分:1)
在OpenGL实现中完成的所有阶段(主要在硬件中)。你指定状态和数据,然后GL将 - 如果用旧GL 1.0说话 - 将数据组装成顶点,通过转换阶段传递每个顶点,将生成的基元光栅化为片段,执行每片段测试(可能丢弃一些片段),并在渲染目标上更新结果像素。
用户代码中没有任何意义可能在管道中的“一个阶段” - 它没有回调,并且通常尽可能多的阶段同时工作。