11 周旭光

尚未进行身份认证

2013年6月毕业于福州大学,目前在北京的互联网地图厂商从事地图渲染引擎的研发工作,专注于GIS,专注于C++。如果有什么事可以通过邮箱zhouxuguang236126.com联系到我,也可以加我QQ672218231

等级
TA的排名 3k+

C/C++获得对齐的内存的跨平台解决方案

在C/C++开发的时候,有时候需要获得内存对齐的内存块,这一需求主要源于多媒体指令集需要内存对齐的内存块,这样处理速度会快一点。例如SSE/SSE2/MMX/AVX等指令集都需要对齐的内存。这些多媒体指令集常用于语音合成、图像处理、3D图形学等领域。下面是封装的内存对齐的内存分配函数。void* aligned_malloc(size_t size, size_t align){ voi

2016-12-09 20:54:45

VS2008配置NDK开发环境

看到很多网上的文章都有写VS配置NDK开发环境,我是参考了其中的一篇文章,连接是点击打开链接。但是这篇文章里面的配置不能关联Application.mk文件。所以觉得不是很方便,经过一阵摸索,终于找到一个可以 关联Application.mk文件的方法。软件准备:1、VS20082、NDK具体步骤如下:1、打开VS2008,新建Makefile工程。2、在设置中设置编译、重新编译、清理的命令,de

2016-12-02 23:28:42

OpenGL ES着色语言-UBO

Uniform Buffer Objects(简称UBO)是OpenGL3.1引入的。UBO是显卡上的一块缓冲区,即GPU buffer。它允许将数据从客户端程序传送到GLSL程序中。    使用UBO的最大好处是可以在各个shader之间共享数据。    下面还是以OpenGL 4.0 shading language cookbook中的例子说明。    在OpenGL的shader中,UBO

2016-11-30 13:22:35

OpenGL ES着色语言-光照效果之散射光

OpenGL光照模型,在固定管线中,主要是调用OpenGL函数实现,如果使用着色器,该怎么实现。本文的例子是移植OpenGL 4.0 Shading Language Cookbook中第二章的例子。代码已经移植到Android上。    散射光计算主要涉及到两个向量,第一个是顶点到光源的向量S,以及顶点处的法向量N。光照计算在眼睛坐标中进行。具体见下图所示:有这两个向量之后,还要考虑顶点处的漫反

2016-11-20 21:08:19

GLSL程序对象的C++封装

在OpenGL的shader编程中,最常用的可能就是程序对象了,GLSL的程序对象的创建、加载shader等步骤都是固定的,如果每次都写同样的代码,觉得十分浪费时间,所以现在就将我在Shader学习过程中自己封装的GLSLProgram类奉献出来供大家参考:头文件如下:/* * GLSLProgram.h * * Created * Author: zhouxuguang *

2016-11-20 15:53:09

常用位操作的c++实现

看到这个标题,可能大家会误解,其实就是贡献几个比较实用的运用位运算实现的操作,这对于加快程序的运行速度很有帮助。具体的实现是参考http://graphics.stanford.edu/~seander/bithacks.html实现的。   下面给出其函数声明及其实现。    //判断该整数是否是2的整数次方bool IsPowerOfTwo (unsigned int value);boo

2016-10-10 20:40:22

c++三种使用shared_ptr的方式

在c++中,我们是越来越多的使用智能指针,其中我们说的智能指针通常是指基于引用计数的智能指针,在c++11标准中就是std::shared_ptr。它的特点是可以安全的放入STL容器中。有以下三种方式可以使用shared_ptr1、如果你的c++编程环境支持c++ 11标准,那么可以直接使用std::shared_ptr,它定义在memory文件中。2、如果你的c++实现支持C++ T...

2016-09-11 15:48:27

Hilbert曲线简介及生成算法

Hilbert曲线 Hilbert曲线是一种填充曲线,类似的填充曲线还包括Z曲线,格雷码等其他方法。Hilbert曲线依据自身空间填充曲线的特性,可以线性地贯穿二维或者更高维度每个离散单元,并且仅仅穿过一次,并对每个离散单元进行线性排序和编码,该编码作为该单元的唯一标识。空间填充曲线可以将高维空间中没有良好顺序的数据映射到一维空间,经过这种编码方式,空间上相邻的对象会邻近存储在一块,可以减少IO的

2016-03-05 18:51:20

GIS中的WKB介绍

GIS中的WKB介绍WKB的全称是The Well-known Binary,也简称WKB,OGC与ISO/TC211都做出了同样的规范,它是用来几何体的表达。即用连续的二进制流来表达几何体,这样在GIS互操作方面也有好处。现代GIS软件的底层模块中可以说都有关于WKB解析代码。在二进制存储中有大尾端和小尾端之分,通常在二进制流的第一个字节就指定,这样在这个字节之后的字节流就可以按照相应的大小尾端

2015-10-21 14:20:52

地球椭球面上多边形面积量算(C++代码)

昨天突然测试的时候发现以前产品中写的地球椭球面上面积计算的代码有点问题,于是今天就彻底修正,从QGIS中抠出代码来用C++重写了一下,新代码可以比较准确计算椭球面上多边形的面积,这个基础函数对空间量算功能中的面积量测非常重要,在这里共享出来供大家参考甚至直接拿过去用。       头文件如下: /*** @file DistanceArea.h* @brief

2015-05-15 20:32:28

GLSL实现图像处理

今天晚上没事将以前弄的OPENGL着色语言实现滤镜效果的实现和大家分享一下,滤镜主要包括图像的对比度调整、浮雕效果、彩色图片灰度化、卷积等操作。         这些操作其本质上是属于图像处理的东西,OpenGL实现图像处理主要是用到了GLSL着色语言。具体到着色器就是片段着色器。         说白了就是如何用OpenGL做通用GPU计算,OpenGL做通用计算的步骤主要如下:读取数据->顶点

2015-05-06 21:02:23

跨平台C、C++代码注意的事项

在我们的开发中,跨平台的需求越来越强烈,如何保持C/C++代码能在多个平台上编译,是一个比较值得研究的问题。关于跨平台的文章网上很多,跨平台的库网上也很多。那么我从自己的跨平台开发经验谈一谈自己的心得,希望对大家能够起到一定的作用。主要涉及到Windows和linux两个操作系统。1、  关于路径和头文件路径分隔符的问题在Windows中,正斜杠和反斜杠都可以,但是在Linux中,只能是/。在Wi

2015-04-21 09:49:03

OpenGL中投影变换函数的实现

在某些情况下,我们需要自己实现透视投影和正射投影的函数,那么根据前一篇转载的博客,OpenGL投影矩阵的推导,我们很容易写出glFrustum和glOrtho函数的实现。glFrustum的函数实现如下:void MyFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdo

2015-04-12 17:44:51

OpenGL投影矩阵的推导

转载地址:http://www.songho.ca/opengl/gl_projectionmatrix.htmlOpenGL Projection MatrixRelated Topics: OpenGL TransformationOverviewPerspective ProjectionOrthographic ProjectionUpdates: The MathML version i

2015-04-12 17:13:55

OpenGL坐标变换

转载地址:http://www.songho.ca/opengl/gl_transform.htmlOpenGL TransformationRelated Topics: OpenGL Pipeline, OpenGL Projection Matrix, OpenGL Matrix Class Download: matrixModelView.zip, matrixProjection.zi

2015-04-12 17:12:50

OpenGL中gluPerspective函数和glFrustum函数的关系

关于这两个函数,大部分书和以及网上double很少有资料去介绍它。今天就将以前探索到的一些东西分享给大家。gluPerspective函数是对glFrustum函数的一种简单封装,那么gluPerspective的参数如何转化为glFrustum的参数呢?    我们知道gluPerspective函数创建的是一个上下以及左右对称的一个视景体。fovy是视角的大小,以度为单位;aspect是视景体

2015-04-11 21:40:21

地球椭球体基本要素的计算

地球椭球体基本要素的计算,主要包括纬线弧长、子午线弧长、椭球面上梯形面积,以及同一个椭球体下大地坐标和空间直角坐标之间的转换等。为了方便,写了一个类如下,方便调用,在此也分享给大家:头文件如下:/******************************************************************************** 版权所有(C) 福建省空间信息工程研究中

2015-04-06 17:21:56

三维空间坐标的相似变换原理与实现

说到这个博客的题目,可能觉得有点大,在测绘学领域中三维空间坐标的相似变换用得非常多。那么什么是三维坐标的相似变换呢?就是在两个三维直角坐标系中,坐标进行变换,两个坐标系之间变换需要七个参数,即三个平移分量,以及三个旋转参数和一个尺度因子。这里用到的模型采用摄影测量学中的变换模型,具体推导见摄影测量学书籍:

2015-04-06 16:13:25

OpenGL中使用Shader的基本步骤

在OpenGL中,创建和使用Shader的基本步骤如下:1、通过glCreateShader创建一个或多个着色器对象:2、使用glShaderSource加载着色器的源代码,和着色器对象关联;3、glCompileShader编译每个着色器对象4、使用glCreateProgram创建程序对象5、通过glAttachShader将所有着色器对象绑定到程序对象上;6、glLinkProgram链接程

2015-04-04 15:56:24

OpenGL实现通用GPU计算概述

可能比较早一点做GPU计算的开发人员会对OpenGL做通用GPU计算,随着GPU计算技术的兴起,越来越多的技术出现,比如OpenCL、CUDA、OpenAcc等,这些都是专门用来做并行计算的标准或者说接口。       OpenGL用来做通用GPU计算主要是利用纹理存储器在GPU中计算以及把结果取回内存,这大概是OpenGL做通用GPU计算最好的选择。 大概的流程主要就是先创建OpenGL的环境,

2015-03-31 19:18:37

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!