使用Direct 3D时,应该在代码中处理什么以及在HLSL中应该处理什么?

时间:2013-04-30 16:27:01

标签: c++ directx hlsl

我是3D编程的新手,即使用DirectX。我一直在尝试按照如何做基本事情的教程,我一直在看微软提供的示例。我遇到的一个重大问题是如何判断在实际游戏代码中应该进行哪些计算以及在HLSL中应该进行哪些计算。我无法理解应该在哪里做什么,因为看起来,对我来说,你几乎可以拥有与着色器文件中的计算相关的所有代码,或者你可以将它全部放在可执行代码中并且只发送熊最小的像素和顶点着色器。如何判断代码应该放在哪里?如果你需要一个例子,我会试着找一个。

1 个答案:

答案 0 :(得分:2)

“代码” - CPU 代码

“HLSL” - GPU 代码

基本上,您希望GPU上的所有纯图形都能发生。也就是说,当有关您要渲染的内容的信息已发送到GPU时,它应接管并使用该信息生成最终图像。

你想让CPU对GPU说“”这就是我要呈现的内容,这里就是你需要做的一切“然后确保告诉GPU “这就是你渲染它的方式”

一些例子(无论如何都不是完整或最终的清单):

CPU:

  • 处理窗口打开/关闭/调整大小的任何事情
  • 鼠标,键盘的用户输入
  • 阅读和设置配置
  • 生成和更新视图矩阵
  • 应用程序逻辑
  • 设置和初始化渲染(纹理,缓冲等)
  • 生成顶点数据(位置,纹理坐标等)
  • 创建图形实体(三角形,纹理,颜色等)
  • 处理动画(时间步,交换缓冲区)
  • 每帧发送更新数据到GPU

GPU:

  • 使用视图矩阵将内容放在屏幕上的正确位置
  • 从顶点数据到片段数据的插值
  • 着色(通常,这是最复杂的部分)
  • 计算并写入最终像素颜色