草庐IT

Vulkan的VkImage和OpenGL的Texture2D互转的3种方法

Vulkan的纹理和OpenGL的纹理之间共享的解决方案,因为项目的功能需要同时引入OpenGL和Vulkan,又因为效率的影响必须想办法优化,两者之间需要互相访问互相转换的高效方案。Vulkan的纹理图像类型是:VkImage,OpenGL的纹理类型是:Texture2D此文原创,收集和编写不易,望能珍惜。1.NVIDIAGPUOnly的方案在OpenGL4.5规范(简介)第1章的补充中新增了一个扩展GL_NV_draw_vulkan_image有提供如下函数glDrawVkImageNVglGetVkProcAddrNVglSignalVkFenceNVglSignalVkSemaphor

OpenGL实现GPU体渲染

之前完成了利用OpenGL实现GPU体渲染的实验,现在把完成的工作做一个总结。本实验demo的完成主要参考了《OpenGL–Buildhighperformancegraphics》这本书的体渲染部分和其中的代码,也参考了体绘制光线投射算法这篇博客。关于体渲染的ray-casting光线投射算法原理这里不再介绍,本文主要讲述实现过程。p{text-indent:2em}以下是具体实现过程:一、三维体数据手动生成并传入三维纹理1.1三维体数据生成体数据可视化如图所示,产生体数据的代码如下:点击查看代码intDim[3]={200,200,200};//体数据维度大小int*Data=(int*)

OpenGL实现GPU体渲染

之前完成了利用OpenGL实现GPU体渲染的实验,现在把完成的工作做一个总结。本实验demo的完成主要参考了《OpenGL–Buildhighperformancegraphics》这本书的体渲染部分和其中的代码,也参考了体绘制光线投射算法这篇博客。关于体渲染的ray-casting光线投射算法原理这里不再介绍,本文主要讲述实现过程。p{text-indent:2em}以下是具体实现过程:一、三维体数据手动生成并传入三维纹理1.1三维体数据生成体数据可视化如图所示,产生体数据的代码如下:点击查看代码intDim[3]={200,200,200};//体数据维度大小int*Data=(int*)

Opengl ES之矩阵变换(上)

前言说到矩阵变换,我们第一时间想到的就是大学时代的线性代数这些复杂的东西,突然有了一种令人从入门到放弃的念头,不慌,作为了一个应用层的CV工程师,在实际应用中线性代数哪些复杂的计算根本不用我们自己去算,绝大部分情境下直接使用Matrix这个类或者glm这个库即可。关于矩阵与向量的相关知识,矩阵的加减乘除等规则,这里就不展开细说,感兴趣的同学自行查阅线性代数即可,不过这些规则忘记了也没关系,反正有API可用。我们知道在Opengl中有很多中坐标系,在Opengl中矩阵的一大作用就是将坐标从一个坐标系转换到另一个坐标系下,同时还可以通过矩阵实现一些形变的效果,今天我们就使用矩阵的方式搭配Openg

Opengl ES之矩阵变换(上)

前言说到矩阵变换,我们第一时间想到的就是大学时代的线性代数这些复杂的东西,突然有了一种令人从入门到放弃的念头,不慌,作为了一个应用层的CV工程师,在实际应用中线性代数哪些复杂的计算根本不用我们自己去算,绝大部分情境下直接使用Matrix这个类或者glm这个库即可。关于矩阵与向量的相关知识,矩阵的加减乘除等规则,这里就不展开细说,感兴趣的同学自行查阅线性代数即可,不过这些规则忘记了也没关系,反正有API可用。我们知道在Opengl中有很多中坐标系,在Opengl中矩阵的一大作用就是将坐标从一个坐标系转换到另一个坐标系下,同时还可以通过矩阵实现一些形变的效果,今天我们就使用矩阵的方式搭配Openg

webgl 系列 —— 绘制猫

其他章节请看:webgl系列绘制猫上文我们了解了如何绘制渐变彩色三角形,明白了图形装配、光栅化,以及片元着色器计算片元的颜色。现在如果让你绘制如下一只猫。难道绘制很多三角形,然后指定它们的颜色?那样简直太难、太繁琐了。这时可以使用三维图形学中的纹理映射技术来解决这个问题。纹理映射简单来讲就是将一张图映射(贴)到一个几何图形的表面。例如这样:本篇最后将实现如下效果:渐变矩形根据渐变三角形,我们很容易就可以绘制一个渐变矩形。就像这样:完整代码如下:constVSHADER_SOURCE=`attributevec4a_Position;attributevec2a_uv;varyingvec2v_

webgl 系列 —— 绘制猫

其他章节请看:webgl系列绘制猫上文我们了解了如何绘制渐变彩色三角形,明白了图形装配、光栅化,以及片元着色器计算片元的颜色。现在如果让你绘制如下一只猫。难道绘制很多三角形,然后指定它们的颜色?那样简直太难、太繁琐了。这时可以使用三维图形学中的纹理映射技术来解决这个问题。纹理映射简单来讲就是将一张图映射(贴)到一个几何图形的表面。例如这样:本篇最后将实现如下效果:渐变矩形根据渐变三角形,我们很容易就可以绘制一个渐变矩形。就像这样:完整代码如下:constVSHADER_SOURCE=`attributevec4a_Position;attributevec2a_uv;varyingvec2v_

OpenGL-ES 学习(7)---- 纹理

纹理简介现实生活中,纹理(Texture)类似于游戏中皮肤的概念,最通常的作用是装饰3D物体,它像贴纸一样贴在物体的表面,丰富物体的表面和细节在OpenGL-ES开发中,纹理除了用于装饰物体表面,还可以用来作为存储数据的容器所以在OpenGL-ES中,纹理实际上是一个可以被采样的复杂数据集合,是GPU的图像数据结构,纹理分为2D纹理、立方图纹理和3D纹理2D纹理是OpenGL-ES中最常见和最常用的纹理形式,是一个表示图像数据的二维数组,纹理中一个单独的数据单元被称为纹素或者纹理像素立方图纹理是一个由6个单独的2D纹理面组成的纹理,立方图纹理像素的读取是使用三维坐标(s,t,r)作为纹理坐标3

OpenGL-ES 学习(7)---- 纹理

纹理简介现实生活中,纹理(Texture)类似于游戏中皮肤的概念,最通常的作用是装饰3D物体,它像贴纸一样贴在物体的表面,丰富物体的表面和细节在OpenGL-ES开发中,纹理除了用于装饰物体表面,还可以用来作为存储数据的容器所以在OpenGL-ES中,纹理实际上是一个可以被采样的复杂数据集合,是GPU的图像数据结构,纹理分为2D纹理、立方图纹理和3D纹理2D纹理是OpenGL-ES中最常见和最常用的纹理形式,是一个表示图像数据的二维数组,纹理中一个单独的数据单元被称为纹素或者纹理像素立方图纹理是一个由6个单独的2D纹理面组成的纹理,立方图纹理像素的读取是使用三维坐标(s,t,r)作为纹理坐标3

IOS技术分享| 在iOS WebRTC 中添加美颜滤镜

在使用WebRTC的时候,对视频进行美颜处理一般有两种方式:替换WebRTC中的采集模块和对视频数据进行美颜。一、替换WebRTC中的采集模块替换WebRTC中的采集模块,相对比较简单,使用GPUImageVideoCamera替换WebRTC中的视频采集,得到经过GPUImage添加美颜处理后的图像,发送给WebRTC的OnFrame方法。参考基于WebRTC框架开发的全平台推拉流SDK:Github设置美颜-(void)setBeautyFace:(BOOL)beautyFace{if(_beautyFace==beautyFace)return;_beautyFace=beautyFac