- 博客(52)
- 资源 (28)
- 收藏
- 关注
原创 games101 作业5
为屏幕坐标,注意最后需要根据左右手和 窗口坐标系和屏幕坐标系的y轴反向,加上相应的正负号。最终,image plane 中的 每个像素的世界坐标减去观察点eye_pos(0,0,0) ,然后归一化,即可得到光线的方向。由于z值已知,所以在推算的过程中可以不考虑z值。但是,FrameBuffer 是窗口坐标系中,而光线是世界坐标系中的。第二种方式,Moller Trubmber 算法,这种方式可以一次计算出 t以及交点在重心坐标系中的坐标值。中,局部坐标到窗口坐标的变换,进行逆变换就可以了。
2025-03-01 23:33:57
890
原创 git命令收集
强制子模块恢复到主项目所记录的特定版本。强制丢弃所有修改,和仓库代码一致。每个子模块 重置到最新节点。清除每个子模块未跟踪的文件。
2025-01-07 17:09:04
272
原创 OpenGL 着色器程序的保存和加载(二进制)
为了提高OpenGL 着色器程序的编译和链接速度,我们可以将程序保存为二进制进行加载,可以大幅度提升加载效率。
2023-12-08 10:33:48
560
原创 games101 作业2
注意:顶点坐标都是浮点数,但是我们计算出的包围盒必须是整型。左上角下取整,右下角上去整。因为我们判断的是一个像素的中心点是否在三角形内部,所以需要给x,y 分别加0.5,即。只需要计算出三角形的三个顶点坐标中,x最大最小值,y最大最小值。注意:如果当前z值小于深度缓冲区的深度值,一定要更新深度缓冲区。最常用最高效的有两种:重心坐标法和向量叉积。插值运算使用代码框架,所以这块比较简单。其实方法有很多种,具体可以参考这个。中存放的就是三角形的三个顶点。
2023-09-17 23:16:33
1408
原创 games101作业1
观察变换完成后,将物体投影到相机坐标系中。然后在相机坐标系中进行投影变换:正交投影或者透视投影。绕Y轴的旋转矩阵( 注意这里的sin符号和其他两种情况不同,是因为右手坐标系,从+x->+z旋转,Y轴和拇指方向相反)都是正值进行推导的,同时,glm的透视投影中还进行了NDC坐标转换,而NDC坐标系是左手坐标系。透视投影可以看作是将视锥体的大端进行压缩成长方体视窗体。注意:需要将角度转为弧度。此时投影矩阵就算推到完毕,但是投影接口的参数是:张角。课程中还讲到了绕X 轴的旋转矩阵。根据课程中的推导过程:其中。
2023-09-02 18:36:13
301
原创 games101-windows环境配置(CMake+vcpkg+VS2019)
在windows 下配置games101的作业环境,使用vcpkg+cmake+vs2019
2023-08-20 17:33:14
701
原创 颜色空间/格式转换:HSL-RGB
颜色空间--HSL定义转换HLSL 实现本文章主要介绍HSL颜色空间和RGB颜色空间的区别和用途,以及如何利用HLSL着色器语言进行互转。定义HSL即色相、饱和度、亮度(英语:Hue, Saturation, Lightness)。色相(H)是色彩的基本属性,就是平常所说的颜色名称,如红色、黄色等。可以说和光谱对应。取值为0-360度。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),亮度(L),取0-100%。如图所示,圆柱从低向上,表示亮度,由中轴向
2022-05-17 14:44:26
3956
3
原创 DirectX11-流输出阶段
流输出阶段我们通过渲染管线的流输出阶段让GPU将几何着色器输出的顶点集合写入到指定的顶点缓冲区,如下图所示。1.用来接收流输出的顶点集合的顶点缓冲区描述符需要指定D3D11_BIND_STREAM_OUTPUT绑定标记。比如 // 设置顶点缓冲区描述 D3D11_BUFFER_DESC vbd; ZeroMemory(&vbd, sizeof(vbd)); vbd.Usage = D3D11_USAGE_DEFAULT; // 这里需要允许流输出阶段通过GPU写入 vbd.ByteW
2022-05-13 14:30:13
505
原创 DirectX 11共享纹理加锁
共享纹理使用场景:当硬解码的纹理跨两个device对象(对应一张显卡)传递,比如解码是device1,渲染是device2,此时需要通过共享纹理将解码得到的纹理先拷贝到共享纹理上,然后获取纹理句柄,将该句柄传递给渲染的device2,渲染的device2打开该句柄就可以得到一个纹理进行采样渲染了。具体步骤如下:1.获取解码的纹理。ID3D11VideoDecoderOutputView* srcSurface = (ID3D11VideoDecoderOutputView*)(uintptr_t)f
2022-04-28 20:09:56
3331
4
原创 DirectX-BasicEffect
BasicEffect 的主要功能1.管理/修改常量缓冲区的内容,并应用(Apply)变更 :BasicEffect::Impl(变换矩阵,纹理资源,常量参数)2.编译HLSL着色器而不是fx文件 (InitAll:CreateVertexShader)3.管理/使用四种渲染状态4.切换渲染模式(涉及到渲染管线各种资源的绑定、切换)5.仅更新修改的变量所对应的常量缓冲区块整个过程,BasicEffect 是一个单例,接口的调用需要传入设备上下文。外部调用就需要关心常量缓冲区 着色器 渲染状态
2022-02-22 16:29:00
171
原创 c++获取系统时间
#include <chrono>unsigned long long getLocalTimeUs() // us{ typedef std::chrono::time_point<std::chrono::system_clock, std::chrono::microseconds> microClock_type; //获取当前时间点,windows system_clock是100纳秒级别的(不同系统不一样,自己按照介绍的方法测试),所以要转换
2022-01-05 11:29:23
911
原创 DirectX 3D中的混合
D3D中的混合指的是目标像素(后台缓冲)与源像素(光栅化像素)混合(blend)输出的过程。一、影响最终的混合后输出结果的因素有个:混合因子,混合方法。1)混合因子混合因子共有15个。注意:有些混合因子以_COLOR结尾,有的以_ALPHA结尾。其中以_COLOR结尾的混合因子不能用于APPHA混合方程混合因子分为源混合因子,目标混合因子。区别在于,前者指定的是源像素的比例,后者指定的是目标像素的比例。2)混合方法混合方法有5中,一般常用的就是加、减、乘。3)混合因子与混合方法的常用组合
2021-12-16 09:29:44
2576
原创 贝塞尔曲线打断生成两个贝塞尔曲线
问题:如何将一个三阶贝塞尔曲线打断生成两个三阶贝塞尔曲线,生成的两条贝塞尔曲线与原来的贝塞尔曲线重合?输入:一条贝塞尔曲线的四个控制点P1,C1,C2,P2,和一个打断点E(E在曲线上)输出:两条贝塞尔曲线:P1,F,I,EE,J,H,P2解决大致分为两步第一步:求出E点对应的贝塞尔曲线的参数e第二步:根据e计算出四个控制点F,I,J,H依次多个点打断,红色线表示原始贝塞尔,蓝色线是打断的两个贝塞尔曲线,效果如下:蓝色线和红色线基本重合。原理解析:如图的红色曲线就是原始贝塞尔曲线,加入
2021-10-28 11:16:05
1245
2
原创 DirectX 3D 绘制纹理
绘制纹理基于上一节绘制简单矩形的流程,绘制纹理只需要修改和补充以下几点1.着色器加入纹理、纹理坐标信息和采样器//头文件Cube.hlsliTexture2D g_Tex : register(t0);SamplerState g_SamLinear : register(s0);struct VertexIn{ float3 posL : POSITION; float2 tex : TEXCOORD;};struct VertexOut{ float4 posH
2021-09-22 21:41:02
423
原创 DirectX 3D 简单渲染流程
阅读了 龙书网页版前六章,通过渲染一个三角形,总结渲染的最简步骤。创建窗口。创建设备和上下文。创建交换链和渲染视图。创建顶点着色器。创建并绑定输入布局。创建片段着色器。创建顶点、索引、常量缓冲区,并填充和绑定。设置图元拓扑(图元类型)。将着色器和常量缓冲区绑定到渲染管线。清空渲染视图。绘制呈现转到步骤10....
2021-09-17 11:04:10
2037
原创 并行任务串行执行
多线程 :并行任务串行执行#mermaid-svg-CuNURoDGeOsz9g8s .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-CuNURoDGeOsz9g8s .label text{fill:#333}#mermaid-svg-CuNURoDGeOsz9g8s .node rect,#mermaid-
2021-09-01 16:13:05
417
原创 时间格式化为QString
QString date = QString(("%1:%2:%3")).arg(hours,2, 10, QLatin1Char('0')) .arg(minutes,2, 10, QLatin1Char('0')).arg(senconds,2,10, QLatin1Char('0'));
2021-06-11 15:34:49
661
1
原创 C++ 生产者消费者
#include <queue>#include <condition_variable>#include <mutex>#include <thread>#include <windows.h>using namespace std;queue<int> buffer;condition_variable m_notFull;condition_variable m_notEmpty;mutex mtx;void
2021-06-01 20:59:20
258
原创 c++ 获取函数调用时间间隔
static SYSTEMTIME sys; static WORD before; static WORD cur; GetLocalTime(&sys); cur = sys.wMinute * 60 + sys.wSecond * 1000 + sys.wMilliseconds; std::cout << "updateFrame internal:" << cur - before << std::endl...
2021-05-21 16:23:13
435
原创 CMake 配置 HLSL文件 属性
set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/HLSL/Video_VS.hlsl PROPERTIES VS_SHADER_FLAGS "/Fh \"$(OutDir)%(Filename).cso\"" VS_SHADER_TYPE Vertex VS_SHADER_MODEL 5.0 VS_SHADER_ENTRYPOINT main)set_source_files_properties(${CMAKE_CURRENT_LIST_DIR
2021-05-19 12:01:23
810
原创 QComboBox 利用model存放用户自定义数据
QComboBox 利用QStandardItemModel 存放用户自定义的结构体QStandardItemModel* model = new QStandardItemModel();struct myData { int x; int y; QString name; };std::map<std::string, myData> city = { {"001",{1,2,"xi'an"}}, {"002",{2,3,"beijing"}} };for (auto it =
2021-05-13 15:24:47
2583
原创 OpenGL 几何知识
一 、引言二 、坐标系以及变换三、向量什么是向量向量的提出向量的运算运算的物理意义和几何意义四、矩阵五、齐次坐标六、平移旋转缩放七、变换1.线性变换和非线性变换线性空间中的变换:正交变换酉变换(幺正变换)相似变换几何中的变换:保角变换仿射变换射影变换 (平行投影和透视投影)拓扑变换七、三维旋转1.欧拉角2.四元数...
2021-03-15 14:25:04
360
原创 QML 自定义控件集合
QML 自定义控件将日常使用的控件进行优化和扩展1.可两端对齐的Textimport QtQuick 2.15import QtQuick.Window 2.12import QtQuick.Controls 2.15import QtQuick.Layouts 1.3ApplicationWindow { visible: true width: 600 height: 400 title: qsTr("Hello World") color: "gr
2021-01-28 11:27:21
480
原创 QML ScrollView 实现Flick功能
import QtQuick 2.12import QtQuick.Window 2.12import QtPositioning 5.2import QtQuick.Controls 2.15import QtQuick.Layouts 1.3Window { visible: true width: 640 height: 480 title: qsTr("Hello World") color: "#2E2F30"// Flicka.
2020-11-19 17:40:42
818
原创 QSGNode 类结构
QSGNode 类结构参考文档#mermaid-svg-8wBsMu6Ed8ZlzY44 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-8wBsMu6Ed8ZlzY44 .label text{fill:#333}#mermaid-svg-8wBsMu6Ed8ZlzY44 .node rect,#merma
2020-08-18 18:11:06
914
1
原创 自定义QLineEdit,限制n个字符,一个中文相当于两个字符
#ifndef LINEEDIT_H#define LINEEDIT_H#include <QWidget>#include<QLineEdit>namespace Ui {class LineEdit;}const unsigned DEFAULT_MAXCHARS = 10;class LineEdit : public QLineEdit{ ...
2019-06-14 21:35:19
1340
OpenGL加载Obj模型和纹理贴图
2023-05-27
ffmpeg 命令行工具 ffmpeg ffplay ffprobe
2023-01-29
SelectListView.qml (QML ListView 多选)
2019-10-16
WPS二次开发接口.rar
2019-09-10
ffmpeg-20181202-72b047a-win64-static.zip
2019-08-29
K-Lite_Codec_Pack_1509_Standard.exe
2019-08-02
HTML5Point_SDK_4.2.96 (1).exe
2019-07-31
LearnOpenGL-master.zip
2019-03-07
assimp-3.3.1.tar.gz
2019-03-07
SSD-Tensorflow-demo.py
2018-01-11
python-3.5.2-embed-amd64.zip
2018-01-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人