15SC0RND201711041I翻译第一期
开始翻译啦!
http://www.opengl-tutorial.org/beginners-tutorials/tutorial-1-opening-a-window/#introduction
第一课
介绍
欢迎来到第一节课!
在开始OpenGL之前,你将会学习如何搭建课程环境,如何运行它以及最重要的,如何使用这些代码自嗨。
知识基础
本课程不需要任何特殊的知识基础,某一种语言经验(C,Java,Lisp,Javascript之类的)仅有助于你完全理解代码,但不是必须的,只不过同时学两样东西会麻烦一些。
所有课程代码被尽可能写得简单,是没有模板,没有类和指针的“Eazy C++”格式。这样,即便你只知道JAVA也能理解所有东西。
忘了它们
你不需要知道任何事,反而应该忘记有关OpenGL的一切。如果你知道类似glBegin()的东西,快忘了它吧。在这里,你要学习现代OpenGL 3和4,可是有的网络教学教授老版本的OpenGL比如一代和二代。所以,忘掉你所知道的一切,不然你的大脑就要乱成一锅粥啦。
搭建教程
Windows、Linux和Mac都可以搭建教程,并且步骤是差不多的。
- 我警告你!!升级驱动!!
- 如果你没有编译器,快下载一个
- 安装CMake
- 下载教程代码
- 用CMake生成一个project
- 用你的编译器构筑它
- 这时候你就可以玩耍了!
不同平台的步骤细节并没有给出,可能会需要一些改动,不确定的话读读Windows的操作指南再试试看吧。
在Windows上搭建
- 升级驱动是很简单的,只需要打开英伟达或者超威官网下载驱动器。可以在控制面板-》系统和安全-》系统-》设备管理器-》显示适配器检查GPU型号。如果你使用英特尔GPU,通常驱动程序由原始设备制造商(OEM)提供。
- 我们建议编译器使用VS2017桌面版,可以在这里免费下载(最好要选择默认安装路径噢)。请确认你在自定义安装时选择了C++。如果你更想用MinGW的话,我们推荐Qt Creator,安装一个你喜欢的就好啦。接下来的步骤以Visual Studio演示,但其它的集成开发工具(IDE)操作是起来差不多的。
- 从这里下载并安装CMaker。
- 可以在这里免费下载课程代码,并且解压缩它。
- 打开CMaker后,在第一行打开解压后的文件夹,就是包含CMakeLists.txt的那个文件夹。接下来,在第二行输入你希望编译器应该储存在哪里,方便起见,可以把所有东西放在同一个大文件夹下。当然,你要是想放在别的地方也是没有什么问题的。
- 点击配置(Configure)按钮,因为是第一次配置工程,CMaker会询问使用哪个编译器。这时候你就要选择第一布所安装的那款。如果你是64位系统,请选择64 bits,不知道的话就点32 bits吧。
- 点击配置键后请稍等片刻,在进度条满了之后,再点击生成(Generate)键,你的VS工程就这样出现啦。这之后CMake就可以扔边上咯。
- 打开你刚生成的文件夹,然后使用VS打开Tutorials.sln。
- 在搭建菜单,点击调试来编译所有课程文件,所有的可执行文件就会生成在课程文件夹里了。
- 打开playground,会出现一个纯色背景(原文说是黑色然而我是蓝色的hhh)
- 你还可以通过F5来运行任何课程代码,不过要在此之前先【设为启动项目】噢(右键想打开的文件,在下拉菜单即可看到)
运行它们
你应该从正确的目录来直接打开教程,只需要简单双击就好啦。当然,如果你实在喜欢命令行模式,就使cd打开吧,请注意,目录要正确噢。
如果你想用IDE运行,不要忘记阅读使用指南并且设置正确路径。
如何学习教程呢?
每一课都有相应的源代码以及数据,都以tutorialXX来命名。但是你不能随便魔改它们哦,因为这只是让你看着明白的。如果你想自己试试看,就打开playground/playground.cpp,随便造吧!如果你弄叉劈了,只需要随便把某一课教程粘贴进去就行了哈。
在学习过程中,我们会提供某些部分的代码。强烈建议边读边自己粘进playground试试看,学而习之,收获才会更大。千万不要读完代码就了事,这样你可学不到什么的,即使之复制粘贴来玩,你也会学到不少东西呢。
打开窗口
好了!这就是OpenGL的代码!mmm,其实并不是。很多教程向你展示“低级”的做事方法,这样你不会见到任何玄学的东西发生。但是“打开窗口”这部分实在是无聊又无用,所以我们会使用外部函数库GLFW来实现它。如果你非要自己弄,那可以使Windows上的Win32 API、Linux上的 X11 API、Mac上的Cocoa API或者刚高端的库比如SFML、FreeGLUT、SDL等等,详见Links页面。
好啦,开始吧!
首先,我们先要处理一下dependencies(这个实在想不到合适的词汇了、、、专业词很匮乏,知道的大佬麻烦告我一声)我们需要一些基本的东西来在控制台里显示消息。
这是标准文件头
#include <stdio.h>
#include <stdlib.h>
首先向我们走来的是GLEW。它事实上有一点玄学之力存在,不过咱回头再谈它。
//包含了GLEW。永远在gl.h以及glfw.h之前包含它,因为玄学
#include <GL/glew.h>
我们打算让GLFW控制窗口和键盘,所以我们把它包含在这里
//包含GLFW #include <GL/glfw3.h>
实际上我们并不需要下面这玩意,但它是个将会很有用的3D数学库。GLM里就没什么玄学存在了,它是手写出来的,你完全可以自己写一个。“using namespace glm”可以让你在“glm::vec3”里面省去“glm::”这句话。
//包含GLM #include <glm/glm.hpp> using namespace glm;
如果你从playground.cpp贴过来了所有这些#include,编译器会告诉你并没有mian()函数。所以,咱写一个吧:
生词:prerequisite merely procedure adaptation 与 adaption panel integrated repository navigate configure dependency from inside directory tweak torture snippet hesitate compatible poll