环境

OS:win7 旗舰版SP1 64位

编译器: VS 2013 express 的cl

软件

glut. 在这个页面https://www.opengl.org/resources/libraries/glut/glut_downloads.php 搜glutdlls37beta.zip,里面有头文件和编译好的lib,dll

glew. 在这个页面http://glew.sourceforge.net/下载 Windows 32-bit and 64-bit版本

配制

%VS_HOME%代表VS的安装目录. %GLUT_HOME%代表glut所在的文件夹. %GLEW_HOME%代表glew所在的文件夹.

把%GLUT_HOME%\include*.h复制到%VS_HOME%\VC\include\GL. GL文件夹不存在就建一个.

把%GLUT_HOME%*.lib复制到%VS_HOME%\VC\lib

把%GLUT_HOME%*.dll复制到C:\Windows\SysWOW64

把%GLEW_HOME%\include\GL*.h复制到%VS_HOME%\VC\include\GL

把%GLEW_HOME%\lib\Release\Win32*.lib复制到%VS_HOME%\VC\lib

把%GLEW_HOME%\bin\Release\Win32*.dll复制到C:\Windows\SysWOW64

注意虽然系统是64位的但是GLEW要复制32位的.

运行例子

源代码在这里下载 http://pan.baidu.com/s/1c2G0XAK

不使用VS建工程的方式运行例子,只用命令cl编译,这样可以把精力集中到学习opengl上,而不是VS上.另外用命令行能更好的理解VS工作的原理.微软的cl命令不认识UTF8,所以把源代码中的hello.c另存为UTF8 BOM格式. 打开Visual Studio 2013-Visual Studio Tools-点击"VS2013 x86 本机工具命令提示"打开命令行工具,切换到hello.c所在的目录(确保hello.c已经保存为UTF8 BOM格式).执行命令:

cl hello.c

如果按照上面的配制应该没有错误,会生成hello.exe文件.如果有错误请留言.

编译完成后运行可以看到效果.

hello.exe



红宝书中有的例子如mvarray.c需要用到函数glMultiDrawElements,glMultiDrawElementsEXT要用到Opengl 1.3,1.4的特性,Windows本身只支持Opengl 1.0. 所以要使用glew. 要对mvarray.c修改成如下内容.

#include <GL/glew.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h> #ifdef GL_VERSION_1_3 void setupPointer(void)
{
static GLint vertices[] = {25, 25,
75, 75,
100, 125,
150, 75,
200, 175,
250, 150,
300, 125,
100, 200,
150, 250,
200, 225,
250, 300,
300, 250}; glEnableClientState (GL_VERTEX_ARRAY);
glVertexPointer (2, GL_INT, 0, vertices);
} void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_SMOOTH);
setupPointer ();
} void display(void)
{
static GLubyte oneIndices[] = {0, 1, 2, 3, 4, 5, 6};
static GLubyte twoIndices[] = {1, 7, 8, 9, 10, 11};
static GLsizei count[] = {7, 6};
static GLvoid * indices[2] = {oneIndices, twoIndices}; glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glMultiDrawElementsEXT (GL_LINE_STRIP, count, GL_UNSIGNED_BYTE,
indices, 2);
glFlush ();
} void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluOrtho2D (0.0, (GLdouble) w, 0.0, (GLdouble) h);
} void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
} int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (350, 350);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
glewInit();
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc (keyboard);
glutMainLoop();
return 0;
}
#else
int main(int argc, char** argv)
{
fprintf (stderr, "This program demonstrates a feature which is not in OpenGL Version 1.0.\n");
fprintf (stderr, "If your implementation of OpenGL Version 1.0 has the right extensions,\n");
fprintf (stderr, "you may be able to modify this program to make it run.\n");
return 0;
}
#endif

其实只做了2点修改.1是在最前面加了#include <GL/glew.h>的引用.2是在glutCreateWindow下面加了glewInit(),初始化glew.另外要记得把mvarray.c的编码格式改成UTF8 BOM.

编译mvarray.c要指定库,所以编译和链接要分成2步(否则会报glMultiDrawElementsEXT找不到的链接错误).

先编译,执行如下命令:

cl /c mvarray.c

/c的意思是只编译生成.obj,不链接,再执行命令

link glew32.lib mvarray.obj

链接glew32.lib mvarray.obj生成可执行文件mvarray.exe. 再执行命令

mvarray.exe

可以看到结果.

OpenGl编程指南第7版(红宝书)环境配制的更多相关文章

  1. 编译opengl编程指南第八版示例代码通过

    最近在编译opengl编程指南第八版的示例代码,如下 #include <iostream> #include "vgl.h" #include "LoadS ...

  2. opengl编程指南 第七版 源代码bug Page35 lines.c 红宝书

    问题1:根据源代码时,我发现的时候去敲门.不正确实施效果.哪里是不正确?没有源代码glPushAttrib(GL_LINE_STIPPLE) glPopAttrib().所以会出现最后的下一次抽奖提供 ...

  3. OpenGL编程指南(第九版) Tiangles 学习笔记

    ////////////////////////////////////////////////////////////////////////////// // // Triangles.cpp / ...

  4. 《OpenGL编程指南第七版》学习——编译时提示“error C2381: “exit” : 重定义;__declspec(noreturn) 不同”错误的解决办法

    解决办法一. #if defined(_WIN32) # ifndef GLUT_BUILDING_LIBextern _CRTIMP void __cdecl exit(int); 上面是glut. ...

  5. [转]OpenGL编程指南(第9版)环境搭建--使用VS2017

    1.使用CMake Configure中选择VS2017 Win64 , Finish: 点击Generate. 2.进入build目录 打开GLFW.sln , 生成解决方案. 打开vermilio ...

  6. [转] VS2015中跑OpenGL红宝书第八版的第一章示例代码,运行

    Ori Article Link OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资 ...

  7. VS2015中跑OpenGL红宝书第八版的示例代码

    OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资料终于跑起来了,记录一下 一.环境 ...

  8. OpenGL编程指南(第七版)

    OpenGL编程指南(第七版) 转自:http://blog.csdn.net/w540982016044/article/details/21287645 在接触OpenGL中,配置显得相当麻烦,特 ...

  9. 【转载】关于在vs2013中配置opengl红宝书第八版环境

     本文为转载 原文地址 http://blog.csdn.net/qq821869798/article/details/45247241 本人刚开始学习opengl,买了一本opengl红宝书第八版 ...

随机推荐

  1. mongodb学习(一)

    重点是踏出第一步: 1. 各种资料集合,mongodb的介绍,安装,破解...内容大同小异... http://www.cnblogs.com/kuochin/p/3599630.html;http: ...

  2. GB和GBDT 算法流程及分析

    1.优化模型的两种策略: 1)基于残差的方法 残差其实就是真实值和预测值之间的差值,在学习的过程中,首先学习一颗回归树,然后将“真实值-预测值”得到残差,再把残差作为一个学习目标,学习下一棵回归树,依 ...

  3. 【Xilinx-VDMA模块学习】-01- VDMA IP的GUI配置介绍

    使用的是Vivado 2015.4,XC7Z020, AXI Video Direct Memory Acess(6.2). 在我的系统中,GUI配置图片如下:(其实和默认配置没有太大区别) 下面介绍 ...

  4. Core Data使用之一(Swift): 获取

    //获取entity中的数据 func fetchFiles() { //第一步,获取总代理 let appDelegate = UIApplication.sharedApplication().d ...

  5. Ubuntu16.04 FTP Server 完整篇

      sudo apt-get update #更新系统 sudo apt-get install vsftpd #安装vsftpd sudo systemctl status vsftpd #判断vs ...

  6. ViewSwitcher的功能与用法

    ViewSwtcher代表了视图切换组件,它本身继承了FrameLayout,因此可以将多个View层叠在一起,每次只显示一个组件.当程序控制从一个View切换到另一个View时,ViewSwitch ...

  7. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (三)

    本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二) 前几天有点事情所以没有继续更新,今天我们接着说.上个帖子中我们看到已经把Excel数据生成了.bin的文件,不过其 ...

  8. 用mfix模拟流化床时压力边界条件和迭代步长需要注意的问题

    没想到今天模拟一个冷态流化床都出现这么多问题.需要通入三种气体组成的混合物,这时入口边界的压力BC_P_g不能为零,否则会报错,但是,需要注意的是,收敛效果对这个压力边界非常敏感,我随意给了个30,结 ...

  9. 添加redo日志组和添加日志组多元化

    查看redo日志组的状态和日志的位置. SQL> 没有被使用,所以切几次日志,组合4已生效. SQL> select * from v$log; GROUP#   THREAD#  SEQ ...

  10. Java中泛型数组的使用

    package com.srie.testjava; import java.util.ArrayList; import java.util.List; public class TestClass ...