OpenGL学习(一)

我的第一个OpenGL程序

前言

本文开始记录opengl(开放图形库)的学习,从编译opengl的环境配置,到实现第一个程序的运行(利用SDL创建一个可以绘制图形的窗口)。

基于Windows的opengl环境配置

有了解过前人学习opengl的经验,发现不同的版本所需要的依赖库并不相同,但是其实没有关系,因为需要用到相应的API再去下载配置也一样。opengl运行需要至少两个库,一个提供窗口环境,一个提供OpenGL profile加载,据了解红宝书(opengl编程指南)是glut+flew,蓝宝书(OpenGL超级宝典)是glfw+GL3w 。因为本人一开始是跟着一个视频教程去学习的,后面才准备了opengl的红宝书。现在将我的环境配置经验分享出来。

(1)下载相应的SDK,以下是我使用的SDK以及相应的下载地址:
glew:https://www.opengl.org/sdk/libs/
glm:https://www.opengl.org/sdk/libs/
SDL2:https://www.libsdl.org/download-2.0.php
在这里插入图片描述
在这里插入图片描述
(2)配置opengl环境
首先新建一个控制台应用
在这里插入图片描述
进入新建的项目,将源文件以及资源文件删除
在这里插入图片描述
将下载解压好的SDK导入项目文件,如下操作:

1.在项目文件夹下创建include以及lib文件夹
将glew下include下的GL拷贝到项目文件夹下创建的include中:
在这里插入图片描述
在这里插入图片描述
因为本项目是在x86的编译环境中运行的,所以选择glew下lib的Win32中的两个lib文件拷贝到项目中的lib文件夹
在这里插入图片描述
在这里插入图片描述
将glew32.dll拷贝到项目中与.exe的同级目录下,如下图所示:
在这里插入图片描述
在这里插入图片描述
2.将glm按照以上的步骤导入,glm拷贝到项目文件夹下的include中,
在这里插入图片描述
在这里插入图片描述
3.将SDL也导入
将整个include文件夹拷贝到项目文件夹的include中,改名为SDL2
在这里插入图片描述
在这里插入图片描述
将SDL的lib文件以及dll导入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.在VS中添加相应的项目依赖库
右击项目属性,选择C/C++的常规,添加包含目录,如下图
在这里插入图片描述
选择链接器常规,添加库目录
在这里插入图片描述
选中链接器输入,添加依赖项,将项目lib文件夹下的lib文件命复制过来就好
在这里插入图片描述

经过以上的步骤,一个初始的opengl编程环境已经搭建完成了。

第一个opengl程序

(1)在资源文件下创建以下三个文件:
在这里插入图片描述
main.cpp代码:

#include<iostream>
#include<GL/glew.h>
#include"Display.h"

int main(int argc,char ** argv) 
{
	Display display(800, 800,"OpenGLWindows");
	while (!display.IsClosed())
	{
		glClearColor(0.0f,0.15f,0.3f,1.0f);
		glClear(GL_COLOR_BUFFER_BIT);

		display.Update();
	}
	return 0;
}

Display.h代码:

#pragma once
#include <string>
#include <SDL2/SDL.h>

class Display
{
public:
	Display(int width, int height, const std::string&title);
	void Update();
	bool IsClosed();

	Display();
protected:
private:
	SDL_Window* m_window;
	SDL_GLContext m_glContext;
	bool m_isClosed;
};

Display.cpp代码:

#include "Display.h"
#include <GL/glew.h>
#include<iostream>

Display::Display(int width, int height, const std::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);

	GLenum status= glewInit();
	if (status!=GLEW_OK)
	{
		std::cerr << "Glew Init failure" << std::endl;
	}

	m_isClosed = false;
}


Display::Display() 
{
	SDL_GL_DeleteContext(m_glContext);
	SDL_DestroyWindow(m_window);
	SDL_Quit();
}

//用于交换内存缓存区
void Display::Update()
{
	SDL_GL_SwapWindow(m_window);

	SDL_Event e;
	while (SDL_PollEvent(&e))
	{
		if (e.type==SDL_QUIT)
		{
			m_isClosed = true;
		}
	}
}

bool Display::IsClosed() 
{
	return m_isClosed;
}

运行效果:
在这里插入图片描述
因为本人也是初学者,所以要是有不对的地方有劳各位大佬指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值