OpenGL
文章平均质量分 71
knowthyselfcn
桌面端、网站架构,会点opengl,会点Android
展开
-
OSG入门简介
Gitchat开通要先写一篇文章,我还没有想好完整的的教程目录。不过,肯定是三维方面的。后续的,想要开展一些桌面端、网站服务端架构介绍的专题。OpenGL与DX11/12的选择?我认为,最好还是学习一下OpenGL。对于想做游戏的开发者,那毫无疑问,应该去学习DX。 OSG与OGRE选择?我之前的文章没有提过,这里简单提一下。OSG比OGRE要简单多了,OSG仅仅是一个三维渲...原创 2019-11-16 10:15:12 · 1017 阅读 · 0 评论 -
Vulkan编程指南翻译 第六章 着色器和管线 第5节 第6段 图像采样
这一节实在太长了,分篇来翻译。Sampled Images 当着色器从图像读数据时,他们可以可以使用两种方式。第一种是原生加载,从图像的指定位置直接读取格式化的或非格式化的数据,第二种是使用采样器对图像采样。采样包括:在图像坐标空间做基础变形或者纹素过滤来光滑图像返回到着色器。采样器的状态通过一个采样器对象表示,它可像图像或者缓冲区一样被绑定到描述符集合。可调用函数vkCreate翻译 2017-03-11 18:48:50 · 898 阅读 · 0 评论 -
Vulkan编程指南翻译 第七章 图形管线 第2节 Renderpasses(未完成)
a翻译 2017-03-22 00:53:46 · 2345 阅读 · 0 评论 -
计算几何实践3:三角化
2017-12-10 想写一篇三角化的总结,竟然拖了三年时间。这是我拖的最久的一篇总结了。再不写,没准以后不做这方面内容了,就没有机会了。刚开始进入项目组的时候,项目刚进入初始阶段,我们人手不够,紧迫性也不是那么高,所以,我也被允许有一些时间来阅读网格化相关的材料,一份70页的paper,一个小册子Polygon Mesh Processing。那时候还是很痛苦的,完全没有这方面原创 2017-12-22 22:26:58 · 12502 阅读 · 1 评论 -
计算几何实践2:几何物体及交叉判断
2017-12-10 我们可能在程序中见到非常复杂的图形,但是,他们可以最简单的线段拼接而成。所以,线段是我们关注的重点,其次才是三角形。 1 线段交叉判断 线段交叉判断是最为基础的算法。最简单的场景:判断两个独立的线段是否相交。算法相当简单。把两条线段延长为直线,看直线是否相交,如果相交,判断焦点是否在一条线段上。判断直线是否相交可以转换成一个二元方程组是否有解的问题。原创 2017-12-14 23:37:51 · 2223 阅读 · 0 评论 -
计算几何实践2.2:3D窗口的拾取操作
2018-02-25 在三维CAD 软件和3D游戏中,都有目标的拣选操作。通常有两种方式来实现这个功能:一是通过手工计算从屏幕发出的射线与场景内的物体求交,二是使用Vulkan/OpenGL的拾取机制(Selection Mode)。 即使是自己实现三维选择操作,也有多种方式。简单的拾取操作分为两类:点选和框选。点选非常简单,就是求解一条射线和场景内物体的相交。框选则需要按照投影模式分一下:...原创 2018-02-25 21:22:05 · 727 阅读 · 0 评论 -
CGAL 编译
2018-05-07 在Windows平台上,CGAL的编译还是很简单的。可以下载安装版本的cgal,它会自动的下载所依赖的第三方lib。那么在build时就不需要自行编译第三方的lib了。如果想要从官方git仓库clone代码并build,那就复杂了。 CGAL依赖于boost,我们可以选择boost位置。如果想要结合PCL使用,PCL默认使用static boost,所以,需要注意 CGA...原创 2018-05-07 17:29:32 · 1774 阅读 · 4 评论 -
OSG编译
2018-05-07 相较于《OpenSceneGraph三维渲染引擎编程指南》中用到的2.8版本,当前3.6版本的OSG编译过程还是非常简单的。我们只需要注意几个选项即可。 在search 框内输入“deprecated”,会有两个选项被搜索到。需改为不勾选状态,我们不再需要老版本接口方式了。 OSG_GL_CONTEXT_VERSION可填写3.3,这将会变成一个宏:#define...原创 2018-05-07 17:29:57 · 1338 阅读 · 0 评论 -
STL、PLY、OBJ格式分析
2018-05-18 这三种3D格式文件时我们在做CAD或者游戏开发中基本上都会遇到的。所以,如果想要把这些文件转化成自己的程序中想要操作的对象,一般都需要对这些文件进行解析。这些格式时公开的,如STL、PLY、OBJ,STP等,我们可以免费使用。也有很多开源的lib来解析这些类型的文件。但是也有一些类似的3D格式文件,如CATIA,CGR等则是商业收费的。STLSTL格式是由3D...原创 2019-08-06 10:42:12 · 13181 阅读 · 0 评论 -
OSG 八叉树 与 Kd Tree
2018-09-01 在游戏或者CAD程序中,我们经常面对的一个需求:已知空间(多数是二维、三维,也有少数高维空间)内的一个物体,求解距离它最近的k个物体是哪些。当然,这个问题可能很简单,假设空间内只有几百几千、甚至几万个个物体,我们只需要遍历一下即可。也花费不了几毫秒时间。但是,当空间内的物体有几百万、几千万个的时候呢,或者几亿几十亿呢?你个简单的查找就耗费几十分钟、几个小时,这绝不能忍...原创 2019-08-06 10:48:54 · 2303 阅读 · 0 评论 -
OSG场景管理
2018-09-01 场景管理是渲染引擎的核心功能,我们希望能够把所有的渲染物体合理的组织在一起,而且能够方便的查找、管理。本质上就是设计一个或者多个数据结构。这个目标很容易实现,放在一个数组里就可以了,各种操作的代价也不是很大。但是,这是不行的。 首先,我们需要把显示物体分组,一堆对象可能是属于一起的,在逻辑上在一个集合,虽然我们可以用额外的数据结构来进行分组管理,那很容出错。所以...原创 2019-08-06 10:49:47 · 1199 阅读 · 5 评论 -
基于OSG的资源导入
2018-09-13 我们经常需要在渲染程序中继承各种格式的文件导入功能,虽然我们可以自行编译各种文件类型处理的lib,但是,如果渲染引擎能够有一个模块来处理这样的工作是最好的了。OSG插件机制真的是利器。这里主要讲讲用OSG插件进行资源导入。OSG支持多种3D格式,链接[1]表明,基本囊括了我们能接触到的数据交换格式。对于每一种格式,OSG都有插件来处理。插件用dll来实现,根据文件...原创 2019-08-06 10:50:25 · 554 阅读 · 0 评论 -
《百面机器学习》推荐
2018-10-21 我不得不推荐一下这本书。相信,很多人并不是机器学习科班出身的,但是,出于兴趣想要学习这些带来巨大效益的知识和技术。虽然我们也在跟着课本学习,但由于没有研究型项目的实践,效率就可想而知了。相较于app、web等技术的学习,这里的项目实践更加有意义、更重要,因为涉及到的各种算法和基础知识,非常依赖于项目的具体需求,变动非常大。机器学习中涉及到的算法、模型种类繁多,就是因为要...原创 2019-08-06 10:50:53 · 376 阅读 · 0 评论 -
Qt 与 MVC
2018-11-14 MVC软件架构模式出现的很早,80年代随着可视化操作系统的兴起就开始发展了。“MVC模式最早由Trygve Reenskaug在1978年提出[1],是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构。”在那个8086的年代直接从语言层面为UI显示考虑,我真的不得不佩服项目负责人开拓创新的精神。但此文并不讨...原创 2019-08-06 10:51:49 · 913 阅读 · 0 评论 -
OSG实现正交投影
2019-08-10 前段时间群里有人问OSG的正交投影怎么实现,似乎不熟悉的同学都陷入错误的思考方式,从而难以把问题想明白。其实,这个功能很简单。只要想明白了,就会豁然开朗,也能对类似的问题有所帮助。OSG内置的manipulator都是为透视投影准备的。但是,CAD程序多数情况下需要使用正交投影。OSG抽象了一个Manipulator类型,鼠标、键盘驱动camera进行交互浏览。其继承层...原创 2019-08-12 09:40:38 · 2816 阅读 · 4 评论 -
Vulkan编程指南翻译 第六章 着色器和管线 第3节 管线
6.3 管线如你在前面小节所读到的,Vulkan使用着色器module来表示一系列的着色器程序通过把module代码交给vkCreateShaderModule()可以创建着色器module,但是,在它们可以在设备上被用来工作之前,你需要创建管线。在Vulkan中有两种管线:计算和图形。图形管线相对复杂,且包含许多和着色器相关的状态。然而,计算管线在概念上简单多了,且出来着色器代码也不包翻译 2017-03-07 00:26:35 · 1301 阅读 · 0 评论 -
Vulkan编程指南翻译 第六章 着色器和管线 第1节 GLSL简介
第六章 着色器和管线在本章你将学到l 什么事着色器及如何使用它l SPIR-V -- Vulkan渲染语言的基础知识l 如何构造着色器管线并用它做工作 着色器是在设备上执行的小程序。他们是任何复杂Vulkan程序构建的基础单元。对你的应用程序中操作来讲,着色器比Vulkan API更重要。本章介绍着色器和着色器模块,展示他们如何从SPIR-V二进制文件构建,并讲解如何使用标翻译 2017-03-04 12:02:26 · 2356 阅读 · 0 评论 -
Vulkan编程指南翻译 第六章 着色器和管线 第2节 SPIR-V 概述
6.2 SPIR-V 概述 SPIR-V着色器嵌入在module里。每一个module都可以包含一个或多个着色器。每一个着色器都有一个固定名字入口点和着色器类型,这用来定义着色器在哪个着色阶段来使用。入口点之着色器开始运行时的起始位置。一个SPIR-Vmodule都随着一些附带信息传递 给Vulkan,Vulkan返回一个对象来表示这个module。此module可以用来构造一个管线翻译 2017-03-04 17:55:27 · 2991 阅读 · 0 评论 -
Vulkan编程指南翻译 第四章 队列和命令 第4节 复制图像数据
4.4 复制图像数据在前一节,我们讨论了如何清空图像并通过一个简单的数据结构来填充数据。在很多情况下,你需要把纹理数据上传到图像或者复制图像数据到另一图像。Vulkan支持从缓冲区向图像复制数据,在图像之间复制数据,和从图像向缓冲区复制数据。调用vkCmdCopyBufferToImage(),可从缓冲区向图像的一个或者多个区域复制数据。其原型如下:void vkCmdCopyBuf翻译 2017-03-01 12:13:46 · 1300 阅读 · 0 评论 -
Vulkan编程指南翻译 第四章 队列和命令 第3节 清空和填充图像
4.3 清空和填充图像和缓冲区一样,也可以把数据直接复制到图像,或使用一个值填充。图像是更大、复杂、不透明的数据结构,所以原生的偏移量和数据通常对应用程序来说是不可见的。[2]2. Of course, it’s possible to map the memory that is used for backing an image. In particular, when linear翻译 2017-03-01 12:04:30 · 1022 阅读 · 0 评论 -
Vulkan编程指南翻译 第四章 队列和命令 第6节 展开图像
4.6 展开图像所有目前讲到的图片相关的命令,没有一个支持格式转换和改变复制区域的尺寸。你可以调用vkCmdBlitImage()实现这个功能,它可以接受不同格式的图像并展开或缩小需要复制的区域,当这些区域写入到目标图像时。术语blit是 block image transfer的缩写,指不仅需要复制图像数据,并且也可能需要在此过程中处理数据。vkCmdBlitImage()的原型如下:翻译 2017-03-01 12:26:24 · 1077 阅读 · 0 评论 -
Vulkan编程指南翻译 第五章 展现 第1节 拓展
你将在本章中学到:l 如何在屏幕上展现你的应用程序的结果l 如何决定系统的显示设备l 如何改变显示模式并和原生的窗口系统交流 Vulkan主要是一个图形API,它的大多数功能专注于生成和处理图片。绝大多数Vulkan应用程序被设计来给用户展现结果的。这就是常被称为“展现”的过程。然而,因为Vulkan所运行的平台各异,展示并不是它核心API,但被移交给一套拓展。本章翻译 2017-03-01 12:27:09 · 905 阅读 · 0 评论 -
Vulkan编程指南翻译 第五章 展现 第2节 展现表面
5.2 展现表面被渲染的图形数据以备展示的对象被被称为”表面“,由一个VkSurfaceKHR类型的handle表示。这种特殊的对象由VK_KHR_surface拓展引入。这个拓展提供了处理surface对象的功能,但是它在各平台基础上高度定制化,以提供surface与窗口的对接的功能。Interfaces are defined for Microsoft Windows, Mir and翻译 2017-03-01 12:28:01 · 1120 阅读 · 0 评论 -
OpenGL Shading Language 4.4
2015-09-10 这明明是一份reference, 只有在查资料的时候才有用,本没有通篇阅读的必要。但是,我一直觉得这个东西最好花一点时间通读一遍。 就像当初学习数字图像处理的时候,我查资料看到有人说DIP 这本书是用来查阅的,而不是用来学习的,我还是坚持看完了,至于学习的效率另说。我坚持读下来的原因也并非单纯追求学习的效率。 就如我当初在大学的时候坚持读完了英文版的Th原创 2017-02-10 13:55:30 · 574 阅读 · 0 评论 -
Vulkan编程指南翻译 第五章 展现 第3节 交换链
5.4 全屏画幕在前一节提到的平台特定的拓展允许创建的VkSurface对象代表一个操作系统或者窗口系统原生的一个窗口。这些拓展通常被用来在一个桌面上可见的窗口做渲染工作。即使我们可以创建一个不带边框、占满真个屏幕的窗口,这样渲染效率更高。这个功能由VK_KHR_display和VK_KHR_display_swapchain拓展提供。这些拓展提供了一个平台无关的机制,来获取系统的显示器,翻译 2017-03-02 17:24:27 · 811 阅读 · 1 评论 -
glew工作原理
2017-02-16 在C/C++程序中使用OpenGL时,需要使用glew/glad这样的第三方库来加载OpenGL函数。不像一般的第三方lib,通过头文件,直接就能够找到函数的指针地址。很多同学不明白为什么需要这么做。本文,就来分析一下。 因为gl.h这个头文件在windows平台是最原始的版本,微软并不更新,一些最新的函数接口并不能暴露出来,不知为何,在Linux上同样不原创 2017-02-17 15:02:59 · 9623 阅读 · 0 评论 -
Interactive Computer Graphics - A Top-Down Approach with Shader-Based OpenGL
2015-09-30 我很早之前就关注这本书了。在刚开始学习计算机图形学的时候,我首先购买的是另外一本,名叫 Computer Graphics with OpenGL,说到这本书,到手的时候我就用胶带把书名给盖起来了,这书名不太好啊(虽然后来学完了,倒是觉得作者起这个书名挺合适的)。我最初并没有买这本书的一个原因也是因为书名看起来两本书的质量都差不多,但是这个Top-Down原创 2017-02-10 13:59:15 · 2186 阅读 · 0 评论 -
OpenGL 编程与 FBO
2015-09-12 其实我最初是想讲讲FBO的,想要从具体的点来讲讲技术。我们的项目中,最近开始了服务端的开发工作。我需要把主程序改为离屏渲染的工作方式,然后通过网络发送操作的指令,把渲染结果拿出来。我到现在为止,没有在博客上写什么具体的技术分析类的文章,都是在纪录自己的学习经历、感受、经验。我也总在催自己,要多写点分析类的文章,不然,写的这些东西对别人没什么帮助啊。一个人在自原创 2017-02-10 13:56:02 · 711 阅读 · 0 评论 -
Graphics Shaders - Theory & Practice
2014-11-18 我希望我在半年前就能够有觉悟,就能够搜索到这本书并学习的话是多好啊。 这本书的章节安排初看起来,有点怪异,但是,当我阅读完成之后,才发现,人家这样安排是有道理的。 看红书,蓝书的时候,你只能学到使用OpenGL进行简单的编程。而这本书,会告诉你,OpenGL程序有那些步骤,详细的分析,从vertex shader 到 geometry shader原创 2017-02-10 12:06:04 · 841 阅读 · 0 评论 -
OpenGL红宝书 第八版
2014-12-30 这个第八版要比第七版好多了。想当初,第七版刚拿到手,对比着目录和内容,发现很多东西都被标记为 deprecated。我拿起笔来,给index中deprecated的章做标记,结果完成了就发现,这本书除了基础和高级部分,加附录,都不用学习了。全是废弃的东西,还学什么呢?一上来感觉就不好啊。 真正比起来,新版有如下的特点:章节安排更加合理 讲解更加细致 ...原创 2017-02-10 12:08:26 · 679 阅读 · 0 评论 -
Vulkan编程指南翻译 第五章 展现 第5节 开始呈现
5.6 开始显示显示,是在队列上下文中发生的操作。一般,提交到队列的命令缓冲区中的命令被执行时,会产生用来显示图像,所以,这些图像只有在渲染操作完成后才能展示给用户。一个系统中一个设备可以支持多个队列,它们不必都支持显示。在你可以使用队列来在画幕上显示之前,你必须判断队列是否支持在某个画幕上显示。要想知道一个队列是否支持显示,传递物理设备,画幕,队列组到vkGetPhysica原创 2017-03-03 16:04:49 · 898 阅读 · 0 评论 -
Vulkan编程指南翻译 第五章 展现 第6节 清扫工作
5.6 清扫工作不管你在应用程序中用什么方法来呈现,你都需要正确的做清扫工作。第一,你应该销毁正在呈现的交换链。需要调用vkDestroySwapchainKHR()函数,其原型如下:void vkDestroySwapchainKHR(VkDevice device,VkSwapchainKHR swapchain,const VkAllocationCall翻译 2017-03-03 16:05:30 · 572 阅读 · 0 评论 -
Vulkan编程指南翻译 第四章 队列和命令 第5节 复制压缩图像数据
4.5 复制压缩图像数据如在第二章“内存和资源”中讨论过的,Vulkan支持多种压缩图像格式。所有目前定义的压缩格式都是基于固定大小的块的格式。对于其中的许多种,块大小是 4 × 4纹素。对于 ASTC格式,块大小是随图像变动的。当从缓冲区复制数据到图像时,只有整数大小的块能被复制。因此,每一个图像区域,以纹素为单位,必须是图像所用块大小的整数倍。还有,复制操作的源区域必须是块大小的整数翻译 2017-03-01 12:18:36 · 712 阅读 · 0 评论