OpenGl编程指南第7版(红宝书)环境配制
环境
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版(红宝书)环境配制的更多相关文章
- 编译opengl编程指南第八版示例代码通过
最近在编译opengl编程指南第八版的示例代码,如下 #include <iostream> #include "vgl.h" #include "LoadS ...
- opengl编程指南 第七版 源代码bug Page35 lines.c 红宝书
问题1:根据源代码时,我发现的时候去敲门.不正确实施效果.哪里是不正确?没有源代码glPushAttrib(GL_LINE_STIPPLE) glPopAttrib().所以会出现最后的下一次抽奖提供 ...
- OpenGL编程指南(第九版) Tiangles 学习笔记
////////////////////////////////////////////////////////////////////////////// // // Triangles.cpp / ...
- 《OpenGL编程指南第七版》学习——编译时提示“error C2381: “exit” : 重定义;__declspec(noreturn) 不同”错误的解决办法
解决办法一. #if defined(_WIN32) # ifndef GLUT_BUILDING_LIBextern _CRTIMP void __cdecl exit(int); 上面是glut. ...
- [转]OpenGL编程指南(第9版)环境搭建--使用VS2017
1.使用CMake Configure中选择VS2017 Win64 , Finish: 点击Generate. 2.进入build目录 打开GLFW.sln , 生成解决方案. 打开vermilio ...
- [转] VS2015中跑OpenGL红宝书第八版的第一章示例代码,运行
Ori Article Link OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资 ...
- VS2015中跑OpenGL红宝书第八版的示例代码
OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资料终于跑起来了,记录一下 一.环境 ...
- OpenGL编程指南(第七版)
OpenGL编程指南(第七版) 转自:http://blog.csdn.net/w540982016044/article/details/21287645 在接触OpenGL中,配置显得相当麻烦,特 ...
- 【转载】关于在vs2013中配置opengl红宝书第八版环境
本文为转载 原文地址 http://blog.csdn.net/qq821869798/article/details/45247241 本人刚开始学习opengl,买了一本opengl红宝书第八版 ...
随机推荐
- mongodb学习(一)
重点是踏出第一步: 1. 各种资料集合,mongodb的介绍,安装,破解...内容大同小异... http://www.cnblogs.com/kuochin/p/3599630.html;http: ...
- GB和GBDT 算法流程及分析
1.优化模型的两种策略: 1)基于残差的方法 残差其实就是真实值和预测值之间的差值,在学习的过程中,首先学习一颗回归树,然后将“真实值-预测值”得到残差,再把残差作为一个学习目标,学习下一棵回归树,依 ...
- 【Xilinx-VDMA模块学习】-01- VDMA IP的GUI配置介绍
使用的是Vivado 2015.4,XC7Z020, AXI Video Direct Memory Acess(6.2). 在我的系统中,GUI配置图片如下:(其实和默认配置没有太大区别) 下面介绍 ...
- Core Data使用之一(Swift): 获取
//获取entity中的数据 func fetchFiles() { //第一步,获取总代理 let appDelegate = UIApplication.sharedApplication().d ...
- Ubuntu16.04 FTP Server 完整篇
sudo apt-get update #更新系统 sudo apt-get install vsftpd #安装vsftpd sudo systemctl status vsftpd #判断vs ...
- ViewSwitcher的功能与用法
ViewSwtcher代表了视图切换组件,它本身继承了FrameLayout,因此可以将多个View层叠在一起,每次只显示一个组件.当程序控制从一个View切换到另一个View时,ViewSwitch ...
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (三)
本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二) 前几天有点事情所以没有继续更新,今天我们接着说.上个帖子中我们看到已经把Excel数据生成了.bin的文件,不过其 ...
- 用mfix模拟流化床时压力边界条件和迭代步长需要注意的问题
没想到今天模拟一个冷态流化床都出现这么多问题.需要通入三种气体组成的混合物,这时入口边界的压力BC_P_g不能为零,否则会报错,但是,需要注意的是,收敛效果对这个压力边界非常敏感,我随意给了个30,结 ...
- 添加redo日志组和添加日志组多元化
查看redo日志组的状态和日志的位置. SQL> 没有被使用,所以切几次日志,组合4已生效. SQL> select * from v$log; GROUP# THREAD# SEQ ...
- Java中泛型数组的使用
package com.srie.testjava; import java.util.ArrayList; import java.util.List; public class TestClass ...