OpenGL中的简单图形管道

OpenGL中的简单图形管道,opengl,graphics,pipeline,Opengl,Graphics,Pipeline,我正在读Schaum的《计算机图形学概要》。书中说,一个简单的图形管道是这样的:几何表示-->转换-->扫描转换 (尽管作者决定在转换章节之前教授扫描转换章节)。我希望通过openGL中的一个示例来学习这个简单的管道。假设我希望在大小为(750500)的窗口中创建一条端点坐标为(150400)和(700100)的直线。下面的代码工作得很好。我要求专家们解释的只是转换发生的时间和扫描转换发生的时间。我知道这听起来可能很愚蠢,但我真的需要弄清楚这一点。我只是一个成人初学者,以自己的爱好学习图形。 我

我正在读Schaum的《计算机图形学概要》。书中说,一个简单的图形管道是这样的:几何表示-->转换-->扫描转换 (尽管作者决定在转换章节之前教授扫描转换章节)。我希望通过openGL中的一个示例来学习这个简单的管道。假设我希望在大小为(750500)的窗口中创建一条端点坐标为(150400)和(700100)的直线。下面的代码工作得很好。我要求专家们解释的只是转换发生的时间和扫描转换发生的时间。我知道这听起来可能很愚蠢,但我真的需要弄清楚这一点。我只是一个成人初学者,以自己的爱好学习图形。 我猜扫描转换不会在程序中发生。它由openGL在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);
}
#包括
void init(void)
{
glClearColor(0.5,0.2,0.3,0.0);
glClear(GLU颜色缓冲位);
glColor4f(0.5,0.7,0.3,0.0);
线宽(3);
}
作废显示(作废)
{
glBegin(GL_行);
glVertex2i(50400);
glVertex2i(700100);
格伦德();
glutSwapBuffers();
}
空洞重塑(整数w,整数h)
{
GLVIEW(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_投影);
glLoadIdentity();
gluOrtho2D(0.0,(GLdouble)w,0.0,(GLdouble)h);
}
int main(int argc,char*argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_深度);
位置(100150);
GLUTINITWindowsSize(750500);//宽高比为3/2
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(显示器);
GLUTREFORUNC(重塑);
glutMainLoop();//此时屏幕上显示帧缓冲区
返回(0);
}

在OpenGL实现中完成的所有阶段(主要在硬件中)。指定状态和数据,然后GL将(如果用旧的GL 1.0来说)将数据组装到顶点,通过转换阶段传递每个顶点,将生成的基本体光栅化为片段,执行逐片段测试(可能会丢弃一些片段),并更新渲染目标上的生成像素


用户代码中没有可能在管道中的“一个阶段”上的点——它没有回调,并且通常有尽可能多的阶段同时工作。

这本书是哪一年写的?@KromStern 1986年。代码不是从书中得来的,你最好多了解一些最新的东西。我的意思是,基础知识保持不变,但从那时起,词汇发生了变化。我假设现在是虚拟几何->投影->光栅化,我同意克罗姆的观点。在过去的28年里,“图形管道”的定义发生了很大的变化。