
D3D
文章平均质量分 68
萧戈
从事视频方向的开发
展开
-
D3D绘制精确到屏幕上每一个像素
如果此时我们设置好窗口的视口区域,比如为(x,y,width,height)。经过上面的设置,D3D就知道应该将图像的left对应到视口的x, top对应到视口的y ,right对应到视口的x+width, bottom对应到视口的y+height.此时视口中的每一个像素都可以经过透视变换的逆向变换到对应3D中间中的某个点。由此我们知道在3D空间中指定的区域只是图像的边界,left位置对应的是视口中最左边那一列像素的左边界,right位置对应的是视口中最右边那一列像素的右边界(top/bottom同上)。原创 2023-08-02 10:34:12 · 313 阅读 · 0 评论 -
3d空间中pan,tilt,roll和pitch,yaw,roll的对应关系
通常用于表示在垂直方向上的旋转,如摄像机向上或向下倾斜,以观察不同高度的物体。通常用于表示在垂直方向上的旋转,如摄像机向上或向下倾斜,以观察不同高度的物体。通常用于表示水平方向的旋转,如摄像机水平旋转以观察不同方向的场景。通常用于表示水平方向的旋转,如摄像机水平旋转以观察不同方向的场景。Roll(滚转):绕垂直于视线的Z轴旋转。在三维空间中,pitch(俯仰)、yaw(偏航)和roll(滚转)分别表示三个轴上的旋转。在三维空间中,pan(横摇)、tilt(俯仰)和roll(滚转)分别表示三个轴上的旋转。原创 2023-04-20 15:31:08 · 6876 阅读 · 0 评论 -
HLSL 常用函数
如果函数 ddx 的参数为 myVar,该参数对应的像素点记为p(i,j),则 ddx(myVar)的值为“像素点 p(i+1,j)的值减去myVar”(ddy同理)tex3Dproj(s, t) 把纹理当做一张幻灯片投影到场景中,先使用投影纹理技术需要计算出投影纹理坐标t(坐标t.w除以透视值),然后使用投影纹理坐标进行查询。ex1Dproj(s, t) 把纹理当做一张幻灯片投影到场景中,先使用投影纹理技术需要计算出投影纹理坐标t(坐标t.w除以透视值),然后使用投影纹理坐标进行查询。转载 2023-02-07 15:04:10 · 1139 阅读 · 0 评论 -
HLSL 常用函数
https://zhuanlan.zhihu.com/p/365958893原创 2023-02-03 15:43:19 · 121 阅读 · 0 评论 -
关于NVIDIA G-SYNC,你应该知道的一切
G-SYNC是NVIDIA为了解决游戏中画面撕裂问题而开发的一种显示器画面自适应同步技术。它可以看作是垂直同步技术的升级版,解决了垂直同步技术高延迟、帧数不足时产生卡顿的问题。它的竞品是AMD的FreeSync它需要显示器与显卡同时支持才能开启正在上传…重新上传取消画面撕裂 VS 画面不撕裂画面撕裂 VS 画面不撕裂可以看到画面撕裂是非常影响游戏观感的,而显示器画面同步技术可以解决这个问题。转载 2022-09-09 14:42:44 · 8518 阅读 · 0 评论 -
通过StretchRect测试纹理贴图性能
机器:刘玉麒笔记本,ASUS ExpertBook,使用的集成显卡:Intel(R) Lris(R) Xe Graphics。原创 2022-08-23 11:27:43 · 346 阅读 · 0 评论 -
nvidia 3d vision kit + opengl + 立体视觉程序开发
近来一周一直在看opengl + 3d vision kit 的编程开发方法,国内基本没有,因为3d vision kit只支持d3d的全屏的程序。只有满足是D3D+FULLSCREEN,才会由红外发射端发射同步信号到shutter glass,眼睛端。国内的信息很少,除了一篇写的D3D的,利用Nvidia漏洞的, 其实那文章内容里面的东西,nvidia自己都已经在GTC09的会议上写出来过,并不算是什么破解之类。而google相关内容也很少,所以我想写下来,方便有需要的人士。硬件需求1. nvidia转载 2021-12-27 19:03:58 · 942 阅读 · 0 评论 -
NV 3D Vision
在程序中使用NV 3D Vision多年前NVIDIA就发布了3D Vision技术,能提供多种立体渲染的效果。随着2009年的电影阿凡达所带来的世界性3D狂潮,你是否也想在自己的程序中加入立体渲染呢?3D Vision的原理根据3D Vision and Surround Technology | NVIDIA Developer,3D Vision的原理如下:在驱动内部,所有3D场景都渲染两次——一次用左眼,一次用右眼。驱动会自动“在线”修改典型的3D游戏vertex shader,所转载 2021-12-27 18:59:47 · 1139 阅读 · 0 评论 -
关于SetTexture()调用引起显存泄露的问题
项目中遇到一个问题,添加了GPU特技后,播放多次就会出现申请显存失败的问题,并且使用GPU-Z查看显存,也是在不断增加,于是断定是由于显存泄露造成的,仔细检查代码,发现在调用LPDIRECT3DTEXTURE9的Release时,返回值为1而不是0,这样的话实际上DX并没有真正释放显存,而只是将其引用计数减一,结果造成了显存泄露。问题在于DX的文档中只是说明了在调用LPDIRECT3DTEXTURE9的GetSurfaceLevel()接口时会增加引用计数,实际中我的代码在做GPU特技中并没用调用该接口,最转载 2021-04-12 17:42:37 · 267 阅读 · 0 评论 -
D3D9 创建多屏的全屏程序
1.D3D9 一个Device只能创建一个全屏交换链,所以如果要创建多个全屏窗口,需要创建多个Device.2.创建全屏Device的时候,IDirect3D9::CreateDevice方法的hFocusWindow窗口句柄必须指定为焦点窗口。所有全屏Device共用焦点窗口,但是D3DPRESENT_PARAMETERS里面的hDeviceWindow必须使用自己各自的窗口。关于如何创建多屏的全屏程序有几片文章可以参考:https://stackoverflow.com/questions.原创 2021-01-19 11:48:43 · 618 阅读 · 1 评论 -
总结各种RGB转YUV的转换公式
最近在学习视频的颜色空间转换,由于摄像机拍出来的视频很多都是用YUV格式保存的,而颜色空间的转换必须在RGB颜色模型上才能完成,所以第一步自然就是将YUV颜色模型转成RGB颜色模型。在网上查到了许多的YUV与RGB互转的公式,但是总觉得有些杂乱,没有系统的总结。首先说一说YUV颜色模型,单单就YUV颜色模型来说,就有很多中叫法,而且总是让人颇感困惑。一般来讲,我们把YUV、Y`UV、YCbCr, YPbPr包含在YUV颜色模型的范围内,其中Y都表示亮度,UV表示两个色度分量,但是具体的颜色模型的用途又各转载 2020-08-07 17:06:47 · 2528 阅读 · 1 评论 -
测试D3D压缩纹理进显存的速度
硬件环境:NVIDIA GeForce 1050 ti视频:手上有一个hap-q的视频,大小为:5760*4320。通过CPU解码出来以后,数据大小为:24883200(字节),相当于RGBA裸数据的1/4.1.通过D3DXLoadSurfaceFromMemory函数加载这个数据需要38ms.2.通过cuda将同样大小数据送入显存只需要:7ms.测试结果:...原创 2020-07-25 16:02:10 · 455 阅读 · 3 评论 -
使用GDI/GDI+绘制到D3D9缓冲区的方法
这个其实是3D绘图里嵌入2D绘图的传统方式。D3D9直接使用GDI/GDI+就可以画图,只不过需要额外的设置,而且只支持RGB和XRGB,不支持ARGB。因此这种方法比较适合合成UI元素和不透明的纹理贴图,不适合将要进行AlphaBlend操作的纹理贴图。ARGB贴图的合成要通过手动上传Gdiplus::Bitmap来实现。使用GDI+画图的步骤:创建设备dev时,需要pp->F...转载 2020-03-25 19:56:47 · 1544 阅读 · 2 评论 -
垂直同步到底要不要开?老司机教你G-Sync显示器的正确打开姿势
一直以来我们都认为PC的画面效果取决于显卡,认为游戏的FPS值越高代表游戏越流畅,但实际上,显示器也是决定游戏帧数的重要一环。显卡将画面渲染并输出到显示器中,显示器接收GPU的信号并输出。然而,因为显卡性能和运行程序的差异,显卡一般无法以恒定的速率渲染画面,但显示器却是以固定频率来刷新(刷新率=每秒刷新画面数量)。我们假设一游戏的FPS值为100,即显卡渲染一帧需要10ms(1s=1000ms...转载 2019-08-02 14:28:31 · 70127 阅读 · 0 评论 -
g-sync显示器到底能提升多少游戏性能?
显卡与显示器的分工一直以来我们都认为PC的画面效果取决于显卡,其实不然,显卡与显示器分工明确,各司其职,共同负责画面效果。显卡:显卡将画面渲染并输出到显示器中,但不是用统一速率渲染。显示器:显示器负责接收GPU的信号,以固定频率刷新(刷新率就是每秒刷新多少画面),然后输出。FPS值与画面效果FPS值就是每秒帧数,传统意义上来讲,游戏的FPS值越高代表游戏越流畅,本质上FPS值主...转载 2019-08-02 14:27:35 · 2084 阅读 · 0 评论 -
Direct 2D与Direct 3D 11协同工作
https://www.jianshu.com/p/efb44c3e373chttps://blog.youkuaiyun.com/x_jun96/article/details/80760532转载 2019-03-20 19:00:27 · 277 阅读 · 0 评论 -
SHADER的动态组合
Shader是很奇怪的代码,它的长度受到限制,它的动态分支能力很弱,它的指令很昂贵,这些都使得你很难使用一个单一的Shader来处理所有的渲染要求.而各种渲染要求的种类如此之多,如果要为每一种渲染类型都写一段专一的代码的话,那会是一件非常吃力的活,假设我们现在要写一个材质系统,我们希望它能够支持各种效果.你会发现随着支持的效果越来越多,需要写的Shader的数量会急剧上升,比如: *.一开...转载 2018-12-11 10:01:44 · 439 阅读 · 0 评论 -
Shader中if和for的效率问题以及使用策略
本文转自:https://www.sohu.com/a/219886389_667928先放结论:if和for确实有效率问题(相比CPU下的情况),但是通常情况无法回避,也就无需处理。 用step代替if,大部分情况是无优化或者负优化,只在一些个别情况下有少量的提升。 可以用Shader变体来取代一些只和固定参数有关的if,但这只是为了减少if自身的成本(if和里面执行的表达式毕竟也是...转载 2018-12-10 16:33:50 · 7350 阅读 · 0 评论 -
gdi和direct截屏
gdi截屏// TTTest.cpp : 定义应用程序的入口点。//#include "stdafx.h"#include "TTTest.h"#include <stdio.h>LPVOID screenCaptureData=NULL;HBITMAP hBitmap;HDC hDDC;HDC hCDC;int nWidth;int nHeight...转载 2018-10-10 09:09:02 · 971 阅读 · 0 评论 -
dxva 解码视频
最近由于项目的需要,花时间研究了一下dxva。下面对dxva 的解码API 做一个简单介绍。dxva的大致解码过程如下:调用DXVA2CreateDirect3DDeviceManager9函数获取到IDirect3DDeviceManager9接口的一个对象。 调用 IDirect3DDeviceManager9::OpenDeviceHandle 函数获取到一个Direct3D 设备...原创 2018-09-30 15:31:50 · 7990 阅读 · 4 评论 -
DXVA 处理交错视频
最近在项目中遇到了交错视频,视频显示的时候会出现横纹的现象。如下图:如果对交错视频的知识不是很了解,可以参考下面两篇博文:交错、反交错与IVTC —— 从入门到放弃去交错原理介绍为了让交错视频正常显示,可以通过ffmpeg的滤镜,dxva 等技术来解决。由于我们的项目对性能要求比较高,所以我这里是通过dxva来处理的(dxva是调用GPU处理,ffmpeg的滤镜是通过CPU来处...原创 2018-09-28 20:06:27 · 3556 阅读 · 1 评论 -
交错、反交错与IVTC —— 从入门到放弃
我在对视频进行反交错处理的时候,发现中文网络上难以找到系统讲解交错原理以及简明扼要指导如何利用MeGUI/AVS进行IVTC/反交错的文章。网上找到的大多都是神仙讨论天书笔记,许多概念也纠缠在一起……所以斗胆在这里整理一个入门级的介绍,也作为自己的参考资料。不欢迎一切转载。一、隔行扫描与逐行扫描为了更好地说明交错,得先从传送图像的原理讲起。在传送电视图像的时候,...转载 2018-09-20 16:29:07 · 5079 阅读 · 1 评论 -
VS2015编译MPC-HC源码
已经验证下面的方法可以编译通过,如果觉得麻烦,可以直接下载我已经编译通过的代码,程序编译完成以后,需要将一些依赖的库文件(用MPC-HC的安装包安装完成以后,可以从里面获取依赖文件)拷贝到编译目录下面。拷贝完依赖库以后就可以启动播放器了。MPC-HC源代码下载(已经编译通过)1.编译 mpc-hc.sln2.编译mpciconlib.sln3编译mpcresources.sln...原创 2018-08-30 14:58:14 · 1503 阅读 · 0 评论 -
YUV和RGB调节色彩公式
1.YUV调节色彩公式(必须是量化后的YUV(16-235)),非量化后的YUV转换有问题。转换公式为:原始YUV(Y,U,V),转换后YUV(Y',U',V'),亮度 :g_Bright (0-1),饱和度:g_Saturation(0-1),对比度:g_Contrast (0-1)Y' = (g_Contrast * 2.0 * (Y - 0.5) + 0.5) * g_Satu...原创 2018-08-29 10:57:43 · 2416 阅读 · 0 评论 -
Unity Shader-后处理:简单的颜色调整(亮度,饱和度,对比度)
版权声明:欢迎转载,共同进步。请注明出处:http://blog.youkuaiyun.com/puppet_master https://blog.youkuaiyun.com/puppet_master/article/details/52423905 好久没坚持写blog了,是时候开始撸一波新博文了!学习Unity有一段时间了,关于Shader的书也看了几本《Unity Shader入门精要》,《Unity...转载 2018-08-29 10:44:05 · 6103 阅读 · 0 评论 -
图像RGB2YUV与YUV2RGB格式互转介绍
1 YUV格式与RGB格式说明 由于不同国家的电视信号系统支持的图像格式不同,有YUV格式成像,也有RGB格式成像,因此为了保证兼容性,需要进行RGB与YUV格式的互转。另外YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式,需要将RGB格式转为YUV格式。而当图像进行后期显示时,又需要将YUV转换为RGB域。2 RGB格式转为YUV格式转换公式 ...转载 2018-08-28 19:32:38 · 2790 阅读 · 0 评论 -
颜色空间转换
BT601和BT709由于在处理相机实时图像数据时,需要将相机采集的YUV数据转换为RGB,根据GPUImage的源码看到是有三种转换矩阵用于将YUV数据转换成RGB数据,分别是// BT.601, which is the standard for SDTV.GLfloat kColorConversion601Default[] = {1.164, 1.164, 1.164,...转载 2018-08-21 19:41:45 · 2709 阅读 · 0 评论 -
专业的谈谈0~255,16~235的产生和历史及合理设置,专业叫法Y/C伸张压缩
电视机产生的历史比PC显示器悠久,这是人都该知道的。TV的诞生伴随着时代的局限性,首先是黑白电视机诞生的最早,为了讨好黑白电视机用户,彩色电视机必须兼容黑白电视机,注意:诞生彩色电视机的时候,全地球公民都在用黑白电视机,你敢和他们对抗?全部抛弃黑白电视机用户?P.S. QQ好像也是这么个一回事...因此二个可恶的东西诞生了,首先彩色电视机的彩色信号必须压缩,研究人员们讨巧的截去了最不敏感的色彩信息...转载 2018-08-21 10:34:08 · 5384 阅读 · 0 评论 -
游戏怎么设置独立显卡运行
地址链接:https://jingyan.baidu.com/article/c275f6ba616e83e33d756780.html转载 2018-07-31 14:36:47 · 9117 阅读 · 0 评论 -
读取D3D后备缓冲区的数据
不能够读取D3D后备缓冲区的数据? [复制链接] hs_491 电梯直达 1楼 发表于 2006-5-15 17:57:00 | 只看该作者 游戏程序 平台类型: 程序设计: 编程语言: 引擎/SDK: ...转载 2018-07-23 15:56:32 · 813 阅读 · 0 评论 -
DX9偏移0.5像素,是0.5/每个纹理的宽度吗?
DX9偏移0.5像素,是0.5/每个纹理的宽度吗? [复制链接] yxandyx电梯直达1# 发表于 2012-1-11 10:14:48 | 只看该作者 在PS用计算出来的UV去访问纹理的时候,需要进行 UV.xy+=float2(0.5f/TextureWidth,0.5f/TextureHeight);这样的操作吧?如果采样两张不同的纹理,而这两张纹理的Size是不一样的。这个时候,UV....转载 2018-04-27 15:25:38 · 753 阅读 · 0 评论 -
为什么在2D渲染时primitive的位置需要偏移0.5,但3D渲染时不用
为什么在2D渲染时primitive的位置需要偏移0.5,但3D渲染时不用 [复制链接] increase8269电梯直达1# 发表于 2010-5-3 10:49:55 | 只看该作者 在 DirectX SDK document ("Mapping Texels to Pixels")中说在2D渲染时为将纹理像素值映射到屏幕中去,为了取得一对一的效果,primitive的位置需要偏移0.5,...转载 2018-04-27 15:24:01 · 933 阅读 · 0 评论 -
D3D9 3D渲染图像变模糊
我用一张800*600的BMP图片作为纹理贴到800*600分辨率的全屏屏幕上,但是图像出现了一定的模糊,不能保持和原图一致,但是在DDRAW下则可以保持和原图一致,请问高手这是为什么呀?高质量的3D LIC矢量纹理生成算法发表于: 2004-06-21 09:28:57 楼主对我有用[0] | 丢个板砖[0] | 引用 | 举报 | 管理回复次数:20优快云推荐DA转换器原理及其在波形产生方面...转载 2018-04-27 15:16:36 · 2742 阅读 · 0 评论 -
DirectX 性能优化
1.只在必须的时候Clear。 IDirect3DDevice9::Clear函数通常需要花费较多的时间,因此要尽量少调用,而且只清空的确需要清空的缓存。 2 尽量减少状态切换。并且将需要进行的状态切换组合在一起设置。 状态包括RenderState,SamplerState,TextureStageState等 3 纹理尺寸尽可能小 4 从前至后渲染场景中的对象 从前至...转载 2018-04-04 21:35:42 · 1713 阅读 · 0 评论 -
D3D如何做多线程异步资源加载?
D3D如何做多线程异步资源加载? fg5823820电梯直达1# 发表于 2011-12-28 20:19:35 | 只看该作者 其实我现在用的引擎是HGE,这里貌似是3D引擎板块,不知道会不会被砍掉。虽然HGE是2D引擎,但底层是D3D的。玩过尘埃2的一定知道,尘埃2在加载的时候会有各种动画让你不至于在加载的时候干等。于是我对这样的技术很感兴趣,假如不是很吃内存的游戏,那么在当前关卡进行时就加...转载 2018-04-04 18:18:01 · 1065 阅读 · 0 评论 -
获取屏幕分辨率和刷新率
1.Windows API方式: DISPLAY_DEVICE displayDevice; displayDevice.cb = sizeof(DISPLAY_DEVICE); if (EnumDisplayDevices(NULL, adapter, &displayDevice,0)) { DEVMODE devMode; if (EnumDisplaySettings(disp...原创 2018-03-30 18:08:04 · 6391 阅读 · 0 评论 -
D3D中数据从显存、内存相互拷贝的时间对比
显存到内存(分辨率) 缩放时间(stretchRect) LockRect(调用GetRenderTargetData,空) LockRect(用memcpy复制数据) 400*300 0 15~17 ms 数据已经到内存,此项无效 800*600 0 16~18 ms 数据已经到内存,此项无效 1920*1080 0...原创 2018-03-26 15:05:08 · 3905 阅读 · 2 评论 -
NVIDIA显卡如何设置多显卡方案
多显卡技术是能将多个显卡联立一起工作的技术,联立的显卡各分担一部分工作量,总体的处理效能会得到提升。目前的多显卡技术有NVIDIA SLI以及AMD CrossFire技术,两者有共同之处也有不同。本篇经验主要介绍如何利用NVIDIA SLI技术配置N卡多显卡方案,也会指出一些需要注意的问题。工具/原料支持SLI技术的主板支持SLI技术的显卡(本篇以2个为例)SLI桥接器GPU-Z软件(可选)一、...转载 2018-03-16 15:15:27 · 17575 阅读 · 0 评论 -
D3D纹理混合方式
D3DTOP_DISABLE: 禁用纹理层颜色输出.D3DTOP_SELECTARG1:将该纹理层的第一个混合参数直接输出.对于D3DTSS_COLOROP,则输出由 D3DTSS_COLORARG1指定的第一个表示RGB的参数;对于D3DTSS_ALPHAOP,则输出由D3DTSS_ALPHAARG1指定的第一个表示ALPHA的参数.D3DTOP_SELECTARG2:同上.D3DTOP_MOD...转载 2018-03-14 10:38:45 · 760 阅读 · 0 评论 -
Direct3D中的纹理应用示例
本文列举了Direct3D中各种纹理应用实现:黑暗贴图,发光贴图,漫反射映射贴图,细节纹理,纹理混合,有较详尽的注解。其中黑暗贴图,发光贴图,细节纹理都是采用多重纹理的方法实现(也可以采用多次渲染混合实现)。示例代码使用Beginning direct3D game programming中的框架,省去不少事情,可以专注纹理话题。代码:点此下载下面来看代码与效果:正常的纹理贴图效果:正常的纹理贴图...转载 2018-03-09 15:18:08 · 344 阅读 · 0 评论