我想知道 Metal API 中是否只有 Point Light
和 Ambient Light
或者我也可以使用 Spot Light
和Directional Light
在我的 3D 环境中?
struct Light {
var color: (Float, Float, Float)
var ambientIntensity: Float
static func size() -> Int {
return sizeof(Float) * 4
}
func raw() -> [Float] {
let raw = [color.0, color.1, color.2, ambientIntensity]
return raw
}
}
How to implement
Spot Light
andDirectional Light
if they exist in Apple's Metal API?
最佳答案
Metal API 本身没有任何像“光”这样高级的概念,就像现代 OpenGL 没有的一样——用于此类事物的 API 已经过时了 fixed-function pipeline 。使用现代低级图形 API,您需要滚动自己的光照;优秀的 Metal By Example 系列有一个 article on doing that ,尽管您可能想要阅读前面的部分以更清楚地了解发生了什么。请注意,该文章仅涉及方向灯;聚光灯要复杂得多,您需要做一些研究以找出这些通常是如何完成的,然后在 Metal 中实现该方法。
作为直接使用 Metal 的替代方法,您可能需要查看 SceneKit ,它非常强大并且通过 SCNLight 类内置了对多种类型的光的支持。
关于swift - Metal API 中的光类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40279765/