自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(168)
  • 收藏
  • 关注

原创 关于 骨骼动画之理解蒙皮算法

把三维骨骼顶点联系至骨骼的位置的过程,称为蒙皮。蒙皮用的网格是通过顶点联系上骨骼,每个顶点可以绑定一个或者多个骨骼(一般最多允许4根骨骼)。若某顶点只绑定至一根骨骼,它就会完全跟随该骨骼移动。若绑定至多个骨骼,该顶点的位置就等于把它逐一绑定绑定个别骨骼,在通过权重加权平均。能把网格顶点从原来位置(绑定姿势)变换至骨骼的当前姿势的矩阵称为蒙皮矩阵。蒙皮矩阵不是基变更变换(change o

2016-12-25 16:08:39 11863 2

原创 读《More Effective C++35个改善编程与设计的有效方法》之条款3:绝对不要以多态方式处理数组

有以下程序:class Base{public: Base(int n = 0) : _b(n) {} int _b;};class Devide : public Base{public: Devide(int n = 0, int m = 0) : Base(n), _d(m) {} int _d; int _d1;};void print(std::ostr

2016-05-15 10:44:04 779

原创 读《深度探索C++对象模型》之对象成员的效率

测试平台:华硕N53S(五年前的老机子)编译环境:VS2010接下来我将会有多个测试,在多个不同环境下的所消耗的时间比较:五个测试分别为:个别的局部变量、局部数组、struct之的Public、class 之中的inline Get函数、 class之中的inline Get & Set函数:代码片段如下:struct Point{ Point(float mx, floa

2016-05-08 14:50:09 749

原创 读《深度探索C++对象模型》之分层继承对于内存布局的影响

请看以下代码:class Concrete{public:private: int val; char c1; char c2; char c3;};我在我的电脑上运行,求得的类Concrete的大小为8byte,我想还是符合我们的预期(val:4byte, c1 : 1byte, c2 : 1byte, c3: 1byte),在加上字节对齐的一个字节,刚好是8byte。那

2016-05-08 14:03:05 837

原创 读《深度探索C++对象模型》之成员初始化列表作用

很多时候,我们在定义构造函数时,有人会选择将成员初始化放在函数里,有人会放在成员初始化列表中,这两种有什么区别呢,先运行以下代码:class test{ friend test foo(double);public: test() { memset(array, 0, 100 * sizeof(double)); } inline test(const test &t) {

2016-05-07 15:22:47 763

原创 读《深度探索C++对象模型》之拷贝构造函数是否有必要明确定义?

我想,对于大部分程序员来说,一般的类都会定义构造函数/虚构函数/拷贝构造函数/赋值函数等,但是真的有必要吗,难道让编译器默认替我们定义一个不好吗,请看以下例子:class Point{public: Point(float x, float y, float z) { _x = x; _y = y; _z = z; }private: float _x, _y, _z

2016-05-07 15:06:05 835

原创 读《深度探索C++对象模型》有感

我想有看过不少C++的书籍,都会有以下的表述:在Class中,如果我们没有声明构造函数,编译器都会给我们默认构造一个构造函数,也就是Default Construct,但是真的是如此吗,请看以下的example:lass AA{public: int x; AA *next;};int main(){ AA a; std::cout << a.x << std::end

2016-05-07 10:27:18 844

原创 Effective C++ 改善程序与设计的55个具体做法之条款37

本条款:绝不重新定义继承而来的缺省参数值直接上以下代码:#include class Shape{public: enum ShapeColor {Red, Green, Blue}; virtual void draw(ShapeColor color = Red) const = 0;};class Rectangle : public Shape{public:

2016-05-05 20:05:59 457

原创 Effective C++ 改善程序与设计的55个具体做法之条款33

本条款:避免遮掩继承而来的名称。我们在C++中经常会用到继承,会用到多态,会重载函数等,以下主要讲解遇到的一个会很容易犯错的点:先给测试代码:#include class Base{private: int x;public: virtual void mf1() = 0; virtual void mf1(int) {} virtual void mf2(){}

2016-05-05 19:26:45 391

原创 OpenGL矩阵的那些事-1

我想做过三维的人都知道OpenGL,它也算是最基础的三维底层库之一(另外一个是DX),好吧,这一篇文章并不是讲解如何使用OpenGL,我接下来将会讲讲我认识的OpenGL矩阵部分的知识。在OpenGpu里面有一个测试题,问的是OpenGL用的是行Or列矩阵?用的是行OR列存储,这一篇链接如下:这部分的介绍我还是引用那位大神的介绍:http://www.opengpu.org/forum.p

2015-10-25 21:02:15 381

原创 OGRE动画系统--骨骼动画

在骨骼动画中,模型具有互相连接的“骨骼”组成的骨架结构,通过改变骨骼的朝向和位置来为模型生成动画。在骨骼动画,有一个过程叫做蒙皮,它的过程就是如何将模型的顶点与骨骼联系起来,比如说肩膀这个骨头有受到手臂这个骨骼影响也有受到肩膀这个骨骼想影响,它们都有一个影响值,那么在OGRE中,我们需要做一个限定,我们这边是限定每个顶点最多受到四个骨骼的影响,如果我们发现每个顶点超过四个骨骼,那么我们需要截取

2015-10-25 11:36:24 881

原创 OGRE动画系统--OGRE中的mesh文件和skeleton文件解析

Ogre中的Mesh文件主要包含:共享的顶点信息、subMesh部分、skeleton链接文件、骨骼和顶点索引和权重信息、LOD信息、包围盒信息、subMesh名字列表、边缘信息、Pose动画信息、Extreams信息和Pose动画关键帧信息。Ogre中的skeleton文件包含:骨骼混合模式、骨骼绑定信息、骨骼层次信息、骨骼动画信息以及骨骼链接信息(可以链接到新skeleton文件)Og

2015-09-29 22:00:18 1636

原创 Ogre动画系统连载-Ogre中的数据格式

OGRE动画系统突然想到以前对于Ogre都是太肤浅的认识,经过这段时间的学习以及深入研究,对于Ogre的动画系统总算是有所眉目,不过还只是冰山一角而已。再次验证了,还是要在一个公司好好待个几年才会有好的积累,希望能在本公司至少待满3年吧。接下来的这段时间,我会不断的写一些我所理解的Ogre动画系统,也许我写的不够好,或者有错误,希望大家积极指出,谢谢。 Ogre动画系统连载-Ogr

2015-09-20 11:08:51 733

原创 urho3D编译文档工程出现的BUG

在编译Urho3D的doc项目时sh: dot: command not found,后面经过网上查询发现需要下载Graphvis这个软件才能找到dot命令。

2015-09-15 11:09:24 1217

原创 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2015-09-15 11:05:24 381

转载 OpenGL Performance Optimization

转载于:http://www.opengpu.org/forum.php?mod=viewthread&tid=392可能这篇文章有点老,但是对于

2014-04-24 13:05:38 823

转载 【翻译】【西川善司】GPU和Shader技术的基础知识 (一共有99回,翻译中)

from: http://www.opengpu.org/forum.php?mod=viewthread&tid=7376&extra=page%3D1本连载的主要目的,是介绍最新的PC和GAME所使用的最新3D图形技术的发展趋势。暂时的方针是,首先是考虑介绍比较新的PC Game和PS3,XBOX360等新时代游戏机的游戏所采用的技术。那么首先,想回顾一下近年来的3D图形技

2014-02-13 13:42:44 1873

转载 西川善司的3D图形技术概念和渲染管线的处理

from: http://psv.tgbus.com/news/ynzx/201305/20130528094843.shtml 3D图形技术概念和渲染管线的处理一:3D图形的概念图1是3D图形的流程模型。这个虽然是对应DirectX 10/SM4的GPU流程模型,不过部分流程会根据GPU的不同,有时会有更细致的处理,有时也会做一些简略,这点敬请谅解。  首

2014-02-13 13:33:29 5301

原创 2014技术目标

引擎层次:从代码级别上熟练掌握wildMagic引擎的架构、代码的组织以及引擎各方面效果的实现。(1,3,5,7)从项目级别上熟悉ogre的使用方法;(工作时间,2, 6)从项目级别上熟悉coco2d的使用方法;( 2, 3, 6)渲染效果:(半个月一个效果)shadow mapping算法(csm, vsm, pcf等阴影算法总结);hdr;dof(Depth_o

2014-01-08 22:43:05 659

转载 [译]CSAA (覆盖取样抗锯齿)

转载于:http://getix.blog.163.com/blog/static/116992306200962510481030/原文于:https://developer.nvidia.com/csaa-coverage-sampling-antialiasing声明:本文原文由Peter Young撰写,由GeTiX翻译。本文仅供学习交流之用。如需转载,请注明作者及出处

2013-12-22 22:43:01 2785

转载 各种抗锯齿模式略解:SSAA MSAA CSAA CFAA

转载于:http://itbbs.pconline.com.cn/8692740.htmlFSAA--Full Screen Anti-Aliasing的缩写,望文生义就是指全屏抗锯齿画面增强技术,用以缩小3D建模边缘锯齿形状,使得较低的分辨率拥有接近较高分辨率的画面表现。关于3D建模和AA的原理不赘述,枯燥的文章网上大把,这里重点说明一下各种流行的AA实现方法。1,SSAA-

2013-12-22 22:41:40 2944

原创 ARB assembly语言

最近涉及到ARB assembly语言,说白了就是OpenGL的低级着色语言,语言组织看起来有点像汇编语言,下面就摘抄点网络上对这个语言的介绍:ARB assembly language is a low-level shading language, which can be characterized as an assembly language. It was created

2013-12-20 22:11:39 1338

转载 C++ 虚函数表解析

转载于:http://blog.csdn.net/haoel/article/details/1948051C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel  前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的

2013-12-02 19:14:43 553

转载 C++的数组不支持多态”?

转载于:http://coolshell.cn/articles/9543.html先是在微博上看到了个微博和云风的评论,然后我回了“楼主对C的内存管理不了解”。后来引发了很多人的讨论,大量的人又借机来黑C++,比如://@Baidu-ThursdayWang:这不就c++弱爆了的地方吗,需要记忆太多东西//@编程浪子张发财:这个跟C关系真不大。不过

2013-12-02 19:11:58 808

转载 【全文完】【Deep C (and C++)】深入理解C/C++(4)

转自:http://blog.csdn.net/rockics/article/details/7037843译自Deep C (and C++) by Olve Maudal and Jon Jagger,本身半桶水不到,如果哪位网友发现有错,留言指出吧:) 总结一下第三讲,我们可以知道,相对于第一位候选者,第二位候选者在以下几个方面有更深的认识:1、  C与

2013-11-07 10:19:56 880

转载 【Deep C (and C++)】深入理解C/C++(3)

转自:http://blog.csdn.net/rockics/article/details/7036312译自Deep C (and C++) by Olve Maudal and Jon Jagger,本身半桶水不到,如果哪位网友发现有错,留言指出吧:) 第二位候选者表现不错,那么,相比大多数程序员,他还有什么潜力没有被挖掘呢?可以从以下几个角度去考察:

2013-11-07 10:19:04 755

转载 【Deep C (and C++)】深入理解C/C++(2)

转自:http://blog.csdn.net/rockics/article/details/7018490译自Deep C (and C++) by Olve Maudal and Jon Jagger,本身半桶水不到,如果哪位网友发现有错,留言指出吧:)         好,接着深入理解C/C++之旅。我在翻译第一篇的时候,自己是学到不不少东西,因此打算将这整个p

2013-11-07 10:17:51 820

转载 【Deep C (and C++)】深入理解C/C++(1)

转自:http://blog.csdn.net/rockics/article/details/7015067原文:http://share.csdn.net/uploads/5279dacd27ffb/5279dacd27ffb.pdf译自Deep C (and C++) by Olve Maudal and Jon Jagger,本身半桶水不到,如果哪位网友发现有错,留言指出吧

2013-11-07 10:16:40 787

翻译 射线方法--点测试 2

要测试点需要计算点p在相机参考坐标系下的坐标值,pc已经详细说过了。我们同样假设点的pc.z在nearDist和farDist之间,因此需要测试其他坐标,叫做pc.y和pc.x。假设一个2D的视景体如下图所示,水平箭头展示了pc.z的值,距相机的距离,pc.z视景体有一个高度h。其中的a是视景体在垂直方向上的角度。对于实现方式,pc在y方向上要在视景体之内需要:-h/2 或

2013-09-05 15:33:11 681

翻译 射线方法--测试点

前面提出的方法是基于由六个平面限制的视景体。在这些方法中就是使用扩展的平面方程来设置参数,其中的测试都是跟平面做测试。在这一节中将提出不一样的方法,这个方法是基于名字来源于Game Programming Gems 5 的技术。假设相机是基于三个单元向量组成:在下图中显示的X,Y和Z。注意下面参考的不是一个右手坐标系(在OpenGL中),因为在本课程中使用这样的Z方向看起来更直观。给一个要

2013-09-02 11:46:43 768

翻译 裁剪空间法--实现细节

下面从类FrustumG的函数,就像下面描述的平面,假设给予的参数矩阵A=M*P:#define m(row,col)  m[col*4+row-5]void FrustumG::setFrustum(float *m) {    pl[NEARP].setCoefficients(                 m(3,1) + m(4,1),           

2013-08-30 19:12:15 929

翻译 裁剪空间法-引出平面

在这里另外一种扩展视景体空间的方法就是基于裁剪空间属性。假设一个点p=(x,y,z,1)位于3D空间中。同样假设一个模型变换矩阵M和投影矩阵P。点p经过矩阵M和矩阵P变换之后的在裁剪空间中的点pc=(xc,yc,zc,wc):pc是本地坐标,当规范化后的点pcn:在规范化的裁剪空间中视景体是中心在原点的轴对齐的长方体,是通过下面的平面包围的:1. 左平面:x’= -1;

2013-08-29 11:51:27 1094

翻译 几何分析--源代码

视景体文件保护了源代码和一个vc6.0的工程。这个工程包含了运行这个测试所有的全部类,其中允许测试点、球体和轴对齐的包围盒。尝试并比较在每一帧有和没有视景体裁剪的区别。注意,fps计时器是每秒更新一次,所以请认真盯着计时器看。像往常一样,为本课程也提供了一个源代码,它可以有很多方式的优化,它同样没有保证没有任何错误,或者在任何地方都能运行。顺便说一句,如果你找到bug,或者可以提高的地

2013-08-28 16:38:40 871

翻译 几何方法---测试盒子 二

盒子测试还可以优化,在一定程度上,仅仅只有测试它的顶点,叫做“正顶点”和“负顶点”(叫做最大顶点和最小顶点)。盒子在(视景体)之外在足够的情况下测试一个单独的顶点,其中的第二个顶点,仅仅在需要区分盒子完全在视景体之内还是部分在视景体之内的情况下做测试。因此什么是这些点呢?找到这些点有多高的难度?假设一个平面和它的法线,一个正顶点是从盒子沿着法线方向延伸,负顶点刚好是相反。

2013-08-25 13:47:05 812

翻译 几何方法---测试盒子

测试一个盒子是比球体和点更棘手的问题。一个简单的方式就是测试盒子的八个点。一个简单的方法认为就是如果所有的点都是在视景体之外那么可以认为在视景体之外。然而下面的图展示了这个并不总是这个情况。黄色盒子的点都在视景体之外,但是盒子有部分在视景体之内,因此它不应该被抛弃。一个安全的方式来解决这个问题来抛弃这个盒子,也仅仅,所有的点在同一个平面的错误边。在上面的黄色盒子中并没有这样的平

2013-08-24 15:56:06 776

翻译 几何方法---测试点和球

几何方法---测试点和球一旦平面定义好了。那么我们就可以测试点是在视景体之内还是之外。计算符号的距离可以告诉我们点是在平面的哪一边。假设平面的法向是向内的,如果点的符号距离是负的,那么说明点在视景体之外。否则点就在平面的右侧。下面的类frustumG方法说明了实现的方式,参数就是测试的点:int FrustumG::pointInFrustum(Vec3 &p) {    in

2013-08-23 13:31:59 720

翻译 几何方法--实现

几何方法--实现一个用来实现视景体的功能的类已经在下面呈现出来了。注意下面的代码并没有任何方面的优化,它仅仅只是用来伴随本课程出现的。这个类包含六个平面的数组,加上其他变量比如说视景体的八个顶点和相机的定义参数。平面只是用来裁剪操作,但是保存变量对我们的调试有用并且可视化的目的。类的头文件如下:class FrustumG {private:    enum {  

2013-08-22 16:12:06 822

翻译 视景体裁剪课程---视景体形状

在这个章节中我们将在OpenGL应用程序中引进视景体的形状。它是使用函数gluPerspective来定义透视投影,然后使用gluLookAt函数来定义相机的位置。首先,让我们回味一下这些函数的参数(都是float类型):1. gluPerspective(fovy, ratio, nearDist, farDist)2. gluLookAt(px, py, pz, lx, ly, l

2013-08-20 22:13:47 1551

原创 使用几何着色器来实现绘制模型轮廓线

我们经常要实现绘制模型轮廓线的效果,这一节就介绍使用几何着色器来实现这个效果。这一节的介绍是参考Philip Rideout 博客,下一节我会介绍这个博客复杂一点的效果实现步骤。几何着色器最重要的一个特性就是我们可以获得当前图元的相邻顶点信息,以下为例:其中的实线代表当前三角形本身的顶点,其中的虚线代表相邻的顶点信息。因此我们根据相邻点信息来判断当前线段是否处于轮廓线。

2013-08-17 16:52:33 2017

翻译 GLSL核心课程---纹理图像

大多数时候我们会将一幅纹理图像应用到模型上,或多或少就像壁纸一样。有时候纹理还可以看成是数据,不是颜色值。纹理坐标提供了在图像和模型之间的映射关系。在我们着色器中处理使用纹理之前我们需要在我们的OpenGL应用程序中做一些设置步骤。在这一节中,我们将覆盖一下经典纹理用法案例。OpenGL在我们着色器中使用纹理的第一步就是需要创建一个OpenGL纹理对象。一个通用的用法就是我们同样需要从文件

2013-08-14 21:45:33 2629

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除