- 博客(32)
- 资源 (4)
- 收藏
- 关注
原创 ubuntu VTK报错: GLEW could not be initialized : Unknown error
某些ubuntu版本默认使用wayland协议,glew不支持。
2024-10-23 17:37:58
456
转载 欧拉角与四元数互转,及四元数slerp球面线性插值算法
1. 欧拉角与四元数是什么?roll:翻滚角,pitch:俯仰角,heading:航向角roll、pitch、heading,这3个角又称为欧拉角,欧拉角是弧度。弧度与度°可以通过公式转换;四元数:w,x,y,z,有 xx+yy+zz+ww = 1欧拉角与四元数可以互转,四元数插值完在转回欧拉角,对于航向角突变的情况会更准确;Math.toDegrees(eulerAngles.roll); // 弧度转角度 Math.toRadians(roll); // 角度转弧度 roll 范
2021-11-19 16:20:18
1927
1
原创 实现透明效果时,开启深度测试,关闭深度写入
同一个场景,同时存在透明和不透明物体,存在各种遮挡关系。正常渲染流程:渲染不透明物体时,开启深度测试和深度写入,开启渲染透明物体时,开启深度测试,关闭深度写入。两种状态,互相切换。 深度测试与开启就3种情况:(以下透明物体称为A,不透明物体称为B)1、始终开启深度测试和深度写入(默认状态) 此时,如果A在前,B在后,深度测试时,B不能通过测试,B的像素直接被丢弃,因此B不能参与混合,也就不能实现透明效果。2、渲染透明物体时,直接...
2021-11-12 18:30:09
3724
2
原创 成员函数模板的实现
class Float3{public: Float3(float x, float y, float z) { this->x = x; this->y = y; this->z = z; } template<class T> Float3 operator*(const Float3& obj) { return Float3(x*obj.z, y*obj.z, z*obj.z); }private: float x; f.
2021-11-03 11:14:04
279
原创 CImageList::GetImageInfo取到的bitmap不能用
开发过程中遇到一个问题,CImageList::GetImageInfo取到的HBITMAP不能直接使用,比如取颜色值都是空的。IMAGEINFO info;m_comboColor.GetImageList()->GetImageInfo(index, &info);//HBITMAP hbmp = info.hbmImage;//必须复制一份再进行操作,否则取不到值HBITMAP hbmp = (HBITMAP)CopyImage(info.hbmImage,IMAGE_B
2021-07-01 15:25:13
311
1
原创 创建纯色bitmap和替换bitmap颜色
1、替换bitmap颜色//-------------------------------------------------------------------------------// ReplaceColor//// Author : Dimitri Rochette drochette@coldcat.fr// Specials Thanks to Joe Woodbury for his comments and code corrections//// Includes
2021-06-30 17:27:23
1113
原创 是否可以手动调用析构函数
答案是可以。但是有个误区要注意。虽然可以手动调用析构函数,但是对象的内存并没有释放。看一下代码示例:#include "stdafx.h"#include <iostream>#include <crtdbg.h>#ifdef _DEBUG#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)#endifusing namespace std;class A{public: A() { cout <
2021-04-02 17:25:54
5237
2
原创 C++ 虚函数与纯虚函数
虚函数与纯虚函数 在他们的子类中都可以被重写。它们的区别是:(1)纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码。纯虚函数一般没有代码实现部分,如virtual void print() = 0;而一般虚函数必须要有代码的实现部分,否则会出现函数未定义的错误。virtual void print(){ printf("This is virtual function\n"); }(2)包含纯虚函数的类不能定义其对象,而包含虚函数的则可以。如果子类想要实例化,纯虚
2020-11-25 10:28:44
847
原创 进程间通讯SendMessage
PostMessage貌似只能用于进程内通讯,不同进程间通讯可以用SendMessage和共享内存等方式。这里理出SendMessage的用法,方便日后查阅。发送消息的进程代码:const UINT messageID = RegisterWindowMessage("SingletonApplication");char szTemp[1024] = { 0 };sprintf(...
2020-02-03 14:15:35
920
原创 网络读取字符串
#define MAXBLOCKSIZE 40960string utf8_to_gbk(const char* utf8){ if (!utf8) return ""; wchar_t* widechar = NULL; char* multibyte = NULL; int length = 0; length = ::MultiByteToWideChar(CP_UTF8,...
2019-10-24 16:53:12
213
原创 判断点是否在多边形内
bool CCourTourTransition::point_in_polygon(const Vector2d &pt,const std::vector<Vector2d>& polygon){ int i,j = static_cast<int>(polygon.size())-1 ; bool oddNodes=false; dou...
2019-10-20 15:55:20
197
原创 读取tiff和shp
#include "stdafx.h"#include "read_tif.h"#include "gdal\include\gdal_priv.h"#include "gdal\include\ogr_spatialref.h"#include "gdal\include\ogrsf_frmts.h"#include "kernel_service\service\COM_Servi...
2019-10-20 10:59:07
1001
转载 gdal解析tif
bool HandleTif::ReadTif(){ //tif文件读取 std::string name = "D:\\XX\\xx.tif"; const char *charName = name.c_str(); //注册 GDALAllRegister(); //以防中文名不能正常读取 CPLSetConfigOption("GDAL_FILENAME_IS_UTF8"...
2018-12-04 09:58:22
3270
2
转载 MarkDownPad2实用教程及MarkDown常用语法
MarkDownPad2实用教程前言:为什么使用MarkDown来写文章呢?已经在使用的人应该知道答案,对于我个人来说,是因为它可以减少我的重复工作。因为我拥有自己的个人博客和优快云博客,还有自己的公众号,每次在有道云笔记里写一遍,然后需要排版两次,费时费力,终于让我找到了这款神器。Q:为什么使用markdownpad2?大家都说是windows平台上最好用的markdown编辑器,虽然我只试用...
2018-07-13 11:02:34
2862
1
转载 wstring和string到底有啥区别
在中国,wstring的存在主要是因为有汉字。typedef basic_string<char, char_traits<char>, allocator<char> > string;typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> &g...
2018-07-12 17:13:15
2100
转载 c++字符前面的L和_T
字符串前面加L表示该字符串是Unicode字符串。_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,Visual C++里边定义字符串的时候,用_T来保证兼容性。VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。以下是别人的总结:一、在字符串...
2018-07-12 17:06:28
1857
1
原创 C语言32位系统下基本类型数据所占字节数
char :1个字节 short int : 2个字节 int: 4个字节 unsigned int : 4个字节 float: 4个字节 double: 8个字节 long: 4个字节 long long: 8个字节 unsigned long: 4个字节char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) 所有类型的指针变量都是...
2018-07-12 16:29:28
7107
原创 C++二叉排序树代码实现
以下是C++控制台程序,实现了二叉排序树的创建和遍历,仅是练习的小程序,分享一下。#include "stdafx.h"#include <iostream>using namespace std;//二叉树节点struct BiTree { int data; BiTree* lchild; BiTree* rchild;};int main(){ BiTree* InsertBST...
2018-07-12 10:06:03
1123
原创 C++单链表的实现
下面是自己写的C++控制台项目,包括单链表的一些常规操作的实现,仅作练习使用,分享一下。#include "stdafx.h"#include <iostream>struct ListNode{ int data; ListNode* next;};typedef ListNode LNode;typedef ListNode* LinkList;int main(){ //函数声明...
2018-07-06 10:25:53
406
原创 C++在一个类中定义另一个有参数构造函数的类的对象
class A{public: A( int i ){}};class B {public: B():a(1){} //或:B( int i ):a( i ){ }。对a提供参数一定要按 //这种形式,在冒号后,不能在花括号里面!private: A a;};void main(){ B b;}注意: 在B中定义 A a...
2018-07-03 11:51:54
11565
2
转载 Boost:shared_memory_object --- 共享内存
什么是共享内存共享内存是最快速的进程间通信机制。操作系统在几个进程的地址空间上映射一段内存,然后这几个进程可以在不需要调用操作系统函数的情况下在那段内存上进行读/写操作。但是,在进程读写共享内存时,我们需要一些同步机制。考虑一下服务端进程使用网络机制在同一台机器上发送一个HTML文件至客户端将会发生什么:服务端必须读取这个文件至内存,然后将其传至网络函数,这些网络函数拷贝那段内存至操作系统的内部内...
2018-06-29 14:42:30
3536
原创 C++加载lib和dll的方法
C++加载lib的方法:方法1、直接添加lib项目的引用方法2、在属性—连接器—输入—里添加要使用的lib,在连接器—常规—附加库目录添加lib的目录C++加载dll的方法(参考网址https://www.cnblogs.com/woshitianma/p/3681745.html)一、先介绍dll导出要使用的函数的方法。dll中导出函数有两种方法:1、在函数声明中加上__declspec(dll...
2018-06-27 11:43:48
5276
原创 初始化DirectX遇到的问题
获取接口IDirect3D8指针这个接口主要用于获取硬件设备信息,并且创建接口IDirect3DDevice9。获取IDirect3D9的代码十分简单,如下所示:IDirect3D8 *pD3D = nullptr;pD3D = Direct3DCreate8(D3D_SDK_VERSION);Direct3DCreate8函数返回一个IDirect3D8的指针,如果创建失败会返回NULL,它...
2018-06-25 15:24:00
1993
原创 C#PeerToPeer(对等网络P2P)实例
在 .NET Framework 3.5以上的.Net框架, System.Net.dll 程序集中添加了System.Net.PeerToPeer 命名空间,它提供了轻松创建对等 (P2P) 应用程序所需的核心构建基块。该命名空间是根据典型的 P2P 应用程序的三个阶段而设计的,即:发现、连接和通信。发现阶段负责动态定位对等点及其相关的网络位置。连接阶段负责在对等点之间建立网络连接。而通信阶段则...
2018-06-12 15:47:43
6302
原创 WebSocket通讯C#实例
建立C#控制台程序的服务器端,需要安装C#WebSocket的启动插件:Fleck。插件安装方法:选中新建的项目,打开菜单项目-管理NuGet程序包,然后浏览搜索Fleck,安装。源码github地址:https://github.com/statianzo/Fleck浏览器端:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional/...
2018-06-07 10:38:08
458
转载 设计模式合成复用原则
合成/聚合复用原则是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。简述为:要尽量使用合成/聚合,尽量不要使用继承。聚合表示弱的拥有关系,比如班级与学生,合成表示强的拥有关系,比如人和四肢合成/聚合和继承都能实现代码复用的目的,那为什么要尽量使用合成/聚合呢?1、合成/聚合的好处:(1) 新对象存取成分对象的唯一方法是通过...
2018-06-01 15:58:16
574
原创 C# 通过委托和事件实现消息的发布与订阅
当A事件发生后,执行B事件,则称B订阅A。代码:using System;namespace test{ class TestDelegateAndEvent { static void Main(string[] args) { TriggerClass tr = new TriggerClass(); Subs...
2018-06-01 15:11:10
4372
原创 C#Socket通讯步骤小结
server端:1、新建serversocket2、给serversocket绑定ip和端口Bind3、侦听serversocket.Listen4、获取clientsocket=serversocket.Accept5、发送消息clientsocket.Send6、接收消息clientsocket.Receiveclient端:1、新建clientsocket2、连接server,clients...
2018-06-01 14:14:26
615
原创 静态网页与动态网页
在服务器端不修改代码的前提下通过一定操作可以修改内容的网页就是动态网页,反之就是静态网页。ASP(Active Server Page)、PHP(PHP: Hytext Preprocessor(递归缩写))可以制作动态网页,但这两种技术制作的是服务器端的网页,客户端也可以实现动态网页,比如使用<script>标签可以编写javascript代码,实现动态网页。...
2018-05-31 17:39:07
227
原创 面向对象三大特性
一、封装每个对象包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来进行自己的操作。将方法、属性、字段包装在类中,通过实例化类来生成对象。封装的好处:1、好的封装能减少耦合2、类内部的实现可以自由修改3、类具有清晰的对外接口封装就像建房子,类就是房子,属性是门窗,字段是房子里的东西,方法是人的行为。属性对字段有保护作用,防止字段被随意的修改或读取。二、继承对象的继承代表一...
2018-05-31 17:08:53
1359
ColorCombo.tar
2021-07-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人