opengl 程序到底是如何写的?

初学opengl 的人和我有一样的感受,看了那么多OPENGL的书 只是让我添加GLU GLUT  GLEW GLFW这些东西到底是什么? 我们学opengl 而opengl竟然什么也没有.大家一定很纳闷.

当初学三个月opengl,也没有理解清楚.opengl到底是什么?如果我打个浅显比喻:opengl就c++ 就是语法,在绘图里不是c++语法 这个语法就是opengl ,就是绘图描述 渲染 处理 ,他有自己的语法,类型和自己的操作命令,就如同你学会了c++ 你能做什么 什么也做不了,必须靠工具,靠外部框架,GLUT GLEW GLFW QT 都是.我们在windows 下绘图使用graphics.h  在VS下使用easyx.h  我们要包含glut.h 也就是说他是一个封装了opengl图形操作函数的图形库 只要调用GLUT里的函数就可以绘图,

//------------------GLEW  opengl 的扩展库 安装使用--------------------------------------------------------

OpenGL扩展库是一个简单的工具,有助于C / C++开发者编写可移植的应用程序扩展和初始化。目前支持多种操作系统,包括Windows,Linux和Solaris,达尔文,IRIX。

OpenGL扩展

  1. https://sourceforge.net/project/downloading.php?group_id=67586&filename=glew-1.5.1-win32.zip
  2. 点击上面的链接下载最新的GLEW(支持OpenGL 3.0),解压,将 /bin/glew32.dll 拷贝到 c:/windows/system32 下面,将 /lib/glew32.lib 拷贝到VC安装目录下的 lib 目录下(如:/Microsoft Visual Studio 9.0/VC/lib/下),将 /include/glew.h 和 /include/wglew.h 拷贝到 VC 安装目录下的 /include/gl/ 目录下(如:/Microsoft Visual Studio 9.0/VC/include/gl/下)。在程序中我们只需要在包含gl,glu 或 glut.h 之前包含 glew.h就可以了(注意:一定要先包含 glew.h),在在代码中加上这么一句:
  3. #pragma comment (lib, "glew32.lib")
  4. 示例:
  5. #include <GL/glew.h>
  6. #include <GL/glut.h>
  7. #progrma comment(lib, "glew32.lib")
  8. 在创建OpenGL渲染context之后,调用 glewInit(); 初始化glew就可以了。

//---------------------GLFW 安装--------------------------------------------------

GLFW - 很遗憾,没有找到FW的确切含义,Wiki上没有,GLFW主页也没有。猜测F表示for,W表示Window

GLFW一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等。因为OpenGL没有窗口管理的功能,所以很多热心的人写了工具来支持这些功能,比如早期的glut,现在的freeglut等。那么GLFW有何优势呢?glut太老了,最后一个版本还是90年代的。freeglut完全兼容glut,算是glut的代替品,功能齐全,但是bug太多。稳定性也不好(不是我说的啊),GLFW应运而生。

1. 打开Visual Studio 2012,新建一个Console程序

2. 右键单击project选择properties,打开属性页面

3. 在VC++Directories-Include Directories中写入glfw的头文件目录,我这里是 ../glfw-3.0.4.bin.WIN32/include

4. 在VC++ Directories-Library Directory中写入glfw的库文件目录,我这里是 ../glfw-3.0.4.bin.WIN32/lib-msvc110

5. 在Linker - Input - Additional Dependencies中填入glfw3dll.lib

注意:如果使用静态链接,那么上面第五步中glfw3dll.lib应该换成glfw3.lib,并且在工程属性页面中C/C++ - Code Generation 将 Runtime Library 设置为 /Mt 或者 /Mtd

#include <GLFW/glfw3.h>int main(void)
{
    GLFWwindow* window;    /* Initialize the library */
    if (!glfwInit())        return -1;    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(480, 320, "Hello World", NULL, NULL);    if (!window)
    {
        glfwTerminate();        return -1;
    }    /* Make the window‘s context current */
    glfwMakeContextCurrent(window);    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window))
    {        /* Draw a triangle */
        glBegin(GL_TRIANGLES);

        glColor3f(1.0, 0.0, 0.0);    // Red
        glVertex3f(0.0, 1.0, 0.0);

        glColor3f(0.0, 1.0, 0.0);    // Green
        glVertex3f(-1.0, -1.0, 0.0);

        glColor3f(0.0, 0.0, 1.0);    // Blue
        glVertex3f(1.0, -1.0, 0.0);

        glEnd();        /* Swap front and back buffers */
        glfwSwapBuffers(window);        /* Poll for and process events */
        glfwPollEvents();
    }

    glfwTerminate();    return 0;
}

代码很简单,看注释即可,无需多解释。如果一切正常,屏幕上会出现一个窗口,里面有一个五颜六色的三角形。

常见错误及解决办法

使用一个库无非包含三个步骤:

  • 包含头文件
  • 链接库文件
  • 提供运行时dll文件

只要这三个步骤正确了,基本不会出问题。

错误一

1    error C1083: Cannot open include file: ‘GLFW/glfw3.h‘: No such file or directory
2    IntelliSense: cannot open source file "GLFW/glfw3.h"
3    IntelliSense: identifier "GLFWwindow" is undefined
4    IntelliSense: identifier "window" is undefined
5    IntelliSense: identifier "glfwInit" is undefined
6    IntelliSense: identifier "glfwCreateWindow" is undefined
7    IntelliSense: identifier "NULL" is undefined
8    IntelliSense: identifier "glfwTerminate" is undefined
9    IntelliSense: identifier "glfwMakeContextCurrent" is undefined
10    IntelliSense: identifier "glfwWindowShouldClose" is undefined
11    IntelliSense: identifier "glfwSwapBuffers" is undefined
12    IntelliSense: identifier "glfwPollEvents" is undefined
13    IntelliSense: identifier "glfwTerminate" is undefine

这显然是头文件没有找到,导致下面所有glfw相关的类型都找不到定义。需要正确设置头文件的路径,注意只要包含到include目录一级即可,比如\glfw-3.0.4.bin.WIN32\include

错误二

Error    1    error LNK2019: unresolved external symbol _glfwInit referenced in function _main
Error    2    error LNK2019: unresolved external symbol _glfwTerminate referenced in function _main
Error    3    error LNK2019: unresolved external symbol _glfwCreateWindow referenced in function _main
Error    4    error LNK2019: unresolved external symbol _glfwWindowShouldClose referenced in function _main
Error    5    error LNK2019: unresolved external symbol _glfwPollEvents referenced in function _main
Error    6    error LNK2019: unresolved external symbol _glfwMakeContextCurrent referenced in function _main
Error    7    error LNK2019: unresolved external symbol _glfwSwapBuffers referenced in function _main
Error    8    error LNK1120: 7 unresolved externals
这个错误发生在链接阶段,说明是库文件(.lib)文件找不到,需要在项目的属性页面中设置lib文件,在Visual Studio中右键单击Project,选择Properties - Configuration Propterties - Linker - Input - Additional Dependencies,单击右侧的下三角进入编辑页面,将glfw3dll.lib加入其中即可。

注意:gflw提供了不同版本的库文件,如果你使用的是Visual Studio 2012,请使用lib-msvc110下面的库文件,如果是Visual Studio 2013,那么则需要使用lib-msvc120下面的库文件。lib文件有两个,一个是glfw3.lib,一个是glfw3dll.lib,前者是静态链接用的(链接此文件后,运行时无需dll文件,但是程序体积会变大),后者是动态链接用的(配合dll使用),不要搞混

时间: 2024-08-29 00:23:36

opengl 程序到底是如何写的?的相关文章

讨论:写程序到底需不需要懂数学?

数学系所学的数学,跟一般人所会用到的数学不太一样.研究所顺利考上的向往已久的资工所,成为名符其实的本科系学生,本以为可以不用再玩数学了,但我发现我错了,是不用再玩那些抽久的高等数学没错,但线性代数.机率统计.离散数学等...用了更多的数学,我想不出来有哪门资工研究所的课没用到数学的.写程序需要数学吗?  写程序到底需不需要懂数学? piggy | 08 Jun, 2007 17:26 数学对于程序设计师来说到底重不重要?!类似这样标题的讨论,在网络上已经不知道被讨论多少次了.前两天又在老同事小白

程序员的简历到底该怎么写?(转)

小明最近有换工作的打算,那身为程序员的我们,简历到底应该怎么写呢? 我们知道,HR在筛选简历时主要从公司需求出发,重点不一,不过还是有很多“通用”的套路,为了在30秒内判断出这份简历是否值得跟进,我认为程序员写简历的正确姿势是这样的: 主要风格 即首次看到简历后的第一感觉.就好比小明多年相亲未遂,鼓起勇气参加“非诚勿扰”的节目,首次登场,台下的妹子看见他的第一眼,一定会有一个整体的Feel,他是fashion的.小清新的还是老道的?有了第一印象感觉之后,台下的妹子才会确定是灭灯还是亮灯(小明的话

第一个OpenGL程序

刚开始学习OpenGL,感觉这个挺有趣的(在绘制三维模型时,空间想象能力要求比较高,不然很头疼的). 新东西,新心情...来一发红色三角形. 我就是要通过OpenGL来绘制一个红色的三角形.现在我们来看一下代码: #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存 glLoadIdentity(); // 重置当前的模型观察矩阵 glTran

从前有一个程序员,成天写代码,后来,他屎了。。。

从前有一个程序员,成天写代码,后来,他屎了 1.一门可以靠手艺混饭的专业 你好,非常荣幸能够步入改变世界的软件开发行业,接下来我们聊点正经的.回首近7-8年来的时光,发现自己可能将要走向程序员这条道路的时候最早可以追溯到2008年高考完填写志愿,那时候分数所迫,二本学校的好专业都上不了,我就想有什么专业是可以不靠学校名声而靠自己努力成就一番霸业的?思来想去选择了–计算机,作为第二志愿...显然那时候会计这个专业更火一些. 入学一年以后我有了自己第一台笔记本电脑,然而第一个装上的应用程序居然就是魔

【OpenGL】详解第一个OpenGL程序

写在前面 OpenGL能做的事情太多了!很多程序也看起来很复杂.很多人感觉OpenGL晦涩难懂,原因大多是被OpenGL里面各种语句搞得头大,一会gen一下,一会bind一下,一会又active一下.搞到最后都不知道自己在干嘛,更有可能因为某一步的顺序错误导致最后渲染出错,又或者觉得记下这些操作的顺序是非常烦人的一件事.那么,OpenGL为什么会长成这个样子呢?这篇文章旨在通过一个最简单的OpenGL程序开始,让我们能够"看懂"它,"记住"这些操作顺序. 我们先来解

国外程序员陋习,写在农历狗年前

为了呼应下面以前写的文章,今天来写写国外程序员的陋习(当然不是所有人都是这样,但是也应该是我碰到比较多的) “国产程序员陋习,写在农历猴年前” http://www.cnblogs.com/michael703/p/5183902.html 从毕业以来工作10几年中和各种老外(美国,瑞士,丹麦,澳大利亚,阿根廷,希腊,德国,日本)都合作过,有开心,有痛苦,有学习,有吵架~~ 当然老外们有很多值得学习的地方,也有很多很专业,很厉害的,但是也有很多是比较水的.下面来写写老外们的一些不太好的陋习~~

https://www.jqhtml.com/30047.html strace + 命令: 这条命令十分强大,可以定位你程序到底是哪个地方出了问题

https://www.jqhtml.com/30047.html 我的Linux手册 服务器 浏览数:72 2019-1-30 原文链接 基础安装 # CentOS sudo yum install epel-release 命令行Tips 进程及端口 # 查看端口占用情况 netstat -ap | grep 端口号   # 查看某一个端口 netstat -ntlp top -p 进程ID:查看进程的实时情况,包括内存大小,内存占用率.CPU占用率,运行时间 cat /proc/进程ID/

1.一个简单的OpenGL程序

一.OpenGL介绍 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的. 如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单. 2.强大的可移植性. 微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机). 而OpenGL不仅用于 Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机.各种专

OpenGL学习-------visual studio 2010配置和第一个OpenGL程序讲解

OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的.如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单. 2.强大的可移植性. 微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机).而OpenGL不仅用于 Windows,还可