OpenGL 入门教程实例
2017-12-04 14:31
302 查看
网上找了很多OpenGL的书籍,教程的代码,都编译不过,主要原因是目前OpenGL对VS2015以上版本的支持性不是很好,所以目前最好还是用VS2013做开发比较好,
下面是OpenGL环境的配置及代码:
1.下载相关的OpenGL包
2.新建工程,在工程目录新建include和lib目录
3.将相关包里面的头文件拷贝到include目录下
4.将lib文件拷贝到lib文件夹下
5.将dll文件拷贝到Debug目录(我采用的是Debug模式,如果是Release模式就拷贝到Release文件夹下)
6.设置项目属性:包含目录,库目录,依赖库(就是lib目录下所有的lib文件名)
7.新建文件,贴上以下代码:
代码下载地址:http://download.csdn.net/download/a1317338022/10144275
注意运行代码需要在VS2013上运行,不能是VS2015等
下面是OpenGL环境的配置及代码:
1.下载相关的OpenGL包
2.新建工程,在工程目录新建include和lib目录
3.将相关包里面的头文件拷贝到include目录下
4.将lib文件拷贝到lib文件夹下
5.将dll文件拷贝到Debug目录(我采用的是Debug模式,如果是Release模式就拷贝到Release文件夹下)
6.设置项目属性:包含目录,库目录,依赖库(就是lib目录下所有的lib文件名)
7.新建文件,贴上以下代码:
#include <stdio.h> #include <iostream> #include "gl/glew.h" #include <string> #include <SDL2\SDL.h> using namespace std; /* SDL ------------> 操作系统 | OPenGL ----> GPU | 窗口 1.首先SDL发送所有赋予数据到操作系统中 2.由于绘制窗口的时候需要用到OpenGL的API,所以OpenGL会把 所有的命令发送到GPU中 3.由于GPU不能直接与窗口进行交互,所以需要用SDL_GLContext 通过SDL_GLContext,操作系统就可以通过GPU进行窗口的绘制了 */ class Display { public: Display(int width, int height, const string & title);// { ~Display(); void Update();//每一帧的绘制 bool IsClosed(); void Clear(float r, float g, float b, float a);//擦除图像并绘制 private: SDL_Window* m_window; SDL_GLContext m_glContext;//可以通过GPU绘制窗口 bool m_isClosed; }; Display::Display(int width, int height, const string & title) { SDL_Init(SDL_INIT_EVERYTHING); SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);; m_window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL); m_glContext = SDL_GL_CreateContext(m_window); auto status = glewInit(); if (status != GLEW_OK) { std::cerr << "init failed" << std::endl; } m_isClosed = false; } void Display::Update(){ SDL_GL_SwapWindow(m_window);//交换缓冲区 SDL_Event e; while (SDL_PollEvent(&e)){ if (e.type == SDL_QUIT) { m_isClosed = true; } } } Display::~Display() { SDL_GL_DeleteContext(m_glContext); SDL_DestroyWindow(m_window); SDL_Quit(); } bool Display::IsClosed(){ return m_isClosed; } void Display::Clear(float r, float g, float b, float a){ glClearColor(r, g, b, a); glClear(GL_COLOR_BUFFER_BIT); } int main(int argc,char** argv) { Display display(800, 600,"NameWindow"); while (!display.IsClosed()) { display.Clear(0.4f, 1.0f, 1.0f, 1.0f); display.Update(); } getchar(); return 0; }
代码下载地址:http://download.csdn.net/download/a1317338022/10144275
注意运行代码需要在VS2013上运行,不能是VS2015等
相关文章推荐
- jQuery中文入门指南,翻译加实例,jQuery的起点教程
- SOAP与AXIS2入门教程(附带实例)
- 实例iPhone编程入门教程-第十天
- jQuery中文入门指南,翻译加实例,jQuery的起点教程
- jQuery中文入门指南,翻译加实例,jQuery的起点教程
- React 入门实例教程
- React 入门实例教程
- React 入门实例教程(原作者: 阮一峰)
- React 入门实例教程(原作者: 阮一峰)
- React 入门实例教程
- Expression Blend实例中文教程(7) - 动画基础快速入门Animation
- 微软 ASP.NET 快速入门实例教程
- windows phone:Expression Blend实例中文教程(9) - 行为快速入门Behaviors
- Maven入门(含实例教程)
- React 入门实例教程
- React 入门实例教程
- AngularJS入门教程之路由机制ngRoute实例分析
- wxPython中文教程 简单入门加实例
- MongoDB入门教程之C#驱动操作实例
- ASP.NET与Flex的交互实例入门教程