- 博客(32)
- 资源 (2)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 C#读取TIFF文件
1 什么是TIFF?TIFF是Tagged Image File Format的缩写。在现在的标准中,只有TIFF存在, 其他的提法已经舍弃不用了。做为一种标记语言,TIFF与其他文件格式最大的不同在于除了图像数据,它还可以记录很多图像的其他信息。它记录图像数据的方式也比较灵活, 理论上来说, 任何其他的图像格式都能为TIFF所用, 嵌入到TIFF里面。比如JPEG, Lossless JP...
2019-03-09 13:43:10
8671
6
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 TIF图像文件的读取(c++代码)
原文地址:https://blog.csdn.net/liurong_cn/article/details/8039282一 TIF图像介绍 TIFF是最复杂的一种位图文件格式。TIFF是基于标记的文件格式,它广泛地应用于对图像质量要求较高的图像的存储与转换。由于它的结构灵活和包容性大,它已成为图像文件格式的一种标准,绝大多数图像系统都支持这种格式。&n...
2019-03-08 17:51:56
5279
原创 Filament学习笔记——ComponentManager
在Filament的Engine类中,有几个ComponentManager: FRenderableManager mRenderableManager; FTransformManager mTransformManager; FLightManager mLightManager; FCameraManager mCameraManager;这几个Manager是用来管理Component的,它们都有一个成员变量mManager。例如: enum { C
2022-03-20 20:53:15
903
原创 VolumeRendering(二) 在体绘制中添加不透明物体
上次的Demo做了一个单独的体绘制效果,稍微改动下就可以做一些很基础的三维标量数据可视化了。我们在渲染海洋标量场的时候,有时候需要加上个地形之类的东西,这个地形是不透明的,有时会穿插在数据区域中,比如一些岛屿。这次我们在场景中加一点不透明的物体。其关键是要在最后的颜色输出处加上一个opaqueVisiblity * opaqueColorreturn min(volumetricColor, 1.0f) + opaqueVisiblity * opaqueColor;opaqueVisiblity
2021-10-07 15:09:28
501
原创 VolumeRendering(一) 光线步进 RayMarching
这边文章中的代码主要参考:Volumetric Raymarching Sample这个Demo中的例子比较复杂,使用SDF生成动态烟雾效果,添加了光照。但在医学领域或其他学科中,我们只是用体绘制来对三维标量场进行可视化,并不需要这么复杂的光照。其中光源可以省略,也不需要复杂的SDF生成烟雾的模型,我们只需要一个立方体就可以了。所以,我写了下面这个demo,便于理解和学习。Volume Rendering By Ray Marching代码如下:#define LARGE_NUMBER 1e20
2021-10-06 14:41:43
929
原创 C++11笔记——右值、移动构造函数、std::move、emplace_back
右值没有姓名的东西移动构造函数对右值进行浅拷贝,右值对象中的指针直接赋值给新的对象,然后将右值对象的指针赋NULLstd::move将左值转化成右值,以便调用移动构造函数class A{public: A(){ m_ptr = new int(0); }; A(A&& a){//移动构造函数 m_ptr = a.m_ptr;//浅拷贝 a.m_ptr = NULL;//右值对象的指针指向空 //若没有右值引用的概念,我们就没法在这里改变右值a的m_ptr
2021-07-13 17:06:40
381
原创 法线的切线空间
一个原点和三个构成正交基的向量构成一个坐标系。顶点的法向量如何表示?可以保存该法向量在切线空间中的坐标切线空间的原点就是顶点的位置,构成切线空间正交基的三个向量被称为T、B、N其中N的方向是该顶点的原始法向量(根据其所在的三角形面片决定)T是该顶点的一条切线,方向是纹理坐标uB由T和N叉乘得到因为N方向(z)上的值恒为正,法线纹理仅保存x,y...
2021-07-09 14:39:52
242
原创 OpenGL笔记
1.渲染管线1)将顶点保存到缓存对象将顶点数据保存到OpenGL管理的一块内存中2)发送到OpenGL服务端调用绘制命令如glDrawArrays()3)顶点着色器4)细分着色器5)几何着色器6)图元装配7)剪切(clipping)8)光栅化9)片元着色器10)逐片元操作深度测试、模板测试写入帧缓存(若开启融混则以叠加的方式写入)2.着色器1)矩阵是列主序的先填充列,再填充行mat3 M1 = mat3(1.0, 2.0, 3.0, 4.0,
2021-07-08 14:32:18
237
原创 C++计算函数执行时间
为优化程序,想知道程序中哪个函数消耗时间最长,自己写了个计算程序执行时间的代码,简单好用#include<ctime>#include<string>#include <iostream>class Timer{ clock_t startT; std::string label;//计时内容:有多个计时的时候用于区分 bool isEnd;//是否已经手动结束计时public: Timer(std::string name =
2021-02-19 11:34:09
2569
2
原创 LoopSubdivision in Unity
代码在这可保留UV信息可支持Unity自带Cube暂不能支持Submesh运行程序,按键盘D键进行细分,按一次细分一次
2020-12-10 20:02:39
150
原创 错误 LNK2005 xxx已经在 xxx.obj 中定义
写了一个main.cpp一个Singleton.h和一个Singleton.cppSingleton.h#pragma onceclass Singleton{public: static Singleton* GetInstance() { if (m_Instance == nullptr) m_Instance = new Singleton(); return m_Instance; }private: Singleton(){} static Singleto
2020-06-03 21:49:38
12982
8
原创 同步通信和异步通信
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。(阻塞)异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。(不阻塞)...
2020-01-10 08:56:56
328
原创 为自己的Unity程序编写注册功能
思路:1.客户打开程序,程序自动在注册表中寻找注册信息,若未注册,则读取机器码,在界面上显示出来;2.用户将机器码发送给开发者,开发者对机器码进行加密,变成注册码,将注册码发送给客户;3.客户将注册码填入,程序自己也生成一个注册码和用户填入的进行比对,如果一致则将注册信息写入注册表,注册完成!注册界面:我把它做成一个单独的场景,方便添加到各个工程里。这是注册码生成器用户把机器码发...
2019-09-02 15:57:32
1478
原创 C# Socket编写局域网聊天室(客户端)
编写完服务器端后就可以开始写客户端的代码了我们创建一个Windows窗体应用 来实现客户端首先是界面包括一个richTextBox作为聊天的对话框一个TextBox作为聊天内容的输入框一个TextBox用来输入服务器IP,默认为本机ip一个TextBox用来输入用户名称,对话框中的每条信息前都会显示发送该信息的用户的名字一个Connect按钮连接服务器一个Disconnet按钮中...
2019-08-29 12:00:48
959
原创 C# Socket编写局域网聊天室(服务器端)
服务器端需要的引用包括:using System.Net;using System.Net.Sockets;using System.Threading;首先要创建Socket,将其绑定到本机的ip地址,给它一个端口号。然后开始监听什么是ip地址和端口号?每一个计算机都有一个ip地址。通过ip地址可以在网络中访问到计算机。注:计算机通过不同的连接方式上网会获得不同的ip,这是因为计...
2019-08-29 11:27:09
1136
翻译 解析Unity函数调用顺序
原文:https://docs.unity3d.com/Manual/BestPracticeUnderstandingPerformanceInUnity1.html启动Unity启动时,有两个方法(函数)比较重要,它们耗时较多。上面的截图是在iOS设备上运行一个示例程序时,通过软件Instruments得到的,它记录了Unity启动时访问的方法。在特定平台上才有的startUnity方...
2019-07-30 15:46:56
420
原创 Unity脚本生命周期
Awake()只要脚本存在就会被调用可以在这里初始化public成员,也可以在Start()中初始化OnDestroy()删除脚本时调用,之前会调用OnDisable()OnEnable()激活----打钩则调用一次激活后需要重置的操作放在这里OnDisable()取消激活----取消勾选时调用Start()第一次调用Update()之前会调用Start(),一生中只调用一次...
2019-07-24 16:22:22
142
原创 排序算法总结
首先总结1.冒泡排序(依次比较/交换相邻的两个元素,进行多趟)一趟冒泡:(n-1次比较)1跟2比较,交换;2跟3比较,交换;3跟4比较,交换。。。。。。最后得到一个最值放在末尾处,然后它就不动了。对剩下的n-1个元素进行第二趟:(n-2次比较)1跟2比较,交换;2跟3比较,交换;3跟4比较,交换。。。。。。得到一个最值放在倒数第二个位置,不动了。对剩下的n-2个元素进行第三趟:(n-...
2019-03-27 16:42:56
149
原创 OpenGL与FreeImage
使用FreeImage库读图片,通过OpenGL显示出来先介绍一些FreeImage的基本函数/* 得到图像格式函数 FREE_IMAGE_FORMST fif = FreeImage_GetFileType(filename); 读图像函数 FIBITMAP *dib = FreeImage_Load(fif, filename, 0); 写图像函数 FreeImage_Sa...
2019-03-15 15:40:55
495
原创 等宽字体
等宽字体:1.Bitstream Vera Sans Mono;2. Clean;3. Courier;4. Fixed;5. Gothic;6. Lucidatypewriter;7. Mincho;8. Nil;9. Terminal;10. Nimbus;11. Mono L
2019-03-10 12:23:21
788
原创 VS2017+OpenGL环境配置
最终创建好的项目可以在这里获取:链接:https://pan.baidu.com/s/1XXn3LWHooRNWfYRTnj5CMQ提取码:ef95这是一个64位的项目。下面是创建过程:1.新建一个文件夹OpenGLWin2.打开VS2017,新建空项目OpenGLWin3.新建源文件main.cpp4.在解决方案文件夹(有.sln文件的文件夹)中新建文件夹glew5.在...
2019-03-09 16:21:22
1471
原创 C++11多线程(四)future<T> 和 async
future< T > 和 async 提供了一种接受线程返回值的方式普通线程只能通过全局变量或者指针、引用来获取线程的返回值其使用方式为:future<T> result = async(para);//如果不使用引用,会在主线程里调用三次构造函数result.get();其中T 为返回参数类型para和构造普通线程的参数类似,不同的是,第一个参数可以选...
2019-03-08 17:16:51
365
原创 C++11多线程(三)condition_variable、wait()、notify_one()
1. call_once()call_once()的第二个参数是一个函数名funcall_once()的功能是可以保证这个函数fun()只会被调用一次call_once()具有互斥量的功能,但消耗的资源更少。call_once()需要与标记std::once_flag结合使用。std::once_flag mFlag;call_once(mFlag, CreateInstance);...
2019-03-07 17:46:14
689
原创 C++单例类最好的写法(支持多线程)
单例类某个类只能有一个对象,即为单例class A{}...A a1;A a2;//这就不是单例,不能有第二个对象下面是一个常用的C++单例类的形式:class S{private: S() {} //私有构造函数,单例类不能通过普通放方式构造对象private: static S* m_Instance; //指向该类唯一的对象的指针public: sta...
2019-03-07 15:59:40
1591
原创 C++11多线程(二)互斥量mutex、lock_gurad、unique_lock和lock()
1)锁住的东西越少,执行效率越高2)只读的数据,不需要互斥;又读又写的数据块,才需要使用互斥量1,互斥量mutex看下面的例子,类A中有两个函数 inMessage()和outMessage(),我们把它们作为线程的入口函数,开两个子线程。这两个子线程操作共享数据m_Queue。需要一个互斥量 m_Mutex。#include&amp;amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;amp;gt;#i
2019-03-06 19:32:49
584
原创 C++11多线程(一)线程入口、传参、join()和detach()
1)锁住的东西越少,执行效率越高2)只读的数据,不需要互斥;又读又写的数据块,才需要使用互斥量unique_lock只能锁一个互斥量,一个互斥量只能上一个unique_lock只能转移,不能复制。adopt lock前提:互斥量已经加了锁作用:初始化一把锁try to lock前提:互斥量未加锁作用:初始化一把锁,尝试锁,不会阻塞defer lock前提:互斥量未加锁作用:...
2019-03-06 15:01:22
509
原创 OpenGL顺序无关的透明(OIT)大型链表法
1.初始化创建2D image用一个2D image来储存各个像素链表的头指针创建Pixel Unpack Buffer用一个PBO来刷新2D image创建原子计数器用一个原子计数器来记录pixel个数创建一维缓存用一个一维缓存来存储片元数据渲染刷新Image中的head指针刷新原子计数器...
2018-11-28 17:43:41
2305
原创 OpenGL图像(image)
在OpenGL中,图像(image)类似于一个矩阵,代表一块内存,我们在着色器中可以对它进行读写操作。它有点像单一层级的纹理,但与纹理不同,它不支持滤波、深度比较等采样操作。1.用纹理texture作为image的存储空间Shader中选择 image1D、image2D、image3D。。。GLuint tex;glGenTextures(1, &amp;amp;amp;amp;tex);glBindText...
2018-11-20 18:08:42
5418
原创 OpenGL顺序无关的透明(OIT)加权平均法
有了OpenGL渲染到帧缓存对象(FBO)和OpenGL纹理的基础,就可以用加权平均法(WA)做顺序无关的透明度(OIT)了加权平均法Pass0 PixelShader关闭深度测试,每一个像素上可能是由 i 个颜色叠加起来的,我们把它们全被加起来,记录在一张纹理(Color)上vec3( r1, g1, b1 ) * Alpha1 + vec3( r2, g2 ,b2 ) * A...
2018-11-20 12:38:42
4021
2
原创 OpenGL渲染到帧缓存对象(FBO)
窗口系统提供的帧缓存是唯一可以被图形服务器的显示系统所识别的帧缓存。也就是说,我们要想在屏幕上看到东西,就必须把它画在这个窗口系统提供的帧缓存中。1. 创建n个帧缓存对象idvoid glGenFramebuffers(GLsizei n,GLuint* ids);2.创建帧缓存对象并切换到当前帧缓存void glBindFramebuffer(GLenum target, GLuin...
2018-11-19 18:48:24
1073
原创 OpenGL纹理
void glGenTexture(GLsizei n, GLuint ids);*创建n个纹理idvoid glBindTexture(GLenum target, GLuint id);把指定纹理对象与当前启用的纹理单元以target的形式进行绑定target为 GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D。。。例如要把当前的GL_TEXTURE...
2018-11-18 18:13:41
954
DataManager.rar
2021-10-16
C# winForm Socket局域网聊天室.zip
2019-08-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人