c++
文章平均质量分 73
__Christopher
c++无所不能
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
OpenGL学习笔记:Bloom 泛光
以下来自learnopengl.com网站的总结一 概念强光区域很难向观察着传达一种强光范围,显示器有限制。光照的模糊或者泛光效果,是一种通过后处理的效果。泛光是光源周围泛着的一篇区域。二 原理在OpenGL中,作者这样实现:让光源(立方体)拥有超过1的颜色值(HDR),将其渲染到颜色缓冲区。然后,以此颜色缓冲区作为纹理,取样时,设置一个阈值,超过阈值的部分,说明光照强度很大,就是需要泛光的部分。三 实现在教程中,作者用双颜色缓冲实现,即,设置多渲染对象。过程上就..原创 2021-12-27 10:36:55 · 1026 阅读 · 0 评论 -
OpenGL Framebuffers Object:帧缓冲区对象详解
帧缓冲区对象 FrameBuffers Object(FBO)一 概念===============================================================迄今为止,我们使用了好几种屏幕缓冲区:颜色缓冲区,深度缓冲区,模板缓冲区。 这些缓冲区存储在GPU的内存中,称为帧缓冲区(framebuffer). OpenGL允许我们创建自己的帧缓冲区。以前的渲染是这样:在渲染缓冲区顶部有一个默认的帧缓冲区(default framebu...原创 2021-12-04 19:46:38 · 1877 阅读 · 0 评论 -
OpenGL MSAA:抗锯齿技术详解
抗锯齿 anti-aliasing一 概念有时候OpenGL渲染出来的物体,其边缘会出现锯齿,显得很不丝滑。说白了,使物体在渲染时保持边缘丝滑而不出现锯齿的技术,就叫做抗锯齿。常用的技术是SSAA和MSAA,MSAA是SSAA的演进技术,全称是多采样点抗锯齿 multisampler anti-aliasing,本文主要介绍MSAA.二 MSAA原理片段着色器携带顶点数据运行时,将数据插入到像素的中心,MSAA随后使用一个很大的的带有设置了子采样点的深度/模板缓冲去选择哪些子采样点被覆盖,然原创 2021-12-04 11:38:49 · 3137 阅读 · 0 评论 -
c++ 高并发服务器详解
本文列举两个c++并发服务器,并尝试分析其中语法,若有错误,还望指正。这里不讨论socket和c/s架构,只对服务器端做分析。服务器处理任务的大体流程是: 服务器启动线程,开始等待和接收任务,处理任务,退出线程。接收任务时,任务被添加在全局的一个队列,被所有线程共享,这时就考虑一个同步。如果任务队列为空或者太满,还需要考虑线程池的容量大小。这不禁让人想起了经典的生产者—消费着模式,生产者生产一个任务,消费者耗费一个任务,很类似,大概流程如下草图所示:这里用到了互斥量锁,条件变量,..原创 2021-11-09 10:27:02 · 3928 阅读 · 0 评论 -
opengl:纹理单元 ( 详解 glUniform1i 和 glGetUniformLocation 的使用)
本文讨论纹理单元(texture unit)的使用,以及和着色器之间的关系。使用纹理的过程大概是这样的:1 从硬盘加载texture到内存,获取texture's ID// 1 创建纹理对象获取IDglGenTextures(1, &textureID);// 2 绑定纹理缓冲区设置属性glBindTexture(), glTexImage2D(), glGenerateMipMap() , glTexParameteri()等函数2 在内存中通过uniform varia原创 2021-03-08 01:53:54 · 8109 阅读 · 0 评论 -
openGL学习笔记:着色器的理解,以及geometry shader的用法
在跟着learnopengl的教程(https://learnopengl.com/Advanced-OpenGL/Geometry-Shader)学习几何着色器(geometry shader)的时候,遇到了一些理解问题,现在解决了,记录一下。当然中文我也不知道叫啥,但也差不多吧(希望不要差太多)。在我今天学到进度里,关于着色器的学习有三种,vertex shader, fragment shader, geometry shader,着色器的作用是write data to the GPU ca原创 2021-03-07 02:17:03 · 1284 阅读 · 0 评论 -
创建OpenGL的第一个窗口
#include <glad.h>#include <glfw3.h> #include <iostream>#define WS_WIDTH 800#define WS_HEIGHT 600void framebuffer_size_callback(GLFWwindow* window,int width,int height);void processInput(GLFWwindow *window);int main(){ glf.原创 2021-02-28 20:21:03 · 160 阅读 · 0 评论 -
openGL学习笔记:封装glut的一些函数
入了openGL的坑的同学们大家好...我今天学习了下纹理,用glGenTextures函数时无法返回有效的id,搞了白天总算明白,如果在glutInit之前调用gl系列的函数,是无效的,顺序一定要注意!openGL系列的函数我都给封起来了,这样方便自己学习和理解openGL系列的函数使用流程。COpenGLWindowCtrl类封装openGL系列的一些初始化函数CTextureCtrl类用来加载和调用纹理对象SetTexture全局函数用来设置加载哪个纹理(一定要在glInit之后调用,原创 2021-02-27 20:49:28 · 517 阅读 · 0 评论 -
MFC:C/C++导入导出csv/excel文件
本来以为把MFC里CFileDialog类的文件类型选择变量szFileters加个 *.xlsx 这样的类型,就可以导入导出xlsx了,但是完全是想当然啊(没试过你永远不知道结果是否是预期的!)本文目的旨在用纯c/c++代码导入导出csv/excel等格式文件!话不多说,首先创建一个类似这样的窗口,在文件菜单设置子菜单 导入和导出这里需要知道csv和excel文件的区别:csv文件是以逗号分隔的纯文本文件,而excel文件带有格式,这就决定了我们需要用不同方法导入或者导出。所以在导入/原创 2021-02-22 03:42:00 · 6430 阅读 · 17 评论 -
使用MFC的CFileDialog类导入导出csv/excel文件
1 首先创建一个MFC应用,选择 单个文档,Mfc标准项目名为FileSaveOpen2 去掉无用的.h .cpp文件这一步要求精简窗口,方法很多,我的方法是把无关的view,doc,frame等文件全删除,只留下theApp所在的文件。然后在此基础上,编写自己的窗口类(用的是模态对话框+系统菜单的组合方式)1 首先, InitInstance()函数内:把p_mainFrame ShowWindow()之类的都删掉,这部分是框架换成下面的,为了清晰,我把系统自带的...原创 2021-02-20 21:43:34 · 2051 阅读 · 0 评论 -
.dll的制作和显示调用
虽然windows下的动态链接库有不止一种调用方式,但是既然叫做动态链接库,还是毕竟喜欢随用随调。dll的生成:1 VS下创建项目 Win32控制台应用程序2 添加对应的.h .cpp文件3 .cpp里包含头文件,.h文件里的函数声明前面加上 extern "C" __declspec(dllexport)extern "C" __declspec(dllexport) double Add(double a, double b);像写正常的c函数一样,区别就是这是生成.dll.原创 2021-02-19 22:18:08 · 288 阅读 · 0 评论 -
C语言输入缓冲区实例详解:如何从键盘读取指定的字符串长度
昨天接触了一下用户登录,发现从键盘读取数据到缓冲区,再保存到程序变量这个过程,还是需要格外注意,因为一不小心,就容易读取错误。下面用getchar函数说明一下:getchar()函数函数原型:int getchar(void)函数功能:从标准输入 stdin 获取一个字符函数返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符使用场景: 用户登录时,输入用户名和密码,程序将数据保存到变量,用来进行显示,验证等其他操作下面是用户结构体://用户结构体,...原创 2021-02-08 16:15:01 · 1274 阅读 · 0 评论 -
C++2节:C++动态内存分配,引用,四种类型转换
C++对内存的控制和管理严格到令人发指的地步,所以关于动态内存,关于new/delete运算符,一定要十分熟悉!C++中的new/delete和C中malloc/free区别也要明白。C++的动态内存分配1 回顾C语言中动态内存分配1)分配:malloc()/calloc()/realloc()2)释放:free()3)错误处理:返回值2 C++使用new/delete运算符分配内存1)分配:new/new[]2)释放:delete/delete[]3)错误处理:异常(后面讲)原创 2021-02-04 17:22:43 · 332 阅读 · 0 评论 -
C++1节:C++的介绍,命名空间,类型,四种函数
练习: 1.从键盘得到日程信息并最终输出。 每个日程包含小时数(0--23)和内容两部分 不要求排序 2.对结果进行排序/* 结构体练习*/#include <stdio.h>#include <string.h>struct month { char name[10]; int days;};int main() { struct month months[12]; char *...原创 2021-02-02 10:45:20 · 495 阅读 · 0 评论 -
如何用Json::Value和Json::Reader分析Json格式的数据
Jsoncpp是一个用来处理 Json文本的开源C++库,最近需要分析服务器的Json格式数据,所以,学习了一下。下面就简单介绍使用Jsoncpp的Json::Reader和Json::Value来分析数据。Json::Value操作有点像数组,先回忆下C/C++里的数组。数组的定义是内存存储类型相同的连续的内存空间,其定义方式如下:数组类型名 数组名[元素个数];以上是一维数组,二维数组可看作是每个元素都是一个一维数组的一维数组,其定义如下:数组类型名 数组名[元素分组个数][每组..原创 2021-01-29 16:16:29 · 13784 阅读 · 1 评论
分享