Mikeee 的blog

学习OpenGL ES之法线贴图

本文将给大家介绍法线贴图的相关知识,在游戏中由于GPU资源有限,尤其是在移动设备中,所以无法使用大量的三角形来表示3D模型的细节。这时候法线贴图就成为了折中的渲染方案,既能够带来不错的细节表现效果,还可以减少资源的消耗。

未使用法线贴图的Cube

学习OpenGL ES之法线贴图

使用了法线贴图的Cube
学习OpenGL ES之法线贴图

通过上面的图可以看出,法线贴图给Cube表面增加了很多光照上的细节。

什么是法线贴图

学习OpenGL ES之高级光照

基本光照中为大家介绍了环境光和漫反射光构成的基本光照模型。本文将为大家介绍Blinn-Phong光照模型,通过环境光,漫反射光和高光渲染出更加真实的物体。

学习OpenGL ES之高级光照

Blinn-Phong光照模型分为三个部分,环境光,漫反射光,高光(也可以理解为镜面反射光),将这三种光和物体本来的颜色融合,就可以计算出最终的颜色了。下面我们先来介绍这三种光的物理含义。

环境光

10个有趣且有用的配色小技巧

配色这件事怎么聊都聊不完,不是么?选对色彩,是每个设计师的基本功,说来简单,但是千变万化,看似复杂,然则有迹可循。似乎每个设计项目在配色上,都多少会有些争议,团队讨论的时候谁都可以插手说上一嘴,甚至许多产品的配色方案直到上线之前还会存在争议。

配色确实是一件难搞的事情。它牵涉到文化背景,受到方方面面的影响,在情感含义上的理解又因人而异,设计师所面对的问题往往是选择太多,而非太少。

配色的方法很多,辅助工具也不少,但是令人印象深刻的,往往是一些颇为有意思的技巧。今天,我们分享配色大师 Patrick Multani 的色彩搭配技巧。也许这10个技巧,会成为你的配色体系的可靠补充~

技巧1:谨记配色策略

10个有趣且有用的配色小技巧

人工智能之OCR识别技术简析

文字识别是计算机视觉研究领域的分支之一,归属于模式识别和人工智能,是计算机科学的重要组成部分。计算机文字识别,俗称光学字符识别,英文全称是Optical Character Recognition(简称OCR),它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人可以理解的格式。OCR技术是实现文字高速录入的一项关键技术。

OCR技术的兴起便是从印刷体识别开始的,印刷体识别的成功为后来手写体的发展奠定了坚实的基础。印刷体识别的主要流程大致分为以下几个部分:图像预处理、版面处理、图像切分、特征提取和模型训练、识别后处理。

图像预处理

输入文本经过扫描仪进入计算机后,由于纸张的厚薄、光洁度和印刷质量都会造成文字畸变,产生断笔、粘连和污点等干扰,所以在进行文字识别之前,要对带有噪声的文字图像进行处理。由于这种处理工作是在文字识别之前,所以被称为预处理。预处理一般包括灰度化、二值化,倾斜检测与校正,行、字切分,平滑,规范化等等。

版面处理

版面处理分为三个主要部分,版面分析、版面理解、版面重构。

学习OpenGL ES之基本光照

本文主要介绍如何使用Shader实现平行光的效果。什么是平行光呢?我们可以拿激光做比喻,平行光的方向不会随着离光源的距离而改变。所以我们在模拟平行光的时候仅仅需要使用一个光照方向即可。

我们有了光照方向,接下来还需要一个重要数据,平面的朝向。一个平面如果刚好面朝光线,那自然是最亮的。当然还有些材质的平面可以反射光线,反射光线的强度和你观察的角度相关,不过这些本文都不会介绍。后面会有专门一篇介绍复杂的光照模型。

我们用法线向量来表示平面朝向,在具体实现中,每个点都会有一个法线向量。所谓法线向量就是垂直于平面的一个三维向量,如下图所示。

垂直于平面的一个三维向量

图中展示了两种法线向量的表示方法,左边是每个多边形的每个点有一个法线向量,右边是每个点有一个法线向量,共享点的法线向量是这个点在所有平面上的法线向量之和。法线向量应该总是被规范化成单位向量。本文的例子中使用的是左边的方式。

有了法线向量和光照方向之后,只要将它们相乘即可得到光照强度。接下来开始分析代码。

我的OpenGL ES学习之路(一):GLSL着色器语言

着色器语言

GLSL即 OpenGL Shading Language,着色器语言,是和GPU打交道的语言,GLSL的语法比较像C语言。

版本

OpenGL ES的顶点着色器和片段着色器的第一行声明GLSL的版本:

#version 300 es // 使用3.0版本
如果没有声明版本号,则会认为使用1.0版本,着色器的1.0版本用于OpenGL ES 2.0,从OpenGL ES 3.0 开始,规范匹配API和着色器语言的版本号,所以版本才从1.0跳到3.0。

数据类型

基本数据类型

GLSL有三种基本数据类型:float,int,bool,还有由这三种数据类型组成的数组和结构体。

float myFloat = 1.0;
float floatArray[4];
float a[4] = float[](1.0, 2.0, 3.0, 4.0);
float b[4] = float[4](1.0. 2.0, 3.0, 4.0);

小讲堂 | 基于图块渲染

基于图块渲染(Tiled rendering或Tile-based rendering)也称基于瓦片渲染或基于小方块渲染,它是一种在光学空间(Optical_space)中通过规则的网格(Grid (spatial index))细分计算机图形图像并分别渲染网格(grid)或图块(tile)各部分的过程。

这种设计的优点在于,与立即绘制整个帧的立即模式渲染系统相比,它减少了对内存和带宽的消耗。这使图块渲染系统的使用特别常见于低功耗硬件设备。图块渲染有时也被称为中置排序(sort middle)架构,因为它在绘图管线中间而不是接近结束时进行几何排序。[1]

基本概念

创建一个用于显示的3D图像包括一系列步骤。首先,将要显示的对象从各个模型加载到内存中。然后,系统应用数学函数将模型转换为公共坐标系统,即世界视图。从这个世界视图创建一系列多边形(通常为三角形),近似从特定视点(摄像机、视角)看到的近似原始模型。接下来,合成系统通过渲染三角形并将纹理应用于外缘来产生图像。纹理是绘制在三角形上以产生真实感的小图像。之后将所得到的图像与各种特殊效果组合,并移动到一个帧缓冲器,视频硬件最后扫描并输出到显示器。这种基本概念的布局称为显示管道(display pipeline)。

机器学习入门算法:从线性模型到神经网络

本文转载自机器之心
链接:http://jiqizhixin.com/article/2443

近段时间以来,我们频频听到「机器学习(machine learning)」这个词(通常在预测分析(predictive analysis)和人工智能(artificial intelligence)的上下文中)。几十年来,机器学习实际上已经变成了一门独立的领域。由于现代计算能力的进步,我们最近才能够真正大规模地利用机器学习。而实际上机器学习是如何工作的呢?答案很简单:算法(algorithm)。

机器学习是人工智能(artificial intelligence)的一种,其本质上讲,就是计算机可以在无需编程的情况下自己学习概念(concept)。这些计算机程序一旦接触新的数据,就将会改变它们的「思考」(或者输出)。为了实现机器学习,算法是必需的。算法被写入计算机并在其剖析数据时给与其需要遵循的规则。

机器学习算法经常被用于预测分析。在商业中,预测分析可以用于告诉企业未来最有可能发生什么。例如,使用预测分析算法,在线 T 恤零售商可以使用当前的数据来预测下个月他们将会售出多少 T 恤。

回归或分类

OpenGL(一) OpenGL管线 与 可编程管线流程

由于OpenGL是一个纯渲染核心,要写OpenGL程序,得先搭建一个外壳程序。不同平台下外壳程序的实现各有不同,这个系列的文章都在win32的平台上进行。具体实现,网上能找到很多,所以这不是本文的重点。本篇主要构建探讨 OpenGL管线 本身,具体说来,就是构建可编程管线。

主体流程

大体流程是:

1、在main函数中拉起外壳程序,初始化一些默认参数。例如双缓冲,32位颜色等。
2、创建GL上下文(HGLRC)。
3、加载&设置OpenGL的相关参数
4、在帧循环中进行绘制

至于固定管线和可编程管线,主要区别在3、4部分。固定管线是将绘制的方法写死到代码中,而可编程管线可以理解为脚本化了渲染的逻辑。不过这两者渲染的数据部分仍由编译后的程序提供。

具体说来,通过一种语法定义,将一个文本文件实例化到内存中,并且在运行时动态编译,挂载,链接到GPU程序中,完成绘制算法的替换。对应的,由于所有数据都放在内存中,绘制时,需要将它传输到GPU上,这就是缓冲区(glBuffer)。缓冲区在CPU上,会将在某些时间段内缓冲区的数据一起提交给GPU。

实现

科普 | GPU渲染管线概述

来源:博客园

顶点着色器是流水线的第一个阶段,它的输入来自于CPU。顶点着色器的处理单位是顶点,也就是说输入进来的每个顶点都会调用一次顶点着色器。

顶点着色器需要完成的工作主要有:坐标变换和逐顶点光照。当然,除了这两个主要任务外,顶点着色器还可以输出后续阶段所需的数据。

坐标变换,顾名思义,就是对顶点的坐标进行某种变换。例如我们可以通过改变顶点位置来模拟水面,布料等。

一个最基本的顶点着色器必须完成的一个工作是:把顶点坐标从模型空间转换到齐次剪裁空间。类似下面代码:

o.pos=mul(UNITY_MVP,v.position);

2.裁剪

由于我们的场景可能会很大,而摄像机的视野范围很有可能不会覆盖所有的场景物体,一个很自然的想法就是,那些不在摄像机视野范围内的物体不需要被处理,而裁剪就是为了完成这个目的而被提出来的。

一个图元和摄像机的关系有3种:

● 完全在视野内
● 部分在视野内
● 完全在视野外

同步内容
--电子创新网--
粤ICP备12070055号