【初窥图形编程】序章:什么是Computer graphics?

写在前面:今天是2月10号,本以为今天会出初试成绩,结果还是推迟到了2月20号,意料之中,心情复杂,度日如年。疫情使得在家荒废了很久,想想还是得干些什么。逛b站的时候看见有图形编程这门课,也一直想学习图形学,正好趁这段时间学习学习。不论考不考得上,学习总归是不会错的。写此博客,一来帮助我巩固知识点,二来梳理一下我对这门技术的理解。

一、Computer Graphics

1、什么是计算机图形学?

计算机图形学(Computer graphics简称CG),是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理算法。——百度百科

我个人理解是,将虚拟的三维世界绘制成二维图像并展现在计算机显示器上的一门学科。

2、计算机图形学有哪些内容?

计算机图形学涉猎很广,但主要研究三个部分:

建模(modeling):顾名思义,建造三维模型,将模型的组成(一般是顶点和面片信息)记录下来,形成模型文件(常见如.obj/.fbx/.maya)

渲染(redering):将三维物体绘制在屏幕上,屏幕由许多栅格(像素点)组成,即决定每个像素点为什么颜色。(感觉自己目前对渲染理解还有点浅显)

动画(animation):即模拟三维物体的运动,如布料运动和流体运动等。

二、Graphics Processing Unit

1、什么是GPU?

GPU全称Graphics processing unit,我们很容易联想到cpu(computer processing unit)。学计算机的都知道cpu的地位,自冯诺依曼机起,cpu就承担着整个计算机的运算功能。而gpu则是承担更加特殊运算功能的“cpu”(我自己的理解),即专门处理图形流水线运算的运算器。当然,随着时代的发展,现在已经有许多不仅仅是用来绘制图形的gpu。

三、图形流水线

1、计算机是怎样绘制三维图形的?

计算机绘制图形,按照如图所示的步骤:(图片取自北京林业大学杨刚教授的课件,如侵权请联系我删除)

vertex shader:对三维模型的顶点进行变换(如平移、旋转、放缩、投影等)使其变为二维图形,可编程控制顶点属性。

geometry shader:可以在cpu没有传输模型信息的情况下,生成一些新的顶点和面片。

rasterization:光栅化,计算二维图形所覆盖的像素。

fragment shader:对像素进行处理(如雾效、深度测试等),处理后存放入帧缓存区。

四、配置freeglut

这篇大佬的博客讲的很清楚,我就不再赘述:

https://blog.csdn.net/weixin_42078760/article/details/80487253

五、Hello OpenGL

创建c++程序,运行如下代码

#include "stdio.h"
#include <GL\glut.h>


void myDisplay(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
	glFlush();
}

int main(int argc, char *argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
	glutInitWindowPosition(300, 300);
	glutInitWindowSize(400, 400);
	glutCreateWindow("Hello OpenGL!");
	glutDisplayFunc(&myDisplay);
	glutMainLoop();
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章