随笔 - 373  文章 - 1  评论 - 771  阅读 - 137万

原创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 }
复制代码

 

下载地址:

http://pan.baidu.com/s/1wz8jH

posted on   叶飞影  阅读(680)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示