我的20开始了 2021-03-27 15:22 采纳率: 0%
浏览 4

请问DX顶点数据根据什么写的?

bool set() {
    
    g_D3DDevice->CreateVertexBuffer(              //创立静态顶点缓存
        3 * sizeof(vertex),
        0,
        D3DFVF_XYZ,
        D3DPOOL_MANAGED,
        &dd,
        0
    );

    vertex* str;
    dd->Lock(0, 0, (void**)&str, 0);
    str[0] = vertex{ -1.0f, 0.0f, 2.0f };                            //就是这里面的数据根据什么标准写的啊?不同的书有的个位数有的几百
    str[1] = vertex{ 0.0f, 1.0f, 2.0f  };                            //不知道根据什么写的
    str[3] = vertex{ 1.0f, 0.0f, 2.0f };

    dd->Unlock();
    return true;
}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-23 21:19
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在DX顶点数据的创建和使用中,"set()"函数是一个关键步骤。它负责将一些顶点信息(坐标)放入动态或静态顶点缓存中。这个过程涉及到以下几个方面:

    1. 创建缓冲区: g_D3DDevice->CreateVertexBuffer 创建一个用于存储顶点数据的缓冲区。

    2. 分配内存: 使用sizeof(vertex)计算所需的内存大小,并通过0指定缓冲区的大小。D3DFVF_XYZ表示要使用的顶点类型为XYZ(X、Y、Z),而D3DPOOL_MANAGED则指定了缓冲区是管理内存还是用户态内存。

    3. 设置顶点数据: 将每个顶点的信息(坐标)放入缓冲区。例如,在上面的例子中,我们创建了一个包含三个顶点的数组,分别对应着x坐标的-1,y坐标的1,z坐标的2。这些顶点的数据格式是XYZ,即X、Y、Z坐标。

    4. 锁定和解锁: 在这里,我们调用dd->Lock()来锁定缓冲区,并传入0作为锁值,这表示没有限制;传入0作为偏移量,表示不从缓冲区开始读取,而是从头开始读取。然后我们将顶点数据放入缓冲区中。接着,调用dd->Unlock()以释放对缓冲区的锁定。

    5. 返回结果: 如果所有的操作都成功完成,那么return true;将被调用,表示顶点数据已经正确地写入到缓冲区中。

    总之,set()函数的主要目的是创建并填充一个动态顶点缓冲区,其中包含了根据特定格式(如XYZ)定义的多个顶点。这个过程依赖于DX编程模型中的底层细节,包括硬件抽象层(HAL)、设备对象(D3DDevice)、缓冲区(DD)等。

    评论

报告相同问题?

悬赏问题

  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统
  • ¥100 rtmpose姿态评估