OpenGL3.3+GLFW+GLEW+GLM实现小人行走动画

现在在网上找比较系统的教程基本都是旧版OpenGL,都是基于glut的,然而这个库已经是上个世纪的了……新版的OpenGL3.3及以上的教程,强烈推荐以下这两个:

openGL tutorial http://www.opengl-tutorial.org/cn/

learn openGL https://learnopengl-cn.github.io

两份教程一个侧重理解,一个侧重代码实现,可以穿插着一起看。

另外非常感谢xuhongxu同学。

本文原发于这里,是图形学课的一次实验。

1、环境

  • OpenGL 3.3

  • GLFW,用于创建窗口和处理用户输入

  • GLEW,用于确定OpenGL函数的具体实现

  • GLM,图像相关的数学计算工具库

  • OSX 10.10

2、窗口和库的初始化

GLFW窗口的初始化:

if(!glfwInit())
{
    return -1;
}
GLFWwindow* window;
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//OpenGL版本为3
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//最低兼容版本
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//使用新版本的核心模式
glfwWindowHint(GLFW_RESIZABLE , GL_FALSE);//窗口尺寸不可变
glfwWindowHint(GLFW_SAMPLES, 4);
window = glfwCreateWindow(WIDTH, HEIGHT, "Hello World", NULL, NULL);
if (!window)
{
    glfwTerminate();
    return -1;
}
glfwMakeContextCurrent(window);//设为当前窗口
glfwSetKeyCallback(window, key_callback);

GLEW库的初始化:

glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK)
{
    glfwTerminate();
    return -1;
}

3、着色器

OpenGL3.3及以上版本不再使用立即渲染模式,采用核心模式,着色器使用的语言是GLSL。核心模式的工作流程为如下图所示图形渲染管线,处理过程中一步步将3D的图形渲染成屏幕上显示的2D图像。在实验中,需要定义自己的顶点着色器(vertex shader)和片段着色器(fragment shader)。

顶点着色器定义如下:

#version 330 core

//第一层缓冲,编号为0,从C++输入数据,顶点位置
layout(location = 0) in vec3 vertexPosition_modelspace;

//第二层缓冲,编号为1,从C++输入数据,顶点颜色
layout(location = 1) in vec3 vertexColor;

//输出数据, 给片段着色器
out vec4 fragmentColor;

//全局数据,MVP矩阵
uniform mat4 MVP;

void main(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值