You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下OpenGL聚光灯与平行灯交互异常问题排查

Apple Silicon上遗留OpenGL固定管线聚光灯与平行灯交互渲染异常

问题概述

  • 应用背景:从Windows 32位移植至macOS 64位的遗留OpenGL固定管线应用
  • 核心异常:单独使用平行灯时场景渲染正常;添加聚光灯并将其下移至Y=1时,立方体出现错误的黑色区域;关闭聚光灯后立方体恢复均匀照明
  • 环境差异:仅在Apple Silicon设备上触发问题,Intel Mac无异常;编译纯ARM64版本后问题仍存在,排除Rosetta转译影响
  • 初步推测:问题由Apple Silicon的OpenGL驱动或显卡特性导致

测试代码片段

// 灯光初始化核心代码
void initLights() {
    glEnable(GL_LIGHTING);
    glEnable(GL_COLOR_MATERIAL);

    // 平行灯(LIGHT0)配置
    GLfloat ambient0[] = {0.2f, 0.2f, 0.2f, 1.0f};
    GLfloat diffuse0[] = {0.8f, 0.8f, 0.8f, 1.0f};
    GLfloat direction0[] = {0.0f, 1.0f, 0.0f, 0.0f};
    glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0);
    glLightfv(GL_LIGHT0, GL_POSITION, direction0);
    glEnable(GL_LIGHT0);

    // 聚光灯(LIGHT1)配置(Y=1时触发异常)
    GLfloat ambient1[] = {0.2f, 0.2f, 0.2f, 1.0f};
    GLfloat diffuse1[] = {0.8f, 0.8f, 0.8f, 1.0f};
    GLfloat position1[] = {0.0f, 1.0f, 0.0f, 1.0f};
    GLfloat spotDir1[] = {0.0f, -1.0f, 0.0f};
    glLightfv(GL_LIGHT1, GL_AMBIENT, ambient1);
    glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse1);
    glLightfv(GL_LIGHT1, GL_POSITION, position1);
    glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spotDir1);
    glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 45.0f);
    glEnable(GL_LIGHT1);
}

对比截图

内容的提问来源于stack exchange,提问作者Michael Wilson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:07:04