2

我正在使用 isgl3d 框架运行一个 iOS 项目来显示 pod 文件。

我有一辆带有 0.5 alpha 窗口的时尚汽车,我希望在相机背景上渲染它,以寻求一些增强现实的好处。

窗口上的 alpha 看起来不错,但是当我添加对象时,我注意到它透明地渲染了整个对象,也就是窗口所在的位置。包括汽车内饰。

像这样(例如,键盘可以通过仪表板,座椅等看到。应该是实心的)

坏车就是坏

汽车内部是一个 alpha 1.0 的单独对象。

我宁愿不在我的项目中展示“幽灵车”,但我还没有找到解决方法。

有没有人遇到过同样的问题,并最终找到了解决方案?

已解决: 感谢黛米的回答。这是最终代码:

// Render opaque objects
        [_scene render:renderer opaque:true];

        // First planar shadow pass (if needed)
        [self renderPlanarShadows:renderer];

        // Render transparent objects
        glColorMask(1, 1, 1, 0);
        if (_zSortingEnabled) {
            [_scene renderZSortedAlphaObjects:renderer viewMatrix:&viewMatrix];

        } else {
            [_scene render:renderer opaque:true];
        }
        glColorMask(1, 1, 1, 1);
4

1 回答 1

3

问题:您的玻璃会重写 Alpha 通道。绘制汽车玻璃时使其不被修改。当您使用 绘制透明项目时,禁用对颜色缓冲区的 Alpha 通道的写入glColorMask(1, 1, 1, 0)。透明绘制后不要忘记恢复:glColorMask(1, 1, 1, 1)!!!

于 2012-05-05T09:47:58.693 回答