使用openframeworks无需配置学习新版本opengl 之三 使用自带矩阵

本文主要是介绍使用openframeworks无需配置学习新版本opengl 之三 使用自带矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近还是想尽量快速完成这个系列,一是为了巩固和学习图形学知识,因为以前学习的理解有很多不到位也比较散碎

学习以http://bullteacher.com教程为主,辅以第八版opengl编程指南

希望在of上完整实现一遍可编程管线流程,接上一次博客http://blog.csdn.net/shenmifangke/article/details/51344689

使用of0.84 codeblocks版

注意openframeworks 没有鼠标滚轮事件

如果不改动的话,自己增加不了,如果很在意这个功能,可以用0.9以上的版本

github源码(注释比较乱,主要是因为和以前的理解出入比价大)

https://github.com/shenmifangke/openGL_openframeworks_learn3

主要是对这篇的实现http://bullteacher.com/9-coordinate-systems.html


文中采用的GLM库,但是我觉得还是配置麻烦,

因为学个图像编程还要装这么多外部库,很容易就掉其他坑里的,所以这也是我用of开这个系列的原因

这里使用of自带的ofMatrix4x4来替换glm库里的mat4

具体代码可以参考上面github地址,这次放上了编译的exe

下面是最终效果图


下面是基本用法,projection即可理解为最终的变换矩阵

ofMatrix4x4 model = ofMatrix4x4();
ofMatrix4x4 view = ofMatrix4x4();
ofMatrix4x4 projection = ofMatrix4x4();
model.rotate(-55.0f,1.0f, 0.0f, 0.0f);
view.translate(0.0f, 0.0f, -3.0f);
projection.makePerspectiveMatrix(45.0f,(float)ofGetWidth()/(float)ofGetHeight(), 0.1f, 100.0f);

矩阵传递到shader可以使用ofMatrix4x4的getPtr方式

GLint viewLoc = glGetUniformLocation(shader_programme, "view");
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, view.getPtr());
下面是两个着色器代码

frag

#version 330 core 
in vec3 ourColor;
in vec2 TexCoord;//新增的纹理
out vec4 color; 
uniform sampler2D ourTexture1;//新增的纹理采样器
uniform sampler2D ourTexture2;//第二个纹理
void main() 
{ 
//图片混合
color = mix(texture(ourTexture1, TexCoord), texture(ourTexture2, TexCoord), 0.6);
}

vertex

#version 330 core 
layout (location = 0) in vec3 position; // 位置变量的属性position为 0 
layout (location = 2) in vec2 texCoord;//新增的纹理out vec2 TexCoord;//新增的纹理uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;void main() 
{ gl_Position = projection * view * model * vec4(position, 1.0f);TexCoord = texCoord;//新增的纹理
}


主要代码还是参看github上的,因为写得比较凌乱,(因为最近工作比较凌乱……)

希望喜欢这个系列或者对图像学特效独立游戏等等感兴趣的联系或者和我讨论





这篇关于使用openframeworks无需配置学习新版本opengl 之三 使用自带矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/439700

相关文章

C#中checked关键字的使用小结

《C#中checked关键字的使用小结》本文主要介绍了C#中checked关键字的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录✅ 为什么需要checked? 问题:整数溢出是“静默China编程”的(默认)checked的三种用

C#中预处理器指令的使用小结

《C#中预处理器指令的使用小结》本文主要介绍了C#中预处理器指令的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 第 1 名:#if/#else/#elif/#endif✅用途:条件编译(绝对最常用!) 典型场景: 示例

jdk1.8的Jenkins安装配置实践

《jdk1.8的Jenkins安装配置实践》Jenkins是一款流行的开源持续集成工具,支持自动构建、测试和部署,通过Jenkins,开发团队可以实现代码提交后自动进行构建、测试,并将构建结果分发到测... 目录Jenkins介绍Jenkins环境搭建Jenkins安装配置Jenkins插件安装Git安装配

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

Nginx之https证书配置实现

《Nginx之https证书配置实现》本文主要介绍了Nginx之https证书配置的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录背景介绍为什么不能部署在 IIS 或 NAT 设备上?具体实现证书获取nginx配置扩展结果验证

Mysql中RelayLog中继日志的使用

《Mysql中RelayLog中继日志的使用》MySQLRelayLog中继日志是主从复制架构中的核心组件,负责将从主库获取的Binlog事件暂存并应用到从库,本文就来详细的介绍一下RelayLog中... 目录一、什么是 Relay Log(中继日志)二、Relay Log 的工作流程三、Relay Lo

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.