OpenGL的学习之旅(一)

Visual Studio 2010下的OpenGL环境搭建

楼主是今年(2020年)的大四学生,毕设课题做的是基于C++与OpenGL的空间样条曲面生成,作为一个非CS的科班生,为了能够更好的形成OpenGL的知识框架,并希望养成一个良好的学习记录习惯,特此开篇,以望交流。

今天的任务是在VS2010下进行的OpenGL环境搭建,参考了众多方案,主要是哔哩哔哩上ID工大闪光文化、CSDN上的克里特的操作流程(在此感谢!)

CSDN博主克里特的OpenGL环境搭建教程
B站工大闪光文化的OpenGL环境搭建教程

STEP 1 文件准备

先到
https://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip去下载所需的文件,保存,解压。

STEP 2 文件打包分类

将下载的压缩包解开,将得到5个文件

glut.dll, glut32.dll, //2个dll
glut.lib, glut32.lib, //2个lib
glut.h //1个头文件

  1. 把glut.h复制到\include\gl目录中。(自己新建gl文件夹,比如我的目录是:D:\软件安装\VC\include\gl

  2. 把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹\lib(我的目录是:D:\软件安装\VC\lib)。//和别的配置版本不同,我VS2010安装时的文件夹新建了。

  3. 把解压得到的glut.dll和glut32.dll放到操作系统(C盘下)目录下面的System32文件夹内。(如果是32位系统拷贝到C:\Windows\System32目录下,如果是64位系统拷贝到C:\Windows\SysWOW64目录下)

STEP 3 检验搭建环境
利用已有的简单OpenGL程序进行环境检验,(出处不详,望谅解)

// peizhi002.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


#include 
// gl/glut.h包含了GL/GL.h和GL/GLU.h
#include 

using namespace std;

/*
* 输出OpenGL信息
*/
void printInfo()
{
    // 返回负责当前OpenGL实现厂商的名字  
    const GLubyte* strVendor = glGetString(GL_VENDOR);
    // 返回一个渲染器标识符,通常是个硬件平台
    const GLubyte* strRenderer = glGetString(GL_RENDERER);
    // 返回当前OpenGL实现的版本号 
    const GLubyte* strGLVersion = glGetString(GL_VERSION);

    cout << "OpenGL实现厂商的名字:" << strVendor << "\n";
    cout << "渲染器标识符:" << strRenderer << "\n";
    cout << "OpenGL版本号:" << strGLVersion << '\n';
}

/*
* 渲染图形
*/
void renderScene()
{
    // 清除,GL_COLOR_BUFFER_BIT表示清除颜色
    glClear(GL_COLOR_BUFFER_BIT); 
    // 设置颜色,三个参数分别为RGB
    glColor3f(0.0f, 1.0f, 1.0f);
    // 绘制矩形
    glRectf(-0.5f, -0.5f, 0.5f, 0.5f); 
    // 保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)
    glFlush(); 
}

int main(int argc, char* argv[])
{
    // 对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次
    glutInit(&argc, (char**)argv);
    // 设置显示方式,其中GLUT_RGB表示使用RGB颜色,GLUT_SINGLE表示使用单缓冲
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    // 设置窗口大小
    glutInitWindowSize(500, 500);
    // 设置窗口在屏幕中的位置
    glutInitWindowPosition(300, 300);
    // 根据前面设置的信息创建窗口
    glutCreateWindow("Hello OpenGL");
    // 自定义函数,打印OpenGL信息
    printInfo();
    // 当进行画图时,传递的函数会被调用
    glutDisplayFunc(&renderScene);
    // 进行一个消息循环,等待窗口关闭后才会返回
    glutMainLoop();
    return 0;
}

正常的运行结果为
OpenGL的学习之旅(一)_第1张图片
OpenGL的学习之旅(一)_第2张图片

虽然说配置环境仅仅是个基本操作,但对于小白而言,总会遇到这样或那样的问题,这里我记录了环境配置过程常出现典型问题的解决办法。

问题1

错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “stdafx.h””?

报错原因:

是开启了预编译头功能。这个是VS系列编译器提供的一项新功能,可以将一些常用的头文件,加入到这个预编译头文件中。

解决办法01
这样,你的其他文件,只需要添加stdafx.h即可
程序在编译之前,会将stdafx.h中的内容,替换到源代码中,提高编译效率
OpenGL的学习之旅(一)_第3张图片
解决办法02
如果你不想开启该功能,可以通过如下步骤停止该内容:
我的是VS2010.你可以在相应版本中,找类似的操作

在菜单栏,点击“项目”》》右键“属性”》》选择“C/C++”》》选择“预编译头”》》选择“不使用预编译头
OpenGL的学习之旅(一)_第4张图片

问题2

错误描述:
1>正在编译资源…
1>正在编译资源清单…
1>正在链接…
1>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
1>生成日志保存在“file://E:\HelloC\ShapeFill V11\ShapeFill\Debug\ShapeFill.log”
1>ShapeFill- 1个错误,0个警告
========== 全部重新生成: 0 已成功, 1 已失败, 0 已跳过 ==========

报错原因:
电脑是64位,存在两个cvtres.exe。

解决办法01
:将 项目》》项目属性》》配置属性》》链接器》》清单文件》》嵌入清单 “是”改为“否”。在VS2010窗口即可解决问题,比较方便。但治标不治本。
OpenGL的学习之旅(一)_第5张图片

解决办法02 参考博主kevin_mqj 的解决办法

查看计算机是否为64bit操作系统,如是,继续如下操作。
查找是否有两个cvtres.exe。
C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
右键属性—详细信息, 查看两者版本号,删除/重命名较旧的版本,或者重新设置Path变量。

小伙伴们注意是***.exe文件***,并不是***应用程序***。

小结
大家在配置时一定要找到自己的安装位置,比如我的安装文件就是在D:\软件安装\VC,因为VS2010在安装时会自动配置很多文件,会散落成多个文件夹,大家要记得找到准确的“VC”文件夹呢。

作为一个小白,相信还有很多不足之处,欢迎小伙伴们指出交流呢。
侵删。

你可能感兴趣的:(小白大战OpenGL)