楼主是今年(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个头文件
把glut.h复制到
把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹
把解压得到的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;
}
虽然说配置环境仅仅是个基本操作,但对于小白而言,总会遇到这样或那样的问题,这里我记录了环境配置过程常出现典型问题的解决办法。
问题1
错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “stdafx.h””?
报错原因:
是开启了预编译头功能。这个是VS系列编译器提供的一项新功能,可以将一些常用的头文件,加入到这个预编译头文件中。
解决办法01
这样,你的其他文件,只需要添加stdafx.h即可
程序在编译之前,会将stdafx.h中的内容,替换到源代码中,提高编译效率
解决办法02
如果你不想开启该功能,可以通过如下步骤停止该内容:
我的是VS2010.你可以在相应版本中,找类似的操作
在菜单栏,点击“项目”》》右键“属性”》》选择“C/C++”》》选择“预编译头”》》选择“不使用预编译头”
问题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窗口即可解决问题,比较方便。但治标不治本。
解决办法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”文件夹呢。
作为一个小白,相信还有很多不足之处,欢迎小伙伴们指出交流呢。
侵删。