Primitive Topology

2024-05-11 22:58
文章标签 topology primitive

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

  在D3D中, 顶点被存储在一个名为Vertex Buffer的数据结构中, 他是一段连续的内存, 顶点被一个挨一个的存储在这个buffer中. 但问题是这个Vertex Buffer只存储了顶点, 并没有指明这些顶点要如何组成几何原型. 所以在D3D中, 我们指明 Primitive Topology 来告诉D3D如何”看待”这一串顶点数据.

  在渲染管线一文中我们知道这部分处理是在INPUT ASSEMBLER阶段进行的, DirectX的API名称定义的非常规范, 我们用来设置原型拓扑的方法便是以”IA”开头的 IASetPrimitiveTopology .

void ID3D11DeviceContext::IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY Topology);

  D3D提供了一个枚举 D3D11_PRIMITIVE_TOPOLOGY 用来表示拓扑方式(MSDN文档). 所有后来的draw call都将遵循这种格式, 直到再次调用IASetPrimitiveTopology改变拓扑方式.

typedef enum D3D11_PRIMITIVE_TOPOLOGY
{D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED = 0,D3D11_PRIMITIVE_TOPOLOGY_POINTLIST = 1,D3D11_PRIMITIVE_TOPOLOGY_LINELIST = 2,D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP = 3,D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST = 4,D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = 5,D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = 11,D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = 12,D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = 13,D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33,D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST = 34,//...D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST = 64,
} D3D11_PRIMITIVE_TOPOLOGY;

  下图展示了几种典型的拓扑方式, 更多细节请参考文档和相关书籍.

  • (a) point list
  • (b) line strip
  • (c) line list
  • (d) trangle strip

  原型拓扑

  实际上我们使用更多的是 Triangle List , 他不像Triangle Strip那样彼此相连, 虽然这样在表示连续的图形时会浪费顶点, 但是好在我们可以使用索引缓存最大程度上减少这种浪费. 更重要的是由于不需要连续, 相较于Triangle Strip要更加灵活.
  Triangle List

这篇关于Primitive Topology的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

二、Topology的并行度

1、几个概念 Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程,这个工作进程就是worker。一个topology可能会在一个或者多个工作进程里面执行,每个工作进程执行整个topology的一部分。每一个worker都会占用工作节点的一个端口,这个端口可以在storm.yarm中配置。 每一个Spout和Bolt会被当作很多task在整个集群里面执行。

多场景建模: STAR(Star Topology Adaptive Recommender)

之前,分享了一篇关于多任务学习的文章:多任务学习MTL模型:MMoE、PLE,同样的还有关于多任务学习中的多目标loss优化策略。 这篇文章则开始一个与多任务学习有着紧密联系的系列:多场景建模学习。 前言 首先,讲一下多任务学习和多场景建模的区别: 多任务学习通常是聚焦于单独一个domain(场景、领域)内的不同任务的处理,即不同任务的label空间是不同的;而多场景建模则是关注于多个do

[POJ 1284] Primitive Roots (数论,原根)

POJ - 1284 题意是,求一个质数的原根 原根的定义是,对于正整数 aimodp(i=[1,p−1]) a^i mod p (i=[1,p-1])得到的集合为{1,2,…,p-1},那么则称 a是 p的一个原根 对于任意正整数 p,其原根个数为 ϕ(ϕ(p)) \phi( \phi(p) ), ϕ(n) \phi(n)为欧拉函数,表示小于n且与n互质的数的个数 而质数的欧拉函数值

poj 1284 Primitive Roots(数论:欧拉函数)

我开始还以为是求最小原根呢 直接打表+快速幂取模 后来才发现是求原根的个数 结果为phi(n-1) 证明就不再赘述了,网上很多 而且感觉这种题太偏了,没有必要浪费太多时间 代码如下: #include <cmath>#include <cstdio>#include <iostream>using namespace std;int euler_phi(int n) {in

Null value was assigned to a property of primitive type setter of com.ibeifeng.po.Employee.modifyTim

Null value was assigned to a property of primitive type setter of com.ibeifeng.po.Employee.modifyTime; 因为数据库modifytime 是bigint 类型; 应该是基本类型吧; 我的modifytime 是 可以为空的; 但是基本数据类型好像必须有个默认值; 所以都赋值初始值0 就ok了

poj 1284 Primitive Roots 【原根】【数论】

题目链接 : 传送门 题目大意: 求一个质数的原根个数。 先普及一下原根的定义: 设m是正整数,a是整数,若a模m的阶等于euler(m),则称a为模m的一个原根。 eg: m=7,euler(7) =  6(1,2,3,4,5,6)   则: 1   1^(n)mod7=1! = 62   2^(n)mod7={2 4 1}!=6 3   3^(n)mod7={3,2,6,4,

【Cesium解读】Cesium中primitive/entity贴地

官方案例  Cesium Sandcastle Cesium Sandcastle 好文推荐:Cesium贴地设置_primitive贴地-CSDN博客 scene.globe.depthTestAgainstTerrain = true;      True if primitives such as billboards, polylines, labels, etc. shoul

Java基本数据类型(Primitive type)速查表

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>         Java要确定每种基本数据类型所占存储空间的大小. 它们的大小并不像其他大多是

JTS:Java Topology Suit

接口文档:org.locationtech.jts:jts-core 1.19.0 API。         开发文档:JTS | Documentation。 概述 JTS提供了平面线性几何(planar and linear geometry)与相关的基础几何处理函数(a set of fundamental geometric functions.)。 JTS遵循

cesium primitive 移动 缩放 旋转 矩阵

旋转参考:cesium 指定点旋转rectangle Primitive方式 矩阵篇-CSDN博客 平移参考:cesium 调整3dtiles的位置 世界坐标下 相对坐标下 平移矩阵-CSDN博客 一、primitive方式添加polygon let polygonInstance = new Cesium.GeometryInstance({geometry: Cesium.Polygon