原创D3D几何实例化的DEMO
CUBE的几何实例化DEMO
鼠标右键按下并拖动 旋转视角
WSAD 前后左右
RF 上下
QE 左右旋转
上下左右键 上下左右旋转
- 减少立方体
= 增加立方体
shader代码:
1 //-------------------------------------------------------------------------------------- 2 // Global variables 3 //-------------------------------------------------------------------------------------- 4 5 float4x4 g_mWorld : WORLD : register(c0); // World matrix for object 6 float4x4 g_mView : VIEW : register(c4); // View matrix for object 7 float4x4 g_mProj : PROJECTION : register(c8); // Project matrix for object 8 float4 g_params : PARAMS : register(c12); 9 10 //----------------------------------------------------------------------------- 11 // Name: VS_HWInstancing 12 // Type: Vertex shader (HW Instancing) 13 //----------------------------------------------------------------------------- 14 void VS_HWInstancing( 15 float4 vPos : POSITION, 16 float3 vNormal : NORMAL, 17 float4 vColor : COLOR0, 18 float4 vColorInstance : COLOR1, 19 float4 vBoxInstance : COLOR2, 20 out float4 oPos : POSITION, 21 out float4 oColor : COLOR0) 22 { 23 // Use the fourth component of the vBoxInstance to rotate the box: 24 vBoxInstance.w *= 2 * 3.1415f; 25 float4 vRotatedPos = vPos; 26 vRotatedPos.x = vPos.x * cos(vBoxInstance.w) + vPos.z * sin(vBoxInstance.w); 27 vRotatedPos.z = vPos.z * cos(vBoxInstance.w) - vPos.x * sin(vBoxInstance.w); 28 29 // Use the instance position to offset the incoming box corner position: 30 vRotatedPos += float4( (vBoxInstance.xyz) * g_params.x, 0 ); 31 vRotatedPos.x -= g_params.y; 32 vRotatedPos.z -= g_params.y; 33 vRotatedPos.w = 1.0f; 34 35 // Transform the position from object space to homogeneous projection space 36 oPos = mul( vRotatedPos, g_mWorld ); 37 oPos = mul( oPos, g_mView ); 38 oPos = mul( oPos, g_mProj ); 39 40 // color 41 oColor = vColor * vColorInstance; 42 } 43 44 //----------------------------------------------------------------------------- 45 // Name: PS 46 // Type: Pixel shader 47 //----------------------------------------------------------------------------- 48 float4 PS( float4 vColor : COLOR0 ) : COLOR0 49 { 50 return vColor; 51 } 52 53 //----------------------------------------------------------------------------- 54 // Name: THW_Instancing 55 // Type: Technique 56 // Desc: Renders scene through Hardware instancing 57 //----------------------------------------------------------------------------- 58 technique THW_Instancing 59 { 60 pass P0 61 { 62 VertexShader = compile vs_2_0 VS_HWInstancing(); 63 PixelShader = compile ps_2_0 PS(); 64 } 65 }
下载地址:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?