Pau*_*aul 5 alpha glsl fragment-shader ios scenekit
我想从图像中获得透明效果,现在我只是用圆环进行测试,但着色器似乎不适用于 alpha。根据我从这个线程(在Scenekit中使用混合函数)和这个关于透明度的wiki链接的理解:(http://en.wikibooks.org/wiki/GLSL_Programming/GLUT/Transparency),被SceneKit中GLBlendFunc替换。pragma transparency
你知道这段代码有什么问题吗?
我使用 SceneKit 创建了一个新项目,并将船舶网格更改为圆环。
编辑:
我正在尝试使用飞机,但下面的图像没有出现在飞机内部,而是得到下面带有红色和棕色框的图像。
我的阿尔法图像:

结果(带有 alpha 的图像应替换棕色):

let plane = SCNPlane(width: 2, height: 2)
var texture = SKTexture(imageNamed:"small")
texture.filteringMode = SKTextureFilteringMode.Nearest
plane.firstMaterial?.diffuse.contents = texture
let ship = SCNNode(geometry: plane) //SCNTorus(ringRadius: 1, pipeRadius: 0.5)
ship.position = SCNVector3(x: 0, y: 0, z: 15)
scene.rootNode.addChildNode(ship)
let myscale : CGFloat = 10
let box = SCNBox(width: myscale, height: myscale, length: myscale, chamferRadius: 0)
box.firstMaterial?.diffuse.contents = UIColor.redColor()
let theBox = SCNNode(geometry: box)
theBox.position = SCNVector3(x: 0, y: 0, z: 5)
scene.rootNode.addChildNode(theBox)
let scnView = self.view as SCNView
scnView.scene = scene
scnView.backgroundColor = UIColor.blackColor()
var shaders = NSMutableDictionary()
shaders[SCNShaderModifierEntryPointFragment] = String(contentsOfFile: NSBundle.mainBundle().pathForResource("test", ofType: "shader")!, encoding: NSUTF8StringEncoding, error: nil)
var material = SCNMaterial()
material.shaderModifiers = shaders
ship.geometry?.materials = [material]
Run Code Online (Sandbox Code Playgroud)
着色器:
#pragma transparent
#pragma body
_output.color.rgba = vec4(0.0, 0.2, 0.0, 0.2);
Run Code Online (Sandbox Code Playgroud)
SceneKit 使用预乘 alpha(r并且字段应乘以所需的值g):ba
vec4(0.0, 0.2, 0.0, 0.2); // `vec4(0.0, 1.0, 0.0, 1.0) * alpha` with alpha = 0.2
Run Code Online (Sandbox Code Playgroud)