- 博客(36)
- 资源 (8)
- 收藏
- 关注
原创 C++学习(七)类占的内存分布
类所占内存的大小是由成员变量(静态变量除外)决定的,成员函数(这是笼统的说,后面会细说)是不计算在内的。成员函数还是以一般的函数一样的存在。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是类里的。其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码。而我们访问类的成员函数是通过类里面的一个指针实现,而这个指针指向的是一个table,table里面记录...
2019-05-31 22:06:04 192
转载 C++学习(六)C++中的mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改...
2019-05-31 21:23:07 145
原创 openGL之API学习(八十)狭义的游戏引擎的定义
狭义的游戏引擎的定义(wiki)图形渲染粒子系统物理系统骨骼系统角色系统动画系统场景管理可视剔除层次细节界面模块脚本接口纹理模型资源管理音频功能网络模块AI模块视频功能更新功能多核支持外围工具链...
2019-05-30 23:00:38 180
原创 openGL之API学习(七十九)HDR高动态范围图像
高动态范围图像(High-Dynamic Range,简称HDR),相比普通的图像,可以提供更多的动态范围和图像细节,根据不同的曝光时间的LDR(Low-Dynamic Range,低动态范围图像),并利用每个曝光时间相对应最佳细节的LDR图像来合成最终HDR图像。它能够更好的反映出真实环境中的视觉效果。(上方为压缩后的HDR图像,下方为直接用相机拍摄的图像)...
2019-05-30 22:57:37 535
原创 openGL之API学习(七十八)SPIR-V
Standard, Portable Intermediate Representation - V (SPIR-V)OpenGL 4.6的最大变化就是 支持SPIR-V,一种用于GPU通用计算和图形学的中间语言,Khronos开发设计,最初是为OpenCL规范准备的,和下一代图形标准Vulkan差不多同时提出,也在不断发展完善。SPIR-V是一种简单的二元中间语言,用于图形着色和计...
2019-05-30 07:29:11 3696
原创 C++学习(五)pair和make_pair
pair 的用法std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型。C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象。class pair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素。pair被定义为struct,因此可直接存取pair中的个别...
2019-05-27 06:51:09 2401
原创 C++学习(四)namespace可以嵌套
namespace osgEarth{ namespace ShaderComp { // User function injection points. enum FunctionLocation { // vertex is in model space (equivalent to gl_Vertex...
2019-05-27 06:30:17 2332
原创 C++学习(三)LHS RHS
LHS(Left-Hand-Side)RHS(Right-Hand-Side)LHS和RHS的含义是“赋值操作的左侧和右侧”,并不一定意味着“=”赋值操作符的左侧或者右侧。LHS:赋值操作的目标RHS:赋值操作的源头...
2019-05-26 07:27:39 2470
原创 C++学习(三)std::string::size_type
size_type是容器概念,没有容器不能使用。由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型string抽象意义是字符串, size()的抽象意义是字符串的尺寸, string::size_type抽象意义是尺寸单位类型string::size_type它在不同的机器上...
2019-05-26 07:16:59 6890
原创 osgEarth的Rex引擎原理分析(五十二)CGCS2000与WGS84坐标系的比较
目标:(四十六)中的119文章《2000中国大地坐标系及其与WGS84的比较》对此有详细的比较https://max.book118.com/html/2017/0614/114928909.shtm结论是:实现上相容的(仅在扁率上有微小差异);精度上是一致的。...
2019-05-25 20:33:15 1033
原创 openGL之API学习(七十七)glDrawElements
通过索引方式来绘制几何图元。void glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid * indices);mode Specifies what kind of primitives to render. Symbolic constants ...
2019-05-25 13:13:43 556
原创 openGL之API学习(七十六)GLSL的内置变量 预定义变量
GLSL为不同的渲染阶段定义了一些特定的变量。这些预定义(也叫做内置变量)有特定的属性。所有的预定义变量都以gl_开头。用户定义的变量不能以此开头。下面分类进行介绍。(1)顶点着色器输入inintgl_VertexID;inintgl_InstanceID;gl_VertexID是当前被处理的顶点的索引。对于arrayrendering,它是当前顶点在数组中的索引;...
2019-05-24 22:36:51 1795
原创 openGL之API学习(七十五)opengl扩展GL_EXT_gpu_shader4
static const char* pFS = " \n\#version 410 \n\ ...
2019-05-22 06:50:11 1806
原创 openGL之API学习(七十四)opengl版本的历史沿革
OpenGL源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。SGI在1992年7月发布1.0版,后成为工业标准,由成立于1992年的独立财团OpenGL Architecture Review Board (ARB)控制。SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。只有通过了...
2019-05-20 19:19:16 399
原创 openGL之API学习(七十三)opengl与Direct3D(D3D)
架构上:在架构上其实两者没有什么区别,只是D3D的runtime是在OS里,对于不同硬件来说都是一样的。而OpenGL的runtime直接是和驱动合为一体的。但这并不会造成性能有所差别。shader上:OpenGL 的原生shading language是GLSL,D3D的是HLSL。两者语法相似,但细节上天差地别。好在,NVIDIA的Cg在很大程度上类似于HLSL,而且可以编译 ...
2019-05-20 15:10:11 569
原创 openGL之API学习(七十二)opengl调试Debug
现在支持GLSL和OpenGL跟步调试的只有Nvidia的Nsight,只支持Nvidia的显卡;其他的基本都是track,不支持GLSL的跟步调试,比如AMD的GPUPerfClient以及gDEBugger。还有AMD的GPU ShaderAnalyzer也非常的不错,能看到相应的GLSL汇编代码。...
2019-05-20 06:59:05 949
原创 openGL之API学习(七十一)Direct3D和DirectX
Direct3D(简称:D3D)是微软公司在Microsoft Windows操作系统上所开发的一套3D绘图编程接口,由微软公司所制定的3D规格界面,与Windows 95和Windows NT操作系统兼容性好,可绕过图形显示接口(GDI)直接进行支持该API的各种硬件的底层操作,大大提高了游戏的运行速度,是DirectX的一部分,目前广为各家显示卡所支援。与OpenGL同为电脑绘图软体和电脑游戏...
2019-05-20 06:31:40 1009
原创 openGL之API学习(七十)windows的opengl扩展wgl
WGL扩展说白了是Windows操作系统和OpenGL做交互的一系列扩展,glut也好,其他框架也好,都是对这些接口进行了封装。之前的文章也提到了,Windows在对OpenGL的原生支持非常不友好,甚至差点就夭折了,在wingdi.h这个头文件中是有一堆接口用于创建OpenGL Render Context的,但是使用这些API创建的版本非常低,好像也就1.1~1.4的样子,而且还是软件实现,总...
2019-05-19 17:24:00 1579
原创 openGL之API学习(六十九)水平同步 垂直同步
垂直和水平是CRT中两个基本的同步信号,水平同步信号决定了CRT画出一条横越屏幕线的时间,垂直同步信号决定了CRT从屏幕顶部画到底部,再返回原始位置的时间,而恰恰是垂直同步代表着CRT显示器的刷新率水平!垂直同步打开,那么在游戏中,或许强劲的显卡迅速的绘制完一屏的图像,但是没有垂直同步信号的到达,显卡无法绘制下一屏,只有等垂直同步信号到达,才可以绘制。这样fps自然要受到操作系统刷新率运行值的...
2019-05-19 17:16:05 2489
原创 openGL之API学习(六十八)core profile、compatibility profile、forward compatibility
OpenGL在渲染的时候需要一个Context,这个Context记录了OpenGL渲染需要的所有信息,可以把它理解成一个大的结构体,它里面记录了当前绘制使用的颜色、是否有光照计算以及开启的光源等非常多我们使用OpenGL函数调用设置的状态和状态属性。在OpenGL 3.0版本之前,OpenGL创建Context都是一致的,随着升级会新增一些内容(例如从OpenGL1.1升级到1.5,会新增一些状...
2019-05-19 11:45:35 3048 1
原创 openGL之API学习(六十七)glTexParameter glTextureParameter
设置纹理对象的参数,这两个函数其实是一个功能。void glTexParameterf( GLenum target, GLenum pname, GLfloat param);target Specifies the target to which the texture is bound for glTexParameter functions...
2019-05-18 17:08:26 979
原创 C++学习(一)Linux下的getpid srandom gettimeofday移植
在linux下stdlib.h包含srandom 和random ,但在VC下stdlib.h包含的是srand和rand,所以应该改过来#include <windows.h>getpid->GetCurrentProcessIdsrandom->srand#ifdef WIN32int gettimeofday(struct timeval *t...
2019-05-18 17:08:07 433
原创 openGL之API学习(六十六)EmitVertex EndPrimitive
EmitVertex表示输出一个顶点,而EndPrimitive表示结束一个图元的输出,这是一对命令。只有几何着色器才有的命令。几何着色器的图元通过两个特殊的内置函数生成的,即EmitVertex()和EndPrimitive() ,每个着色器请求都必须调用EmitVertex(),以及必须必要的时候使用EndPrimitive()来产生图元,如果没有调用这些函数,那么就不会输出几何体,也就是...
2019-05-18 16:17:01 2004
原创 openGL之API学习(六十五)glDrawTransformFeedback
从变换反馈Transform Feedback的缓冲区中绘制图元。与glDrawArrays不同的是不需要指定顶点的数量。void glDrawTransformFeedback( GLenum mode, GLuint id);mode Specifies what kind of primitives to render. Symbolic constan...
2019-05-18 08:23:47 861
原创 openGL之API学习(六十四)glBeginTransformFeedback
开始变换反馈操作。void glBeginTransformFeedback( GLenum primitiveMode);primitiveMode Specify the output type of the primitives that will be recorded into the buffer objects that are bound for tran...
2019-05-18 08:15:13 595
原创 openGL之API学习(六十三)GL_RASTERIZER_DISCARD
glEnable(GL_RASTERIZER_DISCARD);使用GL_RASTERIZER_DISCARD标志作为参数调用glEnable()函数,告诉渲染管线在transform feedback可选阶段之后和到达光栅器前抛弃所有的图元。glDisable(GL_RASTERIZER_DISCARD);...
2019-05-18 07:23:03 968 1
原创 C++学习(二)将数字常量转换为指针
glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,sizeof(Particle),(const GLvoid*)4); // position glVertexAttribPointer(2,3,GL_FLOAT,GL_FALSE,sizeof(Particle),(const GLvoid*)16); // velocity glV...
2019-05-18 07:04:57 1574
原创 openGL之API学习(六十二)glBufferData
往gpu缓冲区写入数据void glBufferData( GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage);target Specifies the target to which the buffer object is bound for g...
2019-05-17 21:32:53 3480
原创 openGL之API学习(六十一)glFinish和glFlush
通常情况下,OpenGL指令不是立即执行的。它们首先被送到指令缓冲区,然后才被送到硬件执行。glFinish和glFlush都是强制将命令缓冲区的内容提交给硬件执行。glFinish()将缓冲区的指令立即送往硬件执行,但是要一直等到硬件执行完这些指令之后才返回。如果直接绘制到前缓冲,那么在你想保存屏幕截图之前,就需要调用这个函数,确保绘制完毕。如果使用双缓冲,则这个函数不会有太大作用。...
2019-05-06 08:16:34 364
原创 openGL之API学习(六十)glTransformFeedbackVaryings
配置要从着色器中输出的变量void glTransformFeedbackVaryings( GLuint program, GLsizei count, const char **varyings, GLenum bufferMode);Parametersprogram The name of the target progr...
2019-05-06 07:24:18 1097
原创 openGL之API学习(五十九)Transform Feedback变换反馈
OpenGL ES 3.0、openGL 4.x新增的功能我们总是将顶点数据发送到图形处理器,并且只在帧缓存中生成绘制的像素。如果我们想要在经过顶点着色器或几何着色器之后捕获这些顶点呢?在这一章中,我们将探讨一种方法,即transform feedback。TransformFeedback是OpenGL管线中,顶点处理(如果有几何着色器,那么就在几何着色器后)之后,图元装配之前的一个步骤。...
2019-05-06 06:17:40 3128
原创 openGL之API学习(五十八)烘焙法线贴图
假如下面是我们的低面数模型,上面是我们的高面数模型,上面的模型在计算光照时,由于面数多,每个面的法线方向不同,所以各个面的光照计算结果都不同,就有凹凸的感觉了,而下面的低模,只有一个面,整个面的光照条件都是一致的,就没有凹凸的感觉了。我们如果把上面的高模的法线信息保存下来,类似纹理贴图那样,存在一张图里,再给低模使用,低模就可以有跟高模一样的法线,进而在计算光照时达到和高模类似的效果,这也就是...
2019-05-03 16:56:27 654
原创 openGL之API学习(五十七)法线贴图、色彩贴图、高光贴图
Normal map :Normal map (法线贴图) 它的作用是模拟出高模上的一些细节纹理,特别是将高模上的圆滑和粗糙度投射到低模上,让低模也有高模的效果。因为高模的面数非常多,导入引擎后电脑是跑不动的,所以用低模加上法线贴图就能很好的解决这个问题。上图是没有用 Normal map (法线贴图)时的效果。下图是用了 Normal map (法线贴图)后的效果。Diffu...
2019-05-03 06:31:54 1605
原创 openGL之API学习(五十六)低模、高模的区别以及各自的使用领域
高模是高细节高精度的3D模型,高模看上去十分逼真细节非常丰富模型的面数也相当的高。低模是游戏里的说法,可以理解为游戏所使用的模型。高模有很多作用可以用于电影制作,广告等等。在游戏里高模主要是为了烘焙NormalMap 并且运用在游戏低模型上使低模拥有近似于高模的细节效果。高模一般是用来制作过长动画和法线贴图的,现在的次世代游戏都采用这种方法,解释起来比较困难请你仔细看(比如一个高模,有很多的面数,...
2019-05-03 06:28:46 605
原创 openGL之API学习(五十五)凹凸贴图技术
法线贴图是目前游戏开发中最常见的贴图之一。我们知道,一般情况下,模型面数越高,可以表现的细节越多,效果也越好。但是,由于面数多了,顶点数多了,计算量也就上去了,效果永远是和性能成反比的。怎么样用尽可能简单模型来做出更好的效果就成了大家研究的方向之一。纹理映射是最早的一种,通过纹理直接贴在模型表面,提供了一些细节,但是普通的纹理贴图只是影响最终像素阶段输出的颜色值,不能让模型有一些凹凸之类的细节表现...
2019-05-03 06:26:33 1496
osgAndroidExampleGLES2重新组织TestNativeCPlusPlus
2021-06-19
NVIDIA_Nsight_Tegra_Release_3.6.19217.7511.exe
2021-02-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人