Mikeee 的blog

学习OpenGL ES之纹理投影效果

本文将为大家介绍如何把一张纹理贴图投影到复杂的几何体上。下面是例子运行的结果。

学习OpenGL ES之纹理投影效果

下面是未开启纹理投影的效果图。
学习OpenGL ES之纹理投影效果

这张是用来投影的纹理图。
学习OpenGL ES之纹理投影效果

涉及到的重要知识点

• 基本几何体的渲染
• 法线贴图
• 纹理坐标
• 投影矩阵

学习OpenGL ES之渲染到纹理

本文将介绍渲染到纹理技术。之前的例子都是将3D物体渲染到屏幕上,在iOS中GLKView为我们做好了渲染到屏幕的所有准备工作,我们只需要调用Open GL ES的绘制方法就可以轻松的渲染到屏幕。那么我们接下来了解一下GLKView为我们做了哪些准备工作。

FrameBuffer

FrameBuffer是OpenGL ES中重要基础组件之一,经常被缩写成FBO(FrameBufferObject),它用来承载GPU计算出来的数据,包括颜色(Color),深度(Depth),遮罩(Stencil)。FrameBuffer包括3个缓冲区,颜色缓冲区,深度缓冲区,遮罩缓冲区,每个缓冲区就是一块内存,存储着对应的像素数据。比如颜色缓冲区,一般像素格式都是RGBA,一共4个字节,如果是一个大小1024乘以1024的FrameBuffer,那么颜色缓冲区所占的内存就是1024x1024x4个字节。深度和遮罩缓冲区也有自己的格式。GLKView默认为我们创建了一个FrameBuffer,并且绑定了刚才说的3个缓冲区到这个FrameBuffer上。我们所有绘制的操作,最终都被写入到这个FrameBuffer的缓冲区中。这个FrameBuffer里的颜色缓冲区的数据最终会被呈现在GLKView上。

学习OpenGL ES之基本纹理

纹理通常来说就是一张图片,我们为每一个顶点指定纹理坐标,然后就可以在Shader中获取相应的纹理像素点颜色了。

纹理坐标

首先解释一下什么是纹理坐标。把一张图的左上角定为 0,0 点,长宽都定义为 1,剩余四个点的坐标就会如下图所示。这样就构成了纹理坐标系统。

学习OpenGL ES之基本纹理

一般使用 uv 来表示纹理坐标,uv 是一个二维向量 (u,v),u 和 v 的取值从 0 到 1 。我在代码中为每个顶点数据增加了2个
GLFloat 来表示 uv 的值。下面是 X 轴上平面的的代码。

- (void)drawXPlanes {
    static GLfloat triangleData[] = {
// X轴0.5处的平面
      0.5,  -0.5,    0.5f, 1,  0,  0, 0, 0,
      0.5,  -0.5f,  -0.5f, 1,  0,  0, 0, 1,

如何一步一步提高图像分类准确率?

作者:曹荣禹

一、问题描述

当我们在处理图像识别或者图像分类或者其他机器学习任务的时候,我们总是迷茫于做出哪些改进能够提升模型的性能(识别率、分类准确率)。。。或者说我们在漫长而苦恼的调参过程中到底调的是哪些参数。。。所以,我花了一部分时间在公开数据集CIFAR-10 [1] 上进行探索,来总结出一套方法能够快速高效并且有目的性地进行网络训练和参数调整。

CIFAR-10数据集有60000张图片,每张图片均为分辨率为32*32的彩色图片(分为RGB3个信道)。CIFAR-10的分类任务是将每张图片分成青蛙、卡车、飞机等10个类别中的一个类别。本文主要使用基于卷积神经网络的方法(CNN)来设计模型,完成分类任务。

首先,为了能够在训练网络的同时能够检测网络的性能,我对数据集进行了训练集/验证集/测试集的划分。训练集主要用户进行模型训练,验证集主要进行参数调整,测试集主要进行模型性能的评估。因此,我将60000个样本的数据集分成了,45000个样本作为训练集,5000个样本作为验证集,10000个样本作为测试集。接下来,我们一步步来分析,如果进行模型设计和改进。

学习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);

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