opengl配置过程中遇到的问题
opengl错误解析

(例如你的VC装在C,但是这些路径全部在D),改过来就OK了。
如果你是按照初始路径安装vc6.0的,路径应为:
executatble files:
C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin
2.如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将得到“unresolved external on _WinMain@16”的LNK2001错误信息。
3.使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func” 的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行连接,将在__imp__func上发生LNK2001;如果不使用/MD选项编
multithreaded DLL 多线程动态链接库(release版本)
Debug Single-Threaded 单线程静态链接库(debug版本)
Debug Multithreaded 多线程静态链接库(debug版本)
Debug Multithreaded DLL 多线程动态链接库(debug版本)
3,你可以从网上下载glut.h,glut.dll,glut.lib,在VC的include目录里新建gl文件夹,将glut.h放入到该文件夹,另外将glut32.dll放入到C:\WINDOWS\SYSTEM32目录里,将glut32.lib放入到vc的lib文件夹里就可以了。
visual studio 6.0 link 2001常见错误、解决总结 收藏
opencl error clcreatebuffer

clCreateBuffer 是OpenCL 中的一个函数,用于在OpenCL 设备上创建缓冲区对象。
当您遇到clCreateBuffer 相关的错误时,这通常意味着在尝试创建缓冲区时出现了问题。
以下是一些常见的问题和解决方法:
内存错误:您尝试创建的缓冲区超过了设备可用的内存空间。
您需要检查设备的能力和可用内存,或者考虑减小缓冲区的大小或减少缓冲区的数量。
参数错误:传递给clCreateBuffer 的参数可能不正确。
例如,大小参数可能为负数,或者flags 参数可能没有正确设置。
确保您正确设置了所有参数。
上下文问题:确保您已正确创建并设置了一个OpenCL 上下文,并且该上下文与您尝试在其中创建缓冲区的设备兼容。
错误检查:确保您已正确检查了clCreateBuffer 的返回值,以确定是否发生了错误。
OpenCL 函数通常返回一个错误代码,您可以使用clGetError 函数来获取此错误代码,并据此采取适当的行动。
平台问题:确保您已选择了正确的OpenCL 平台,并且该平台支持您正在使用的功能和设备。
如果以上建议都无法解决问题,建议您提供更多关于错误的详细信息,例如错误代码、上下文设置、设备信息等,以便更好地帮助您解决问题。
VS2008OpenGL环境遇到错误

VS2008中OpenGL环境配置1.安装下载OpenGL类库/source/274113(这个是1.4版本的),也可以到OpenGL官网下载其他版本。
将.h文件拷贝到C:\Program Files\Microsoft Visual Studio 9.0\VC\include\GL目录中(没有GL目录就自己创建一个,这里的具体路径视电脑上VS2008安装的位置而定)将.lib文件拷贝到C:\Program Files\Microsoft Visual Studio 9.0\VC\lib目录中将.dll文件拷贝到C:\Windows\System32目录中遇到问题1、在VS2008中运行Win32 console程序出现“Error spawning ’cmd.exe‘”进入菜单Tools -> Options -> Projects and Solutions -> VC++ Directories添加:$(SystemRoot)/System32$(SystemRoot)$(SystemRoot)/System32/wbem2、配置环境先创建一个Win32控制台项目,配置项目属性:(1)项目——项目属性——配置属性——C/C++——预处理器——预处理器定义,添加GLUT_BUILDING_LIB(2)项目——项目属性——配置属性——链接器——输入——附加依赖项,添加glut32.lib Opengl32.lib Glu32.lib (glaux.lib VS2008不加)3、在DEBUG模式下,调试时出现“无法找到MSVCR90D.dll…”的问题。
其他症状:在Release模式下就没有问题。
原因:这个是VS2008的一个BUG,由FAT32文件格式引起。
解决办法:方法一:英文版:Project Properties -> Manifest Tool-> Use FAT32 Work-around -->Yes中文版:项目-->项目属性-->配置属性-->清单工具-->使用FAT32解决方法—>是然后clean下,然后Rebuild即可正常运行,但是这样就会很麻烦,每次建个项目,都要设置它的项目属性。
OpenGL中关于坐标使用常见问题的分析

Op n e GL坐标使 用具 有 一 定 的指 导 意 叉。
关 键 词 : e GL; Βιβλιοθήκη ; 维 坐 标 Op n 坐 三
中图分 类 号 : 3 l TP 9
文 献标 识 码 : A
文 章 编号 : 0 9 3 4 2 0 )0 2 1 o 0 l o — 0 4(O 81 — 0 3 - 2
l引 言
众 所 周 知 ,p n O e GL图形 系统 是 ~ 个到 图 形 硬件 的软 件 接 口 , 可 以 控 制 计算 机 图形 学 技 术 来 生 成 真 实 感 图形 或 虚 构 出现 实世 其
界 中没 有 的 图像 , 强 大 的功 能 使 之几 乎成 为 从 事三 维 图 形 开 发工 作 的 技 术 人员 所 必 须 掌握 的开 发 工具 。 是 对 于 喜爱 O eG 其 但 pn L的 编 程 初学 者 来 说 , p n L的坐 标 问 题 却 往 往令 其 感 到 迷 惑— — 大 多数 的相 关 工 具 书 及 参 考 资 料 对 O eG O eG pn L的 坐 标 问 题 并 末 做 过 于 深 入 的 阐述 , 些 最 缺 乏 的 知 识却 往 往 是 O eG 这 p n L初学 者最 需 要 的 : 没有 对 O e G p n L坐 标 问题 进 行 足 够 的 了解 , 仅 会 使 初 学 者 不 的空 间想 象 遇 到 困难 , 且使 其 编 程 在 开始 阶段 便 因偏 离 了方 向 而难 以进 行 。 而 因此 我 们 选 择 了几 个 O eG p n L观察 中关 于坐 标 使 用 常 见 的 问题 进行 分 析 ,希 望 这 些 基 本 而 又 十 分 重 要 的 问 题 能 让 初 学 者对
解决opengl计算顶点的法线问题

解决opengl计算顶点的法线问题因为需要的论⽂,最近开始学习OpenGL。
由于刚⼊门的初学者有这么总会遇到很多问题,。
这些天,好不容易才OpenGL个问题弄明确了。
⼏点迷惑:1. 在⽹上百度。
发现⾮常多求平⾯法向量的介绍以及程序。
后⾯才知道顶点法向量才是我要的。
2. 对于空间中的三个点。
怎么确定平⾯法向量的⽅法?这⾥能够通过尝试顺时针和逆时针结合结果图来推断。
以下简介下如何进⾏如果。
怎样通过如果⽅法推断平⾯法向量的⽅向(这⾥是指三⾓⾯⽚):⾸先,当然要有数据,就是原始数据中每⼀个⾯⽚是由那三个顶点组成。
⽐⽅如今空间中有⼀个三⾓形平⾯由三个顶点A,B,C组成。
接着。
就会存在以下两种情况,例如以下图:因此,我们在程序中仅仅要反着试⼀次,就会得到我们的结果了。
以下我给出我的部分代码已经效果图(斯坦福⼤学著名的bunny模型):当中,A和B是后⾯要进⾏叉乘的两个向量,point1,point2,point3就是三⾓⾯⽚的三个顶点。
情况1:A[X] = point2[X] - point1[X];A[Y] = point2[Y] - point1[Y];A[Z] = point2[Z] - point1[Z];B[X] = point1[X] - point3[X];B[Y] = point1[Y] - point3[Y];B[Z] = point1[Z] - point3[Z];情况2:<span style="color:#000000;">A[X] = point3[X] - point1[X];A[Y] = point3[Y] - point1[Y];A[Z] = point3[Z] - point1[Z];B[X] = point1[X] - point2[X];B[Y] = point1[Y] - point2[Y];B[Z] = point1[Z] - point2[Z];</span>从上⾯两种情况能够看出。
OpenGL编程低级错误及常见问题解答

OpenGL编程低级错误及常见问题解答低级错误1.没有glDisable(GL_TEXTURE_2D),导致基本几何作图全部失败。
2.镜头位置没调好,导致所有物体不可见.3.物体位置数据错误,导致物体大大超出镜头显示范围.4.纹理没有GL_CLAMP导致边界拼接出现缝线.5.纹理没有GL_REPEA T导致使用超出1.0纹理坐标技巧失败,显示单色插值.6.没有glEnable(GL_TEXTURE_2D)导致全白纹理.7.glEnable(GL_TEXTURE_2D)后没有使用纹理顶点导致如glColor效果的纯单色.8.应该在作图循环设置灯光位置,因为The?position?is?transformed?by?the?modelview?matrix?when?glLight?is?called?(just?as?if?it?w ere?a?point),?and?it?is?stored?in?eye?coordinates.?9.灯光位置应该是4个float,3个float程序不出错,但结果完全扭曲。
10.打开灯光却没设置顶点法线,到头一场空。
11.Window Class 没有CS_OWNDC,导致glDrawPixels失败,如在子窗口V iew上进行象素写入操作.12.没有设置PIXELFORMA TDESCRIPTOR的cAlphaBits=8,导致glReadPixels读取alpha通道数据失败,统统为0.13.手动实现的多层纹理闪烁,出现线带,没有使用glPolygonOffset.14.glDrawPixels格式GL_RGB或GL_BGR_EXT的数据时崩溃,且数据有效,没有使用glPixelStorei(GL_UNPACK_ALIGNMENT, 1);导致图像行默认4字节对齐,导致OpenGL数据读取越界崩溃.相应的要为glReadPixels设置glPixelStorei(GL_PACK_ALIGNMENT, 1); 15.glReadPixel读取被覆盖的OpenGL窗口部分的图像数据时,读出数据混乱无效,OpenGL Pixel Ownership检测导致,标准如此.使用PixelBuffer,或强制置前OpenGL窗口解决.16.glReadPixels读取总是从FrameBuffer的左下往右上读取,毫无参数可设置改变方向,真是笨到家了. 载入图像一般还是从上到下比较容易理解.17.使用glDepthMask(GL_FALSE)后不打开,glClear无法清除深度缓冲,导致现象:场景起始静止正常,一旦移动出现不规则的透明无渲染区域,深度缓存逻辑混乱.18.gluPerspective(45.0f, (GLfloat)cxPixels/(GLfloat)cyPixels, 0.1f, 2000.0f);这里的0.1f将导致物体和地面的相交处闪烁,原因待查,至少取1.0f.19.没有显示定义shiniess或shiniess为0,在shader中对gl_FrontMaterial.shininess使用pow 计算,结果不可测,黑色条带闪烁,quite not understand.常见错误问:OpenGL中的Stencil Buffer是什么东西?答:模板缓存(Stencil Buffer)。
深入分析OpenGL实现原理与优化方法

深入分析OpenGL实现原理与优化方法OpenGL是一种广泛应用于计算机图形学领域的开源API。
它提供了一套用于绘制三维图像的工具包,既可以在桌面应用中使用,也可以在移动应用和Web应用中使用。
OpenGL使用C语言编写,并允许程序员自定义实现方法,以满足不同需求。
OpenGL的工作原理OpenGL的工作基于两个基本概念:渲染管道和状态机。
渲染管道指的是将输入的图形数据转换成最终显示在屏幕上的像素的处理过程。
渲染管道包括:顶点处理、几何处理、光栅化和片元处理。
状态机将OpenGL的状态分为多个状态,能够按照需要切换不同的状态,从而控制OpenGL的一些行为,如深度测试、剔除等。
OpenGL的工作流程为:先将图形数据通过顶点处理器进行处理,再经过几何处理器处理为顶点可能需要的形式,并进行坐标映射和变换处理等。
接下来,OpenGL对形状进行光栅化,将每个点转换为一个像素点,并对特定区域进行操作。
最后,将特定的像素点按照一定的顺序绘制出来,形成最终的图像。
OpenGL的性能优化方法OpenGL的性能直接影响着三维场景的流畅体验。
在实际应用中,处理逻辑复杂的三维场景时,需要使用一些优化方法来提高OpenGL的性能。
1. 缩小绘制范围绘制的范围越小,执行的次数就越少,能够显著提高OpenGL 的性能。
因此,需要保证只绘制可见的图像区域,同时尽可能少绘制不可见区域。
2. 减少光照计算光照处理需要很大的计算量,影响OpenGL性能。
可以通过一些技巧,如减少光源的数量,简化物体材质等方式减少光照计算量。
3. 减少纹理数量和大小OpenGL需要消耗大量的内存来维护纹理,特别是在绘制大型场景时,如果每个物体都使用高质量的纹理,会占用大量内存和处理时间。
因此,可以通过降低纹理质量或减少纹理数量来优化OpenGL的性能。
4. 合并绘制在绘制物体时,可以合并相邻的物体,以减少绘制次数,提高OpenGL的性能。
5. 使用缓存在OpenGL中,使用缓存可以减少CPU与GPU之间的数据传输时间,提高性能。
OpenGL问题

OpenGL问题1.MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup项目》连接》系统》子系统改成windows一,问题描述MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用Debug\jk.exe : fatal error LNK1120: 1 个无法解析的外部命令error LNK2001: unresolved external symbol _WinMain@16debug/main.exe:fatal error LNK 1120:1 unresolved externals error executing link.exe;二,原因及解决办法产生这个问题的真正原因是c语言运行时找不到适当的程序入口函数,一般情况下,如果是windows程序,那么WinMain是入口函数,在VS2008中新建项目为“win32项目”如果是dos控制台程序,那么main是入口函数,在VS2008中新建项目为“win32控制台应用程序”而如果入口函数指定不当,很显然c语言运行时找不到配合函数,它就会报告错误。
修改设置适应你的需求如果是windows程序:1.菜单中选择 Project->Properties, 弹出Property Pages窗口2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_CONSOLE, 添加_WINDOWS.3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为Windows(/SUBSYSTEM:WINDOWS)如果是控制台程序:1.菜单中选择 Project->Properties, 弹出Property Pages窗口2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_WINDOWS, 添加_CONSOLE.3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为CONSOLE(/SUBSYSTEM:CONSOLE)error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数_glutInit_ATEXIT_HACK@8 中被引用1>GEARS.obj : error LNK2019: 无法解析的外部符号___glutCreateWindowWithExit@8,opengl的高级菜鸟问题1. 看了一本书《OpenGL三维图形系统开发与应用技术》,但是,其中涉及到glut.h文件的函数无法正常连接,典型的错误如下:2.------ 已启动生成: 项目: gears, 配置: Debug Win32 ------3.1>正在链接...4.1>GEARS.obj : error LNK2019: 无法解析的外部符号___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用5.1>GEARS.obj : error LNK2019: 无法解析的外部符号___glutCreateWindowWithExit@8,该符号在函数_glutCreateWindow_ATEXIT_HACK@4 中被引用6.1>.\Debug/gears.exe : fatal error LNK1120: 2 个无法解析的外部命令7.1>生成日志保存在“file://c:\vcprog\OpenGL\book\Chapter03\GEARS\Debug\Build Log.htm” 8.1>gears - 3 个错误,0 个警告9.========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========10.11.反复思考,也没有找到答案,网上也有说类似问题的,但是竟然没有这方面的解决方案,今天看了glut.h的文件内容,glut.h的注释竟然就写着如下内容:12. Note that the __glut*WithExit routines should NEVER be called directly.13. To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK.14.于是,在#include 前面加上了一句:15.#define GLUT_DISABLE_ATEXIT_HACK16.17.再次链接,一切正常。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当你遇到这些问题时,《VS2005下opengl的配置准备过程》这篇文章是一个很好的参考哦!下载地址:呵呵,就是在百度文库中搜吧,题目已经给出了。
另外,如果有问题,可以在这里留言:/u/1879746691问题1:对应《VS2005下opengl的配置准备过程》【第一步】error C2664: “auxInitWindowW”: 不能将参数1 从“const char [7]”转换为“LPCWSTR”与指向的类型无关;转换要求reinterpret_cast、C 样式转换或函数样式转换问题2:对应《VS2005下opengl的配置准备过程》【第四步】1> Generating Code...1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: virtual char const * __thiscall std::exception::what(void)const " (?what@exception@std@@UBEPBDXZ) already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: __thiscall std::exception::exception(char const * const &)" (??0exception@std@@QAE@ABQBD@Z) already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: virtual __thiscall std::exception::~exception(void)" (??1exception@std@@UAE@XZ) already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: __thiscall std::exception::exception(class std::exception const &)" (??0exception@std@@QAE@ABV01@@Z) already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@Y AXXZ) already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in MSVCRTD.lib(cinitexe.obj)1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined inMSVCRTD.lib(cinitexe.obj)1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRTD.lib(cinitexe.obj)1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRTD.lib(cinitexe.obj)1>LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRTD.lib(MSVCR100D.dll)1>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRTD.lib(MSVCR100D.dll)1>LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library1>NeheSDK.lib(nexception.obj) : error LNK2001: unresolved external symbol "public: void __thiscall std::_String_base::_Xran(void)const " (?_Xran@_String_base@std@@QBEXXZ)1>NeheSDK.lib(image.obj) : error LNK2001: unresolved external symbol "public: void __thiscall std::_String_base::_Xran(void)const " (?_Xran@_String_base@std@@QBEXXZ)1>NeheSDK.lib(texture.obj) : error LNK2019: unresolved external symbol "public: void __thiscall std::_String_base::_Xran(void)const " (?_Xran@_String_base@std@@QBEXXZ) referenced in function "public: int __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::compare(unsigned int,unsigned int,char const *,unsigned int)const " (?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE HIIPBDI@Z)1>NeheSDK.lib(state.obj) : error LNK2001: unresolved external symbol "public: void __thiscall std::_String_base::_Xran(void)const " (?_Xran@_String_base@std@@QBEXXZ)1>NeheSDK.lib(opengl.obj) : error LNK2001: unresolved external symbol "public: void __thiscall std::_String_base::_Xran(void)const " (?_Xran@_String_base@std@@QBEXXZ)1>NeheSDK.lib(text.obj) : error LNK2001: unresolved external symbol "public: void __thiscall std::_String_base::_Xran(void)const " (?_Xran@_String_base@std@@QBEXXZ)1>NeheSDK.lib(nexception.obj) : error LNK2001: unresolved external symbol "public: void __thiscall std::_String_base::_Xlen(void)const " (?_Xlen@_String_base@std@@QBEXXZ)1>NeheSDK.lib(image.obj) : error LNK2001: unresolved external symbol "public: void __thiscall std::_String_base::_Xlen(void)const " (?_Xlen@_String_base@std@@QBEXXZ)1>NeheSDK.lib(texture.obj) : error LNK2019: unresolved external symbol "public: void __thiscall std::_String_base::_Xlen(void)const " (?_Xlen@_String_base@std@@QBEXXZ) referenced in function "protected: bool __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Grow(unsigned int,bool)" (?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE_N I_N@Z)1>NeheSDK.lib(state.obj) : error LNK2001: unresolved external symbol "public: void __thiscall std::_String_base::_Xlen(void)const " (?_Xlen@_String_base@std@@QBEXXZ)1>NeheSDK.lib(opengl.obj) : error LNK2001: unresolved external symbol "public: void __thiscall std::_String_base::_Xlen(void)const " (?_Xlen@_String_base@std@@QBEXXZ)1>NeheSDK.lib(text.obj) : error LNK2001: unresolved external symbol "public: void __thiscall std::_String_base::_Xlen(void)const " (?_Xlen@_String_base@std@@QBEXXZ)1>LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup1>C:\Documents and Settings\Administrator.1FC07B12E4D94F6\桌面\Nehe SDK\Debug\Test.exe : fatal error LNK1120: 3 unresolved externals1>1>Build FAILED.1>1>Time Elapsed 00:00:04.04========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========问题3:对应《VS2005下opengl的配置准备过程》【第二步】和【第三步】1> exam1.cpp1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup1>D:\openGL\pro2\Debug\pro2.exe : fatal error LNK1120: 1 unresolved externals1>1>Build FAILED.。