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 · 230 阅读 · 0 评论 -
3d空间中pan,tilt,roll和pitch,yaw,roll的对应关系
通常用于表示在垂直方向上的旋转,如摄像机向上或向下倾斜,以观察不同高度的物体。通常用于表示在垂直方向上的旋转,如摄像机向上或向下倾斜,以观察不同高度的物体。通常用于表示水平方向的旋转,如摄像机水平旋转以观察不同方向的场景。通常用于表示水平方向的旋转,如摄像机水平旋转以观察不同方向的场景。Roll(滚转):绕垂直于视线的Z轴旋转。在三维空间中,pitch(俯仰)、yaw(偏航)和roll(滚转)分别表示三个轴上的旋转。在三维空间中,pan(横摇)、tilt(俯仰)和roll(滚转)分别表示三个轴上的旋转。原创 2023-04-20 15:31:08 · 4411 阅读 · 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 · 824 阅读 · 0 评论 -
HLSL 常用函数
https://zhuanlan.zhihu.com/p/365958893原创 2023-02-03 15:43:19 · 96 阅读 · 0 评论 -
关于NVIDIA G-SYNC,你应该知道的一切
G-SYNC是NVIDIA为了解决游戏中画面撕裂问题而开发的一种显示器画面自适应同步技术。它可以看作是垂直同步技术的升级版,解决了垂直同步技术高延迟、帧数不足时产生卡顿的问题。它的竞品是AMD的FreeSync它需要显示器与显卡同时支持才能开启正在上传…重新上传取消画面撕裂 VS 画面不撕裂画面撕裂 VS 画面不撕裂可以看到画面撕裂是非常影响游戏观感的,而显示器画面同步技术可以解决这个问题。转载 2022-09-09 14:42:44 · 6999 阅读 · 0 评论 -
通过StretchRect测试纹理贴图性能
机器:刘玉麒笔记本,ASUS ExpertBook,使用的集成显卡:Intel(R) Lris(R) Xe Graphics。原创 2022-08-23 11:27:43 · 287 阅读 · 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 · 844 阅读 · 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 · 1006 阅读 · 0 评论 -
关于SetTexture()调用引起显存泄露的问题
项目中遇到一个问题,添加了GPU特技后,播放多次就会出现申请显存失败的问题,并且使用GPU-Z查看显存,也是在不断增加,于是断定是由于显存泄露造成的,仔细检查代码,发现在调用LPDIRECT3DTEXTURE9的Release时,返回值为1而不是0,这样的话实际上DX并没有真正释放显存,而只是将其引用计数减一,结果造成了显存泄露。问题在于DX的文档中只是说明了在调用LPDIRECT3DTEXTURE9的GetSurfaceLevel()接口时会增加引用计数,实际中我的代码在做GPU特技中并没用调用该接口,最转载 2021-04-12 17:42:37 · 242 阅读 · 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 · 550 阅读 · 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 · 2291 阅读 · 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 · 402 阅读 · 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 · 1445 阅读 · 2 评论 -
颜色空间转换
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 · 2598 阅读 · 0 评论 -
Unity Shader-后处理:简单的颜色调整(亮度,饱和度,对比度)
版权声明:欢迎转载,共同进步。请注明出处:http://blog.csdn.net/puppet_master https://blog.csdn.net/puppet_master/article/details/52423905 好久没坚持写blog了,是时候开始撸一波新博文了!学习Unity有一段时间了,关于Shader的书也看了几本《Unity Shader入门精要》,《Unity...转载 2018-08-29 10:44:05 · 5776 阅读 · 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 · 2277 阅读 · 0 评论 -
VS2015编译MPC-HC源码
已经验证下面的方法可以编译通过,如果觉得麻烦,可以直接下载我已经编译通过的代码,程序编译完成以后,需要将一些依赖的库文件(用MPC-HC的安装包安装完成以后,可以从里面获取依赖文件)拷贝到编译目录下面。拷贝完依赖库以后就可以启动播放器了。MPC-HC源代码下载(已经编译通过)1.编译 mpc-hc.sln2.编译mpciconlib.sln3编译mpcresources.sln...原创 2018-08-30 14:58:14 · 1420 阅读 · 1 评论 -
交错、反交错与IVTC —— 从入门到放弃
我在对视频进行反交错处理的时候,发现中文网络上难以找到系统讲解交错原理以及简明扼要指导如何利用MeGUI/AVS进行IVTC/反交错的文章。网上找到的大多都是神仙讨论天书笔记,许多概念也纠缠在一起……所以斗胆在这里整理一个入门级的介绍,也作为自己的参考资料。不欢迎一切转载。一、隔行扫描与逐行扫描为了更好地说明交错,得先从传送图像的原理讲起。在传送电视图像的时候,...转载 2018-09-20 16:29:07 · 4452 阅读 · 1 评论 -
DXVA 处理交错视频
最近在项目中遇到了交错视频,视频显示的时候会出现横纹的现象。如下图:如果对交错视频的知识不是很了解,可以参考下面两篇博文:交错、反交错与IVTC —— 从入门到放弃去交错原理介绍为了让交错视频正常显示,可以通过ffmpeg的滤镜,dxva 等技术来解决。由于我们的项目对性能要求比较高,所以我这里是通过dxva来处理的(dxva是调用GPU处理,ffmpeg的滤镜是通过CPU来处...原创 2018-09-28 20:06:27 · 3022 阅读 · 1 评论 -
dxva 解码视频
最近由于项目的需要,花时间研究了一下dxva。下面对dxva 的解码API 做一个简单介绍。dxva的大致解码过程如下:调用DXVA2CreateDirect3DDeviceManager9函数获取到IDirect3DDeviceManager9接口的一个对象。 调用 IDirect3DDeviceManager9::OpenDeviceHandle 函数获取到一个Direct3D 设备...原创 2018-09-30 15:31:50 · 7545 阅读 · 4 评论 -
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 · 777 阅读 · 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 · 6990 阅读 · 0 评论 -
SHADER的动态组合
Shader是很奇怪的代码,它的长度受到限制,它的动态分支能力很弱,它的指令很昂贵,这些都使得你很难使用一个单一的Shader来处理所有的渲染要求.而各种渲染要求的种类如此之多,如果要为每一种渲染类型都写一段专一的代码的话,那会是一件非常吃力的活,假设我们现在要写一个材质系统,我们希望它能够支持各种效果.你会发现随着支持的效果越来越多,需要写的Shader的数量会急剧上升,比如: *.一开...转载 2018-12-11 10:01:44 · 400 阅读 · 0 评论 -
Direct 2D与Direct 3D 11协同工作
https://www.jianshu.com/p/efb44c3e373chttps://blog.csdn.net/x_jun96/article/details/80760532转载 2019-03-20 19:00:27 · 235 阅读 · 0 评论 -
g-sync显示器到底能提升多少游戏性能?
显卡与显示器的分工一直以来我们都认为PC的画面效果取决于显卡,其实不然,显卡与显示器分工明确,各司其职,共同负责画面效果。显卡:显卡将画面渲染并输出到显示器中,但不是用统一速率渲染。显示器:显示器负责接收GPU的信号,以固定频率刷新(刷新率就是每秒刷新多少画面),然后输出。FPS值与画面效果FPS值就是每秒帧数,传统意义上来讲,游戏的FPS值越高代表游戏越流畅,本质上FPS值主...转载 2019-08-02 14:27:35 · 1612 阅读 · 0 评论 -
垂直同步到底要不要开?老司机教你G-Sync显示器的正确打开姿势
一直以来我们都认为PC的画面效果取决于显卡,认为游戏的FPS值越高代表游戏越流畅,但实际上,显示器也是决定游戏帧数的重要一环。显卡将画面渲染并输出到显示器中,显示器接收GPU的信号并输出。然而,因为显卡性能和运行程序的差异,显卡一般无法以恒定的速率渲染画面,但显示器却是以固定频率来刷新(刷新率=每秒刷新画面数量)。我们假设一游戏的FPS值为100,即显卡渲染一帧需要10ms(1s=1000ms...转载 2019-08-02 14:28:31 · 63137 阅读 · 0 评论 -
决定显卡性能的比较重要的几个参数是什么?
首先不同架构的参数没有比较的意义,比如当初256bit的GTX680吊打384bit的7970(后来农企以驱动翻身获得微弱领先优势),又比如今年256bit的GTX980再次吊打512bit的R9 290X。显卡架构,说得简单一些就是显示芯片各种处理单元的组成和工作模式,在参数相同的情况下,架构越先进,效率就越高,性能也就越强。而同架构的显卡 最重要的看四个地方:流处理器数量、核芯频率、显存、位宽...转载 2018-03-06 18:36:00 · 15026 阅读 · 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 · 2709 阅读 · 0 评论 -
NVIDIA显卡如何设置多显卡方案
多显卡技术是能将多个显卡联立一起工作的技术,联立的显卡各分担一部分工作量,总体的处理效能会得到提升。目前的多显卡技术有NVIDIA SLI以及AMD CrossFire技术,两者有共同之处也有不同。本篇经验主要介绍如何利用NVIDIA SLI技术配置N卡多显卡方案,也会指出一些需要注意的问题。工具/原料支持SLI技术的主板支持SLI技术的显卡(本篇以2个为例)SLI桥接器GPU-Z软件(可选)一、...转载 2018-03-16 15:15:27 · 14220 阅读 · 0 评论 -
Direct3D中的纹理应用示例
本文列举了Direct3D中各种纹理应用实现:黑暗贴图,发光贴图,漫反射映射贴图,细节纹理,纹理混合,有较详尽的注解。其中黑暗贴图,发光贴图,细节纹理都是采用多重纹理的方法实现(也可以采用多次渲染混合实现)。示例代码使用Beginning direct3D game programming中的框架,省去不少事情,可以专注纹理话题。代码:点此下载下面来看代码与效果:正常的纹理贴图效果:正常的纹理贴图...转载 2018-03-09 15:18:08 · 319 阅读 · 0 评论 -
Alpha 混合(三)Texture alpha
Texture alpha前两篇分别学习了Vertex alpha和Material alpha,今天来研究一下Texture alpha,所谓Texture alpha就是使用Texture的alpha通道进行混合,这需要texture包含alpha通道。所以首先要为texture添加alpha通道。为texture添加alpha通道使用DirectX texture tool添加一般的图片格式...转载 2018-03-09 15:02:31 · 462 阅读 · 0 评论 -
Alpha混合(二)Material Alpha
Alpha值Alpha混合是为了实现透明效果,透明到什么程度是由alpha值决定的,对于一个32位的ARGB格式的颜色来说,它的组成部分如下: 我们可以看到,最高位的一个byte表示alpha值,它并不代表实际的颜色,它是控制颜色的百分比。范围是0x00 - 0xff,也就是十进制的0-255。它可以控制256个级别的透明程度,0表示完全透明,就是什么也看不见了。255表示完全不透明。随后的三个字...转载 2018-03-09 15:01:43 · 585 阅读 · 0 评论 -
Alpha混合(一)Vertex Alpha
Vertex alphaAlpha混合通常是为了实现透明效果,透明效果的程度通过alpha值来控制,对于一个8bit的alpha chanel,可以产生0-255级透明效果,0表示完全透明,255表示完全不透明,在D3D中alpha值的来源主要有三种顶点材质纹理今天介绍如何使用顶点的alpha值来实现透明效果,为了简化程序,我们使用顶点的alpha值来控制顶点的颜色,不涉及到纹理。关于如何使用ma...转载 2018-03-09 14:56:24 · 478 阅读 · 0 评论 -
gpu-z中的几个上限
PWR:Limited by total power limit(总功耗限制)Thrm:Limited by temperature limit(温度限制)VRel:Limited by reliability voltage(可靠性电压限制)VOp:Limit by operating voltage(操作电压限制)Util:Limited by GPU utilization(GPU使用率限制...原创 2018-03-07 16:09:09 · 10637 阅读 · 0 评论 -
游戏中的“垂直同步”与“三重缓冲”究竟是个啥?
从今天开始,我们会开启“小教程”的兄弟栏目——小科普,给大家介绍在配电脑或玩游戏过程中经常会遇到的专业名词。第一期“小科普”我们来讲讲游戏中经常会遇到的一个画面选项——垂直同步我们曾在一期语音里和大家讲探讨过垂直同步的功用,可惜语音有 60 秒的长度限制,并不能和大家解释清楚,那么今天就来详细分析一下“垂直同步”:它到底是干嘛用的?它有什么缺点吗?转载 2018-02-06 10:43:50 · 109899 阅读 · 4 评论 -
3D数学基础学习
向量点乘: 向量叉乘: 矩阵:转载 2017-11-22 11:12:29 · 3221 阅读 · 1 评论 -
D3D画线和画面的总结
我这里假设有4个点:左上点A(1,1) 右上点B(9,1) 右下点C(9,9) 左下点D(1,9)1.对画线的总结:a.当我们画一条点 A->B 的线时:是一条包含8个像素的线,包含点A但不包含点B。b.根据以上规则可以得知,如果我们画一条点 A->B->C->A 的线条时。如下图:画 A->B 的线条时: 包含点A不包含点B画 B->C 的线条时:包含点B原创 2017-11-03 14:26:06 · 3490 阅读 · 2 评论 -
D3D总结(针对自己的学习)
1.D3D默认启用灯光,关闭镜面反射。2.如果未关闭灯光,但是没有设置灯光和材质,绘制的所有东西都为全黑的(包括纹理贴图和物体),因为此时没有设置灯光和纹理。3.如果未关闭灯光,但是有设置灯光没有设置材质,绘制的所有东西全黑的,因为D3D默认设置全黑色材质。4.如果未关闭灯光,有设置灯光和材质,但是未设置顶点法向量,则只有灯光和材质中的环境光有作用(由环境光决定物体的颜色)。5.如...原创 2017-09-29 15:14:27 · 814 阅读 · 0 评论 -
DirectX 让物体绕任意轴旋转
D3D是通过Device的SetTransform来设置世界变换矩阵的。物体默认是在D3D的世界坐标原点上。如果我们要把它做一些变换再显示出来,就要计算一个该物体的世界矩阵matWorld,再调用Device的SetTransform(D3DTS_WORLD,&matWorld),来变换他的位置。位移好说,用一个D3DXMatrixTranslation就能统统搞定。关键是旋转,D原创 2017-09-28 20:14:42 · 4369 阅读 · 0 评论 -
GT1030和730哪个好?GT1030与GT730区别对比 (全文)
对于显卡硬件厂商来说,当属NVIDIA可谓异常活跃,我们知道在游戏领域,N卡一直占据着绝大部分市场。旗下的显卡定位也非常明确。如最新的10系显卡,今年5月份NVIDIA低调发布了定位入门级显卡---GT1030,这款显卡上市之后立马引起了不少玩家的关注,根据市场策略来说,这款显卡显然是取代上一代GT730显卡的。那么新的显卡诞生势必冲击老款显卡的市场地位。那么GT1030和730哪个好呢?今天电脑...转载 2018-03-06 14:52:55 · 107796 阅读 · 0 评论