- 博客(46)
- 资源 (8)
- 收藏
- 关注
原创 C++学习(九十一)运算符优先级
优先级 运算符 说明 结合性 1 :: 范围解析 自左向右 2 ++-- 后缀自增/后缀自减 () 括号 [] 数组下标 . 成员选择(对象) −> 成员选择(指针) 3 ++-- 前缀自增/前缀自减 自右向左 +− 加/减 !~ 逻辑非/按位取反 (type) 强制类型转换 * 取指针指向的值 & 某某的地址...
2020-05-31 18:29:30 153
原创 openGL之API学习(一二四)step
genType step (genType edge, genType x)genType step (float edge, genType x)如果x < edge,返回0.0,否则返回1.0
2020-05-31 18:10:18 1491
原创 openGL之API学习(一二三)mix
在两个值之间做线性混合计算mix(x,y,a) a控制混合结果实际的计算过程为return x(1-a) +y*a
2020-05-31 18:00:05 1388
原创 openGL之API学习(一二二)smoothstep
该函数用于求解两个值之间的样条插值。float smoothstep(float edge0, float edge1, float x) vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x) vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x) vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x)vec2 smoothstep(float edge0, floa
2020-05-31 17:56:01 774
原创 osg学习(四十)osg::Viewer的realize创建窗体的几种方式
能够根据屏幕数,创建不同位置的窗口。void Viewer::realize(){ //在某一个屏幕上创建无边框窗口 //在某一个屏幕上创建正常窗口 //在所有屏幕上创建正常窗口,一个窗口,窗口位置可以跨屏幕 osgViewer::SingleWindow实现 //在某一个屏幕上创建全屏窗口 osgViewer::SingleScreen实现 //在所有屏幕上创建全屏窗口,,一个窗口,窗口位置可以跨屏幕 osgView
2020-05-30 18:45:21 916
原创 osg学习(三十九)DisplaySettings
DisplaySettings是osg的全局单实例变量,类似osg的Registry。主要记录窗口的一些显示设置,比如窗口尺寸、多重纹理采样数等,osg在创建窗口时会从该变量中读取信息,这个变量中的信息可以通过命令行输入也可以通过环境变量输入,但是不支持通过代码修改。1、创建时机osg/DisplaySettomgs.cppOSG_INIT_SINGLETON_PROXY(ProxyInitDisplaySettings, DisplaySettings::instance())osg/.
2020-05-30 18:28:00 1999
原创 openGL之API学习(一二一)wglChoosePixelFormatARB
mirosoft实现的opengl函数,msdn上没有该函数的介绍,只能找到ChoosePixelFormathttps://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-choosepixelformat通过wglGetProcAddress能获取到wglChoosePixelFormatARB的函数指针。...
2020-05-30 13:25:21 1146
原创 C++学习(九十)android的jni下Android、Application两个mk文件
Android.mk 文件位于项目 jni/ 目录的子目录中,用于向编译系统描述源文件和共享库。它实际上是编译系统解析一次或多次的微小 GNU makefile 片段。Android.mk的语法支持将源文件分组为模块。模块是静态库、共享库或独立的可执行文件。您可在每个Android.mk文件中定义一个或多个模块,也可在多个模块中使用同一个源文件。Android.mk 文件用于定义 Application.mk、编译系统和环境变量所未定义的项目范围设置。它还可替换特定模块的项目范围设置。Ap...
2020-05-29 06:42:54 313
原创 C++学习(八十九)android的jni原理及使用
1、编写java程序,定义和使用本地方法public class HelloWorld { public native void displayHelloWorld();//所有native关键词修饰的都是对本地的声明 static { System.loadLibrary("hello");//载入本地库 } public static void main(String[] args) { new HelloWorld().dis...
2020-05-29 06:15:43 267
原创 C++学习(八十八)android支持stl
android是支持标准模板库的,库目录在system/lib/libstdc++.so需要在Application.mk文件中添加APP_STL := stlport_staticAPP_STL还有别的取值:system -> Use the default minimal C++ runtime library.stlport_static -> Use STLport built as a static library.stlport_shared -> Use
2020-05-29 06:08:47 316
原创 osg学习(三十八)Android窗口创建过程
osg::ref_ptr<osgViewer::Viewer> _viewer;_viewer = new osgViewer::Viewer();_viewer->setUpViewerAsEmbeddedInWindow(x, y, width, height);_viewer->realize();
2020-05-27 06:50:10 402
原创 C++学习(八十七)mm cpp文件
mm :源代码文件。带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码。仅在你的Objective-C代码中确实需要使用C++类或者特性的时候才用这种扩展名除此之外还有m文件.m :源代码文件。这是典型的源代码文件扩展名,可以包含Objective-C和C代码。cpp是普通的C++源代码文件...
2020-05-26 06:17:36 807
原创 osg学习(三十六)OSG_SCREEN screenNum的作用
对多个显示器有意义,决定窗口在哪个显示器上显示,默认为0,即当前主显示器。osgViewer/GraphicsWindowWin32.cppbool GraphicsWindowWin32::determineWindowPositionAndStyle( unsigned int screenNum, int clientAreaX, .
2020-05-25 06:40:43 331
原创 osg学习(三十五)设置窗体抗锯齿
通过多重采样达到抗锯齿的目的osg/GraphicsContext.cppGraphicsContext::Traits::Traits(DisplaySettings* ds): x(0), y(0), width(0), height(0), windowDecoration(false), supportsResize(true),
2020-05-25 06:23:55 1753
原创 openGL之API学习(一一九)glTexEnv
用来设置纹理的环境参数,纹理环境参数主要控制纹理如何与片元颜色进行计算的。该函数属于固定管线的函数,4.0以上已经不支持该函数了。void glTexEnvf( GLenum target, GLenum pname, GLfloat param);void glTexEnvi( GLenum target, GLenum pname, GLint param);Parameterstarget Specifies a te...
2020-05-24 10:55:38 443
原创 osg学习(三十三)setTextureAttributeAndModes的编号和纹理单元的关系
结论:不存在对应关系setTextureAttributeAndModes的编号主要是为了管理本级StateSet中的纹理纹理在进入GPU时,会为其分配新的纹理单元,并上传纹理到该纹理单元
2020-05-24 08:06:49 1462
原创 osg学习(三十二)stateset中的_textureAttributeList、_textureModeList
typedef std::pair<Type,unsigned int> TypeMemberPair;typedef std::pair<ref_ptr<StateAttribute>,StateAttribute::OverrideValue> RefAttributePair;typedef std::map<StateAttribute::TypeMemberPair,RefAttributePair> Attri...
2020-05-24 06:42:04 469
原创 osg学习(三十一)osg、Qt的image
1、格式转换osg::Image* CommonTools::covertImage(QImage image){ QImage glImage = QGLWidget::convertToGLFormat(image); unsigned char* data = new unsigned char[glImage.byteCount()]; for (int i = 0; i < glImage.byteCount(); i++) { data[i] = glImage.b
2020-05-22 06:48:00 2694
原创 C++学习(八十六)QT在console中使用qpainter
qpainter在qt的gui模块中,console在core模块中。因此建立的console模块默认是不能使用qpainter的,为了能使用qpainter,需要增加gui模块,即:CONFIG += console gui并且在main函数中添加QGuiApplication a(argc, argv);如果没有上面的这两部操作,使用qpainter会报错:ASSERT failure in QGuiApplication::font(): "no QGuiApplicatio
2020-05-22 06:01:15 626
原创 C++学习(八十五)LARGE_INTEGER提供64位整数
提供64位整数1、定义typedef union _LARGE_INTEGER { struct { DWORD LowPart; LONG HighPart; } DUMMYSTRUCTNAME; struct { DWORD LowPart; LONG HighPart; } u; LONGLONG QuadPart;} LARGE_INTEGER;2、使用Timer_t Tim
2020-05-20 06:44:07 487
原创 openGL之API学习(一一八)glDeleteTextures
删除由glGenTextures创建的纹理对象。删除后的纹理对象ID可以重复使用。void glDeleteTextures( GLsizei n, const GLuint * textures);n Specifies the number of textures to be deleted. 指定删除的纹理对象数textures Specifies an array of textures to be deleted. 指定一组纹理对...
2020-05-17 16:47:48 802
原创 C++学习(八十四)explicit和implicit
在编程过程中, 我们习惯上使用explicit或者implicit关键字实现构造函数的显式或者隐式显示。explicit关键字:只能修饰只有一个参数的构造函数,或者有多个参数,但是除第一个参数外其他的参数都有默认值。它的作用是表明构造函数是显式方式显示的。implicit关键字:与explicit对应,他表示隐式的进行数据转换。注:C++中不存在这个关键字,C#等编程语言中才有,此处仅仅是为了说明。explicit此关键字只能对用户自己定义的对象起作用,不对默认构造函数起作用此关键字.
2020-05-17 13:43:01 2083
原创 C++学习(八十三)std的typeid 、type_info
vcruntiem_typeinfo.hclass type_info{public: type_info(type_info const&) = delete; type_info& operator=(type_info const&) = delete; size_t hash_code() const throw() { return __std_type_info_hash(&_Data); }.
2020-05-17 07:55:20 2305
原创 osg学习(三十)osg的Texture、TextureObject、TextureObjectSet、TextureObjectManager
1、设置纹理2、使用纹理3、删除纹理
2020-05-17 07:19:18 1064
原创 osgEarth的Rex引擎原理分析(一一三)state获取着色器文件中有效define的过程
目标:(一零九)中的问题196状态机State在遍历每一个状态集StateSet时会记录其中的define到其_defineMap。如果shaderDefines(一般来自于着色器Shader或着色器程序Program)和_defineMap中属性为ON重合,则会形成一条有效的define。osg/State.cppstd::string State::getDefineString(const osg::ShaderDefines& shaderDefines){ ..
2020-05-16 07:52:01 516
原创 osgEarth的Rex引擎原理分析(一一二)每帧会重复生成着色器程序吗
目标:(一一一)中的问题198一般是不会的,但是着色器程序状态改变的话还是会的。着色器程序的状态用其中的着色器向量来表示,如果着色器向量的长度和其中的内容没有变化,就认为着色器程序的状态没有变化。着色器程序在创建完成后,会放入缓存,下一个帧循环从缓存中取出使用即可,如果缓存中不存在才会再次生成着色器程序。这也说明可以在程序运行时动态地向着色器程序添加着色器代码。1、着色器程序写入缓存osgEarth/VirtualProgram.cppvoidVirtualProgram::apply
2020-05-16 07:19:57 538
原创 osgEarth的Rex引擎原理分析(一一一)着色器上下文环境的准备过程
目标:(一一零)中的问题197osg/Shader.cppShader::PerContextShader* Shader::getPCS(osg::State& state) const{ if( getType() == UNDEFINED ) { OSG_WARN << "Shader type is UNDEFINED" << std::endl; return 0; } if (..
2020-05-15 07:01:00 575
原创 C++学习(八十二)std set map元素顺序
1、set的元素顺序set中存放的为数(整数,浮点数......),在set中会按从小到大排列这些数set 中存放的为string,存入的string会按字母表顺序排列至于存放类的话,还可以自己定义排列规则2、map的元素顺序为了实现快速查找,map内部本身就是按序存储的(比如红黑树)。在我们插入<key, value>键值对时,就会按照key的大小顺序进行存储,默认是升序(less)。template < class Key, class T, class Co
2020-05-15 06:18:05 1368
原创 osgEarth的Rex引擎原理分析(一一零)state中_defineMap构建过程
目标:(一零九)中的问题195是在绘制过程中,每经过一个状态集StateSet就会将该状态集中的模式、属性、一致变量、定义都放入State的相应变量中。定义都放入_defineMap.osg/State.cppvoid State::pushStateSet(const StateSet* dstate){ pushModeList(_modeMap,dstate->getModeList()); pushAttributeList(_attribu.
2020-05-13 06:49:52 364
原创 osgEarth的Rex引擎原理分析(一零九)19级瓦片分辨率估算
目标:(一零八)中的问题194rex的瓦片分级为0、1、...、19第0级角度分辨率 180°第1级角度分辨率 180°/2...第19级角度分辨率 180°/2^19=0.00034332275390625°每个瓦片默认像素为256*256,则每个像素的角度分辨率为180°/2^19/256=0.0000013411045074462890625°,在赤道位置,地球半长轴简单取6400km,则每个像素的长度分辨率为:6400*(180°/2^19/256*3.14/18
2020-05-12 06:16:05 1464
原创 openGL之API学习(一一七)预编译指令
预处理指令以#开头,#号之前不能有除了空白字符之外的任何字符。每一个指令独占一行。 预处理指令只能使用上面列出的指令,使用其他未定义指令会报错。完整的预处理器指令如下:##define#undef#if#ifdef#ifndef#else#elif#endif#error#pragma#extension#version#line下面的这个操作符也是合法的:#define and #undef这两个和C++中的用法完全一样,不做过多说明#if, #ifde
2020-05-11 06:36:36 690
原创 osgEarth的Rex引擎原理分析(一零八)章节目录
目标:(一零七)中的问题1911、导论2、三棵树场景树、状态树、渲染树3、资源调度4、着色器5、设计模式6、实战应用待继续分析列表:9、earth文件中都有哪些options((九)中问题)10、如何根据earth文件options创建不同的地理信息引擎节点((九)中问题)11、rex地理信息引擎的四梁八柱((九)中问题)12、osgEarth::TerrainEngineNode中setMap方法作用((十二)中问题...
2020-05-11 06:00:22 472
原创 osgEarth的Rex引擎原理分析(一零七)rex的状态树和渲染树
目标:(一零六)中的问题1901、状态树rex|terrain----------|surface|layer|RenderLeaf2、渲染树Stage|bin|Layer待继续分析列表:9、earth文件中都有哪些options((九)中问题)10、如何根据earth文件options创建不同的地理信息引擎节点((九)中问题)11、rex地理信息引擎的四梁八柱((九)中问题)12、osgEarth::TerrainEng...
2020-05-10 18:12:39 505
原创 osgEarth的Rex引擎原理分析(一零六)术语定义
目标:(一零五)中的问题189VirtualProgram:虚拟着色器程序,之所以是虚拟的,是因为它是osgEarth用来组织着色器代码的,而不是GPU的,最终虚拟的着色器程序会转换为GPU使用的真正的着色器程序。使用虚拟着色器程序可以让用户更加专注于着色器程序的开发上,避免陷入与GPU交互的不必要的细节问题解决上。Morph:渐变或混合。主要用于高程和影像的均匀过度处理。...
2020-05-05 07:15:05 774
原创 osgEarth的Rex引擎原理分析(一零五)如何将文字变为图片
目标:(一零四)中的问题187QSize size(200,200); //指定图片大小;QImage image(size,QImage::Format_ARGB32); //以ARGB32格式构造一个QImage,//image.fill(qRgba(0,0,0,100));//填充图片背景,120/250为透明度QPainter painter(&image...
2020-05-04 07:44:58 533
原创 osgEarth的Rex引擎原理分析(一零四)rex如何在地球上绘制一张图片
目标:(一零三)中的问题186借鉴例子osgearth_annotation.cpp,这不是直接在瓦片上绘制的,因为它压住了瓦片上的边界线。应当是rex球渲染完成后在渲染的。和绘制一个几何图形,设置几何图形的问题没有什么区别。 osgEarth::Annotation::ImageOverlay* imageOverlay = 0L; osg::ref_ptr<osg...
2020-05-03 07:49:59 1156 1
osgAndroidExampleGLES2重新组织TestNativeCPlusPlus
2021-06-19
NVIDIA_Nsight_Tegra_Release_3.6.19217.7511.exe
2021-02-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人