- 博客(28)
- 收藏
- 关注
原创 一次心血来潮的C程序编译 && makefile
前言想复习下数据结构,所以看了看相关的课程后打算手写一些东西,比如链表或者说其他的常用数据结构。环境MacOSXVSCode本来打算在xcode上直接写纯C的程序的,但是写了几行就发现。。真鸡儿麻烦啊,而且我xcode用的也不好,各种快捷键也不熟就被劝退了。然后看到公司同事(server)很多都在用VSCode,可能是因为大家都在用mac笔记本的原因装visualstudio基本上就...
2018-10-09 17:55:31
449
1
原创 无意间看到Pure-Mvc记录下
Pure-MVC前言在学习creator的一些框架的时候看到一些使用了MVC的内容,就在此做个思考和总结。PureMVC-TypeScript版本代码量很少非常容易看懂。什么是MVC开局一张图,内容全靠想 很明显的分层设计 Model View Controller但是这三个部分都是单例 都是单例 都是单例 重要的事说三遍要想扩展各式各样的 MVC 要用 对应的中间...
2018-09-14 18:52:34
241
原创 关于ECS设计以及MVC分层设计和组件化设计的思考和总结(这个标题就问你长不长)
前言 最近工作忙了很多关于设计的事情,用了常用的分层设计MVC也尝试是用了ECS这种设计方式,同时也参考了Unity或者Creator的这种组件化方式。有了很多困惑也有了一些总结。首先,MVC也好ECS也好他们都是一种编程的范式,或者说你组织代码的方式。然而他们的层面不同,也就是说不是一个层面的东西。MVC:用来解决UI交互方面的成熟的经验体系,是一种分层的设计。ECS:是一...
2018-09-13 17:58:56
1749
原创 Opengl-法线贴图(用来细化表面的表现表现的凹凸)
我们通过这张图可以看出来,使用了法线贴图的物体表面更有细节更逼真,其实这就是发现贴图的作用,没什么钻牛角尖的。其实表面没有凹凸的情况是因为我们把表面一直按照平整来做的,要想突出这个表面的凹凸就要用到法线贴图到这里,我们暂停想一下,前面说的几种贴图,漫反射贴图,镜面光贴图,然后再到这个法线贴图。明白了什么?其实很简单,就是我们法线虚拟的和现实的差距就会通过这种贴图的形式来着重表现某一...
2018-08-17 16:17:20
1273
原创 Opengl-阴影(分为定向光的和点光源的)
前言我们模拟了光照,发现真的很厉害,加上天空盒子,再加上反射感觉很逼真,但是看着看着你会发现。。不对,没影子。是的,光和影分不开的,有光的地方就会有影子,这才是真实的道理。怎么模拟影子呢?这就要用到前面学到的,帧缓冲-写入纹理。 阴影产生的原因如图,就是因为同一条射线上里的光近的物体挡住了离的远的物体。 我们如何判断一个物体是否在阴影中呢?就是按照图上的,Z Distanc...
2018-08-17 15:59:00
2182
原创 Opengl-实例化(不知道为啥叫实例化,感觉应该叫一次批量渲染)
核心:glDrawArraysInstanced 和以往的不同就是这句Draw的时候改成这个API补充:glVertexAttribDivisor 这个函数告诉了OpenGL该什么时候更新顶点属性的内容至新一组数据。它的第一个参数是需要的顶点属性,第二个参数是属性除数(Attribute Divisor)。默认情况下,属性除数是0,告诉OpenGL我们需要在顶点着色器的每次迭代时更...
2018-08-17 15:23:40
1562
1
原创 Opengl-几何着色器(劫持顶点的家伙)
前言我们知道在片段着色器和顶点着色之间,有一个几何着色器,我们之前说过它但是一直没有讲,这里了解一哈。几何着色器的输入是一个图元(如点或三角形)的一组顶点。几何着色器可以在顶点发送到下一着色器阶段之前对它们随意变换。然而,几何着色器最有趣的地方在于,它能够将(这一组)顶点变换为完全不同的图元,并且还能生成比原来更多的顶点。#version 330 corelayout (po...
2018-08-17 15:13:45
714
原创 Opengl-立方体贴图(天空盒子)
立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。你可能会奇怪,这样一个立方体有什么用途呢?为什么要把6张纹理合并到一张纹理中,而不是直接使用6个单独的纹理呢?立方体贴图有一个非常有用的特性,它可以通过一个方向向量来进行索引/采样。假设我们有一个1x1x1的单位立方体,方向向量的原点位于它的中心。使用一个橘黄色的方向向量来从立方体贴图上采样一...
2018-08-17 14:59:03
3038
原创 Opengl-帧缓冲(一个新的缓冲对象,想一下深度和模板缓冲)
OpenGL中的缓冲只是一个管理特定内存块的对象,没有其它更多的功能了。首先我们明确一个原理或者道理,不论是什么缓冲,深度也好,模板也罢。再往前说的顶点数据的颜色缓冲。都是一个存储的单元,都是一个存储对象,管理一块特定的内存。没有什么特殊的功能。千万别想太多,记住了哈。帧缓冲FBO 也就是帧缓冲 FrameBufferObject ,可以用来做很多事,核心上来说,它干了什么...
2018-08-17 14:50:06
795
原创 Opengl-面剔除(一种优化方式)
前言我们已经可以正常的渲染一个物体也好加载一个模型也好,比如立方体,可以正常的渲染,然后我们还可以挪动摄像机来观察每一个面,但是,有一个问题想一想。我们挪动相机进入了立方体里面就会发现里面也渲染了。这。。问题出来了。可能很多东西我们都不希望或者根本没想着把里面也渲染的那么好。。我们看不到还浪费这个资源去计算渲染干嘛? 面剔除OpenGL能够检查所有面向(Front Fac...
2018-08-17 14:25:56
580
原创 Opengl-混合(原来不理解的src dst blender总算理解了)
混合混合干什么:混合(Blending)通常是实现物体透明度(Transparency)的一种技术。也就是说为了实现透明的感觉,因为生活中玻璃等等的材质都是透明的,那么怎么模拟就用混合混合规则: GL_ZERO 因子等于0 GL_ONE 因子等于1 GL_SRC_COLOR 因子等于源颜色向量C¯source GL_ONE_MINUS_SRC_COLOR 因子...
2018-08-16 18:47:26
2693
原创 Opengl-深度测试&&模板测试
深度测试深度缓冲:用来存储深度信息的,可以这么理解,在你屏幕上最后留下的裁剪区域你看到的东西其实是有深度的,就像现实世界里一样,有远近这样。然后这个远近的程度信息就存储在了深度缓冲里深度测试:当深度测试(Depth Testing)被启用的时候,OpenGL会将一个片段的的深度值与深度缓冲的内容进行对比。OpenGL会执行一个深度测试,如果这个测试通过了的话,深度缓冲将会更新为新的...
2018-08-16 18:39:16
1039
原创 Opengl-模型(告别箱子加载模型)
先放一个效果图关于模型加载 一个非常流行的模型导入库是Assimp,它是Open Asset Import Library(开放的资产导入库)的缩写。Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中。当Assimp加载完模型之后,我们就能够从Assimp的数据结构中提取我们所需的所有数据了。由于...
2018-08-16 17:35:58
1114
原创 Opengl-光照-基本光照-投光物-多光源(现实世界的光可不只有太阳也并不只有一个)
前言相信大家看过各种发光的道具,手电筒?看到过吧?灯泡看到过吧?除了太阳生活中还有各种灯红酒绿的地方(说错了)等着你去看啊各种光源平行光-太阳或者很远处的光都可以叫做平行光 平行光的光的方向是一个固定的值不变的vec3 lightDir = normalize(-light.direction);点光源-灯泡-各种灯 我们前面一直讨论的就是一个点光源...
2018-08-16 17:21:59
426
原创 Opengl-光照-基本光照-光照贴图(现在告别单调的方块弄个箱子)
前言前面我们跟着LearnOpengl学习的都是通过怎么定义一些顶点数据弄出一个立方体在三维世界里模拟光照模拟光源。看着是有点真实的样子了。。可是你见过哪个真实世界里都是这些个立方体的,肯定都是真切的物体啊,什么房子,树,石头,木头等等。要怎么模拟这些呢?怎么把这些放进去呢?很简单啊。基本章节就学习了纹理坐标,我们就已经给立方体贴上了纹理让它成为了一个箱子-结果可以去看我第一章最后的成...
2018-08-16 17:10:10
2162
1
原创 Opengl-光照-基本光照-材质(有了材质一个物体才算是完整了)
在现实世界里,每个物体会对光产生不同的反应。比如说,钢看起来通常会比陶瓷花瓶更闪闪发光,木头箱子也不会像钢制箱子那样对光产生很强的反射。每个物体对镜面高光也有不同的反应。有些物体反射光的时候不会有太多的散射(Scatter),因而产生一个较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的高光点。如果我们想要在OpenGL中模拟多种类型的物体,我们必须为每个物体分别定义一个材质(Ma...
2018-08-16 16:36:01
1652
原创 Opengl-光照-基本光照-冯氏(千万好好理解后面所有的延伸基本都是基于这个的)
前言前面我们基本理解了怎么模拟光,怎么设置光的颜色以及物体的颜色来非常不生动形象的模拟光在计算机中。肯定在想,怎么能真的像生活中那样物体可以反光,然后有凉的地方也有不凉的地方,光也有强弱这种?其实前辈们已经给了一套很好的经验体系–冯氏光照模型 冯氏光照这图是我从LearnOpengl那里拿的,为什么用这张图解释呢?就是因为找了很多都感觉这张图真的很贴切。 从左到右依...
2018-08-16 11:46:38
3019
原创 Opengl-光照-颜色(其实要想做出好看的东西这章最重要了)
前言前面的基础章节说了下Opengl入门的一些基础知识,通过这些基础知识你可以制作Camera或者让物体移动啊又或者放一张图片上去当做纹理贴图丰富物体的显示 但是其实不论怎么折腾你会发现略微呆板,没有鲜活的感觉。为什么呢?就是因为我们其实想让显示的东西像真实世界一样,然而却忽略了世界上最重要的东西-光!是的没有错,生活中你睁开眼闭上眼都可以感受到光的存在,看到任何东西都会因为光的...
2018-08-16 11:01:24
960
原创 Opengl-基本概念-转换矩阵&&坐标系(最难理解的两章)
前言可能这是Opengl学习的时候最难理解的地方,很多人也因为这个地方放弃了。但是我觉得,我们可以不明白有些矩阵是如何推到出来的,但是我们要明白一些简单的矩阵为什么可以做到从一个坐标系到另一个坐标系的转换。 向量向量就是一个有方向的线段,这貌似是我们中学就知道的概念,你可以把向量想像成一个藏宝图上的指示:“向左走10步,向北走3步,然后向右走5步”;“左”就是方向,“10...
2018-08-15 19:08:55
236
原创 Opengl-基本概念-纹理(单纯的颜色太单调弄张图显示不是更好)
为啥用纹理我们前面知道了顶点的属性里不光可以加位置信息,还可以加颜色啊等等什么其他的任何你想丰富的信息,那么我们可不可以把一张图上的某一点的信息放到这里呢?答案是肯定的,必须的能啊。这样我们也就不用再单调的弄各种颜色了,毕竟图片大把线程啊老哥。 纹理坐标讲一个很重要的概念千万记住了 看到这个图了吧?纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D...
2018-08-15 18:16:19
697
原创 Opengl-基本概念-着色器(都是固定的)
固定的结构顶点着色器#version 330 corelayout (location = 0) in vec3 aPos; // 位置变量的属性位置值为0out vec4 vertexColor; // 为片段着色器指定一个颜色输出void main(){ gl_Position = vec4(aPos, 1.0); // 注意我们如何把一个vec3作为v...
2018-08-15 17:59:49
1073
2
原创 Opengl-基本概念-对象(很关键啊兄弟这章)
Opengl对象这里再次强调下,Opengl就是一个状态集合,它负责管理它下属的所有状态,然后这些个状态是怎么表现的,你想象一下啊老哥 玩过游戏吧?举个列子,你用冰冻法术打人别人别冰了这是不是状态?可能不是很恰当,但是你要明白,opengl就是一个状态集合,不同的状态表现不同的特性。然后这些都是需要一个一个的状态的,这些也就是我们的Opengl对象提供的了。当然了说的稍微难理解一点就是...
2018-08-15 17:43:45
1368
原创 Opengl-基本概念-可编程的渲染管线(僵硬啊)
我弄出了我的第一个三角形关于窗口如何生成,前面一章讲了环境的搭建,我是如何简单的搭了基本的环境的下面就讲下我的入门Chapter-1 基本概念讲一下: 太多的关于Opengl的概念就不多说了,说多了容易让人蒙圈,我这一切从简,就看着这个图图里的三个蓝色区域看到了吧?这三个流程就是我们学习Opengl的目的,要是没这三咱们还是歇一歇少掉几根头发吧。 顶点...
2018-08-15 17:23:19
1088
原创 开始我的Opengl学习之路(rua)
搭TM的环境前言: 关于之前的博客可能N久都未更新了,也是心血来潮写了一篇关于状态机的东西,后来也就因为各种原因(其实就是自己懒)而搁置了,今天要捡起来继续弄下博客记录下最近Opengl的学习经历正式开始今天先说下 基础的东西,关于Opengl大家都要学习的一个基本步骤。建议还是从搭环境开始说起来,毕竟干什么事准备工作往往是最关键也是最麻烦的一步,也不需要问太多就先搭(答应...
2018-08-15 17:05:21
476
2
原创 关于 quick-cocos 状态机
不知道第一篇博客到底要搞什么,刚好最近有朋友在研究状态机,想起自己在quick-cocos的时候研究过这里再做个详细的研究或者介绍。其实,讲道理状态机是什么我没法给你讲的太清楚,顾名思义就是一个管理状态的机器,你这么理解就差不多的。quick引擎是一款很轻量级的2d游戏引擎(不是广告啊兄弟们),它的源码也都很简单易懂,加上cocos引擎的luabinding可以使用lua语言快速开发各种2d游戏
2016-12-12 22:11:12
339
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人