opengl第一课
来源:互联网 发布:拜耳杀蟑胶饵 知乎 编辑:程序博客网 时间:2024/06/05 17:13
参考书是这本opengl编程指南第8版
源码链接,用的百度盘,opengl第八版的官方源代码也包含在triangles.rar里面了。
https://pan.baidu.com/s/1gfLpUPt
然后是官方源码链接:
http://www.opengl-redbook.com/
不过书好像已经出到第九版了,所以源码官方链接里的源码也是第九版了。
先来试着编译并运行书上第一个示例吧,triangles.cpp.
/////////////////////////////////////////////////////////////////////////// triangles.cpp/////////////////////////////////////////////////////////////////////////#include <iostream>using namespace std;#include "vgl.h"#include "LoadShaders.h" //加载着色器enum VAO_IDs { Triangles, NumVAOs }; //顶点数组对象相关数据, VAO(Vertex-Array Object)enum Buffer_IDs { ArrayBuffer, NumBuffers }; //顶点缓存相关数据enum Attrib_IDs { vPosition = 0 , vColor = 1}; //GLuint VAOs[NumVAOs]; //顶点数组GLuint Buffers[NumBuffers]; //顶点缓存const GLuint NumVertices = 6; //顶点数//---------------------------------------------------------------------//// init//void init(void){ glGenVertexArrays(NumVAOs, VAOs); //生成顶点缓存数组名称 glBindVertexArray(VAOs[Triangles]); //绑定顶点数组 struct VertexData { GLubyte color[4]; GLfloat position[4]; }; VertexData vertices[NumVertices] = { {{255, 0, 0, 255}, {-0.90, -0.90}}, {{0, 255, 0, 255}, {0.85, -0.90}}, {{0, 0, 255, 255}, {-0.90, 0.85}}, {{10, 10, 10, 255}, {0.90, -0.85}}, {{100, 100, 100, 255}, {0.90, 0.90}}, {{255, 255, 255, 255}, {-0.85, 0.90}} }; glGenBuffers(NumBuffers, Buffers); //生成顶点缓存对象名称 glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]); //绑定顶点缓存 glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), //将数据载入缓存对象 vertices, GL_STATIC_DRAW); //用于加载着色器 ShaderInfo shaders[] = { { GL_VERTEX_SHADER, "triangles.vert" }, //顶点着色器 { GL_FRAGMENT_SHADER, "triangles.frag" }, //片元着色器 { GL_NONE, NULL } }; GLuint program = LoadShaders(shaders); //加载着色器 glUseProgram(program); //关联数据 glVertexAttribPointer(vColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(VertexData), BUFFER_OFFSET(0)); glVertexAttribPointer(vPosition, 2, GL_FLOAT, GL_FALSE, sizeof(VertexData), BUFFER_OFFSET(sizeof(vertices[0].color))); glEnableVertexAttribArray(vColor); glEnableVertexAttribArray(vPosition); //启用顶点属性数组 glClearColor(0, 0, 1, 1); //设置清除屏幕颜色}//---------------------------------------------------------------------//// display//void display(void){ glClear(GL_COLOR_BUFFER_BIT); //清除帧缓存 glBindVertexArray(VAOs[Triangles]); glDrawArrays(GL_TRIANGLES, 0, NumVertices); //顶点数据向OpenGL管线传输 glFlush(); //强制所有进行中的opengl命令立即完成并传输到opengl服务端处理}//---------------------------------------------------------------------//// main//int main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(512, 512); glutInitContextVersion(4, 3); glutInitContextProfile(GLUT_CORE_PROFILE); glutCreateWindow(argv[0]); glewExperimental = GL_TRUE;//这句话必须要加上 if (glewInit()) { cerr << "Unable to initialize GLEW ... exiting" << endl; exit(EXIT_FAILURE); } init(); glutDisplayFunc(display); glutMainLoop();}
//接下来是顶点着色器和片元着色器,都是新建的txt文件改名字而成的
//顶点着色器
triangles.vert
#version 430 corelayout(location = 0) in vec4 vPosition;layout(location = 1) in vec4 vColor;out vec4 color;void main(){ color = vColor; gl_Position = vPosition;}
//片元着色器
triangles.frag
#version 430 corein vec4 color;out vec4 fColor;void main(){ fColor = color;}
接下来是项目配置,我用的vs2015:
1添加include目录:
2添加lib目录:
3在“General”选项卡中,将“Platform Toolset”设置为VS2013:
当然你电脑必须安装vs2013才行。
4在项目管理器中右击Source Files的Filter,添加现有项,然后找到红宝书源码目录中的lib目录,添加LoadShaders.cpp文件
5打开项目属性,在“Linker/Input”选项卡中,在“Ignore Specific Default Libraries”中添加libcmtd.lib
最后就可以按f5了,然后运行情况如图:
0 0
- OpenGL学习:第一课
- OpenGL 第一课
- opengl第一课
- NeHe OpenGL第一课:OpenGL窗口
- NeHe OpenGL第一课:OpenGL窗口
- 第一课,编写第一个OpenGL程序
- 第一课,编写第一个OpenGL程序
- 第一课,编写第一个OpenGL程序
- Android OpenGL教程-第一课
- Android OpenGL教程-第一课
- Android OpenGL教程-第一课
- Android OpenGL教程-第一课
- Android OpenGL 教程 第一课
- OpenGL教程之ZEUS教程第一课:什么是OpenGL
- OpenGL学习第一课---------VS2010中配置开发OpenGL 环境
- Nehe OpenGL教程第一课-创建一个OpenGL窗口(Win32)
- OpenGL学习——第一课:建立OpenGL环境
- OpenGL学习——第二课:第一个OpenGL程序
- 基于OpenCV的膨胀和腐蚀
- ASP.NET MVC 微信JS-SDK认证
- MySQL索引原理及慢查询优化
- java中复制文本文件
- emWin 2天速成实例教程002_多个页面窗口切换
- opengl第一课
- ORA-01207 old control file完全解决方案
- java中替换文件内容
- python中系统信息模块--psutil
- java中复制图片
- 数列收敛与数列极限
- 查找所有未检模块
- USACO合集
- Unity 动画知识之一