Direct3D Tutorial Win32 Sample 详解 - 5

2024-06-06 08:32

本文主要是介绍Direct3D Tutorial Win32 Sample 详解 - 5,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现效果:
一个cube自转,另一个cube自转同时,绕中心轴公转
在这里插入图片描述

要点

Transform
平移之后,坐标原点就不在物体的中心了。平移之后一定方向上的旋转就是公转。
平移改变坐标原点
两个立方体的transform过程如下:

    // 1st Cube: Rotate around the origin// 绕Y轴旋转即可g_World1 = XMMatrixRotationY( t );// 2nd Cube:  Rotate around originXMMATRIX mScale = XMMatrixScaling( 0.3f, 0.3f, 0.3f );// 自转XMMATRIX mSpin = XMMatrixRotationZ( -t );// 平移XMMATRIX mTranslate = XMMatrixTranslation( -4.0f, 0.0f, 0.0f );XMMATRIX mOrbit = XMMatrixRotationY( -t * 2.0f );
// 注意顺序 缩放-自传-平移-公转g_World2 = mScale * mSpin * mTranslate * mOrbit;

做完transformation,在绘制每个模型之前,update相应的常量缓冲

    //// Update variables for the first cube//ConstantBuffer cb1;cb1.mWorld = XMMatrixTranspose( g_World1 );cb1.mView = XMMatrixTranspose( g_View );cb1.mProjection = XMMatrixTranspose( g_Projection );g_pImmediateContext->UpdateSubresource( g_pConstantBuffer, 0, nullptr, &cb1, 0, 0 );//// Render the first cube//g_pImmediateContext->VSSetShader( g_pVertexShader, nullptr, 0 );g_pImmediateContext->VSSetConstantBuffers( 0, 1, &g_pConstantBuffer );// 可以顺次设置多个缓冲区//g_pImmediateContext->VSSetConstantBuffers( 1 or 2 or 3 对应于hlsl中b1, b2, b3, 1, &g_pConstantBuffer );g_pImmediateContext->PSSetShader( g_pPixelShader, nullptr, 0 );g_pImmediateContext->DrawIndexed( 36, 0, 0 );

如何实现遮挡操作
注意:index buffer在编辑数据时,注意顶点的顺序,背面(逆时针的顶点)是不会被绘制的,即背面消隐。
使用深度缓冲实现遮挡操作

过程如下(简略版)://1  Create depth stencil texture//2  Create the depth stencil viewhr = g_pd3dDevice->CreateDepthStencilView( g_pDepthStencil, &descDSV, &g_pDepthStencilView );if( FAILED( hr ) )return hr;
//3  绑定到rendertarget上g_pImmediateContext->OMSetRenderTargets( 1, &g_pRenderTargetView, g_pDepthStencilView );

并且在绘制每帧前清空深度缓冲区

    // 清空深度缓冲区,因为需要根据投影重新计算深度// Clear the depth buffer to 1.0 (max depth)//g_pImmediateContext->ClearDepthStencilView( g_pDepthStencilView, D3D11_CLEAR_DEPTH, 1.0f, 0 );

细节:

    // 清空render target,清屏操作,否则每帧的操作是叠加操作,如下图所示// Clear the back buffer//g_pImmediateContext->ClearRenderTargetView( g_pRenderTargetView, Colors::MidnightBlue );

在这里插入图片描述

要点总结:

transform的理解
如何实现公转动画
平移之后,坐标原点就不在物体的中心了。平移之后一定方向上的旋转就是公转。

使用深度缓冲解决遮挡问题
深度缓冲区如何添加
index中顶点的顺序也很关键,背面不会被绘制!

这篇关于Direct3D Tutorial Win32 Sample 详解 - 5的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1035591

相关文章

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

Python中局部变量和全局变量举例详解

《Python中局部变量和全局变量举例详解》:本文主要介绍如何通过一个简单的Python代码示例来解释命名空间和作用域的概念,它详细说明了内置名称、全局名称、局部名称以及它们之间的查找顺序,文中通... 目录引入例子拆解源码运行结果如下图代码解析 python3命名空间和作用域命名空间命名空间查找顺序命名空

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解