2013年4月5日

纹理旋转

摘要: ue3有个纹理动画的教程,在一个四边形上画个不停转动的风车。可以通过改变纹理坐标来实现这功能。由于四边形的纹理坐标[0,0]在左上角,直接对其进行旋转肯定达不到想要的效果。因此问题的关键是寻找任意中心点的旋转矩阵,这里需要选取[0.5,0.5]作为中心点。先将[0.5,0.5]移动到[0,0],得出平移矩阵m11 0 -0.50 1 -0.50 0 1然后执行旋转,得出旋转矩阵m2cos(a) -sin(a) 0sin(a) cos(a) 01 0 1将[0,0]移回[0.5,0.5],得出平移矩阵m31 0 0.50 1 0.50 0 1将结果连接就行了m3*m2*m1*v注意GL中采用的是 阅读全文

posted @ 2013-04-05 16:32 SoMiSoDo 阅读(400) 评论(0) 推荐(0)

2013年3月26日

Eggine(1)整体描述

摘要: 大体上分4层,底层为上层提供服务基础工具 通过封装boost,stl或造轮子,向上提供内存池,字符串操作,文件操作,日志等基础功能。OpenGL抽象 gl的皮包骨封装,主要是避免重复状态切换,异常检查,日志输出。资源管理 管理例如vbo,fbo,shader,纹理之类可被共享的资源,使用c++11的shared_ptr。 可以肯定,没有自动化的垃圾回收机制,全手动delete会使开发会进入死胡同。场景层 按空间关系组织资源,由于项目对场景管理需求简单,所以没引入什么场景管理算法。渲染器 拿到场景提交的Entity(渲染实体),执行渲染。 这块比较复杂,在保证渲染结果大体准确的前提下还要对效率斤 阅读全文

posted @ 2013-03-26 10:06 SoMiSoDo 阅读(178) 评论(0) 推荐(0)

2013年1月31日

渲染器中的场景节点运动

摘要: 一般渲染器都有场景节点的概念,用于挂载可渲染可运动的实体。运动是相对的,这里主要写3种运动空间:TS_LOCAL:本地空间TS_PARENT:相对空间TS_WORLD:世界空间,所有变换的起始空间,这不同于物理任何运动都是相对的以下是场景节点的头文件:#ifndef EGG_SCENENODE_H#define EGG_SCENENODE_H#include <vector>#include <glm/glm.hpp>#include <glm/ext.hpp>using namespace std;using namespace glm;enum Tran 阅读全文

posted @ 2013-01-31 18:03 SoMiSoDo 阅读(393) 评论(0) 推荐(0)

2013年1月15日

UBO笔记

摘要: UBO的引入对渲染引擎的影响比较大。const char *VertexShaderSource= "void main()" "{" " gl_Position=ftransform();" "}";const char* FragmentShaderSource= "layout(std140) uniform material" "{" " vec4 ambient;" " vec4 diffuse;" " float 阅读全文

posted @ 2013-01-15 14:21 SoMiSoDo 阅读(1057) 评论(0) 推荐(0)

2012年12月18日

Opengl实现法线贴图

摘要: 法线贴图是一项很古老的技术了,但凭借其高性价比的优势将会长期存在各渲染器中。未完待续。。。 阅读全文

posted @ 2012-12-18 14:24 SoMiSoDo 阅读(1535) 评论(0) 推荐(0)

2012年12月10日

opengl投影变换与逆变换

摘要: 一个新手都在问的:opengl中如何将2d窗口坐标转换为3d空间坐标。以下是测试代码,需用到glm库。#include <string>#include <cstdlib>#include <iostream>#include <glm/glm.hpp>#include <glm/ext.hpp>using namespace std;using namespace glm;void print(const vec4& v) { cout << v[0] << " " << 阅读全文

posted @ 2012-12-10 10:59 SoMiSoDo 阅读(3966) 评论(0) 推荐(0)

2012年12月8日

命令调度机制

摘要: 一处改变,几处做出反应,非传统回调函数,监听器模式 阅读全文

posted @ 2012-12-08 23:58 SoMiSoDo 阅读(323) 评论(0) 推荐(0)

2012年12月7日

opengl中VAO,VBO,IBO用法小结

摘要: 这三个玩意全面取代旧社会的glBegin/glEnd,显示列表,顶点数组。VBO为顶点缓冲区对象,用于存储顶点坐标/顶点uv/顶点法线/顶点颜色,也可以用于其他用途,比如tangent。IBO为索引缓冲区,里面的值可以是unsigned int或者unsigned short。最后用VAO将多个VBO,IBO绑定到一起。一个常规的网格模型就是VAO.attach(PositionVBO,TexcoordVBO,NormalVBO,IBO)以下为VBO的创建,分配100字节的空间,未初始化:GLuint vbo;glGenBuffers(1, &vbo);glBindBuffer(GL_ 阅读全文

posted @ 2012-12-07 14:44 SoMiSoDo 阅读(12039) 评论(3) 推荐(2)

导航

点击右上角即可分享
微信分享提示