gpt4 book ai didi

macos - Mac OS X 10.6 中的 OpenGL 对象有光泽/ Shiny ,但 10.5 则不然。为什么?

转载 作者:行者123 更新时间:2023-12-03 16:09:45 25 4
gpt4 key购买 nike

我为 Mac OS X 10.5 及更高版本编写了一个 OpenGL 屏幕保护程序,其中显示了使用行进立方体构建的旋转心脏。它在我运行 Snow Leopard (10.6) 的黑色 13.3 英寸开发 Macbook 上运行良好,美观且有光泽。

但是当我在运行 leopard (10.5) 的较新 Macbook Pro 上尝试时,心脏并不光滑。看起来好像它只被环境光/漫射光照亮,但没有镜面光。就好像我将光的镜面反射分量设置为 0。较新的 Macbook 配备了 Nvidia 显卡。运行 10.6 的较旧版本具有 Intel XMA3100。

这是我的 OpenGL 初始化代码。心脏是使用行进立方体创建的,我也在计算法向量。

- (void)setUpOpenGL{     [[glView openGLContext] makeCurrentContext];    // Synchronize buffer swaps with vertical refresh rate    GLint swapInterval = 1;    [[glView openGLContext] setValues:&swapInterval                         forParameter:NSOpenGLCPSwapInterval];    glShadeModel(GL_SMOOTH);    glClearDepth(1.0);    glClearColor (0.0, 0.0, 0.0, 0.0);    glEnable(GL_DEPTH_TEST);    // Light    GLfloat ambient_light[] = { 0.2f, 0.2f, 0.2f, 1.0f };    GLfloat diffuse_light[] = { 1.0f, 1.0f, 1.0f, 1.0f };    GLfloat specular_light[] = { 1.0f, 1.0f, 1.0f, 1.0f };    GLfloat position_light[] = { 0.0f, 0.0f, -1.0f, 0.0f };    glEnable(GL_LIGHT0);    glEnable(GL_LIGHTING);    glLightfv(GL_LIGHT0, GL_AMBIENT, ambient_light);    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse_light);    glLightfv(GL_LIGHT0, GL_SPECULAR, specular_light);    glLightfv(GL_LIGHT0, GL_POSITION, position_light);    // Material    glEnable(GL_COLOR_MATERIAL);    glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);    GLfloat mat_ambient[] = {0.7, 0.0, 0.0, 1.0};    GLfloat mat_diffuse[] = { 0.7, 0.0, 0.0, 1.0 };    GLfloat mat_specular[] = { 0.0, 0.0, 0.0, 0.0 };    GLfloat mat_shininess[] = { 100.0 };    glColor3f(1.0, 0.0, 0.0);    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);    // Copy isosurface vertices to graphics array    glEnableClientState(GL_VERTEX_ARRAY);    glEnableClientState(GL_NORMAL_ARRAY);    glVertexPointer(3, GL_FLOAT, 0, [marchingCubes vertices]);    glNormalPointer(GL_FLOAT, 0, [marchingCubes normals]);}

实际的绘图代码如下所示:

- (void)drawRect:(NSRect)rect{    [super drawRect:rect];    [[glView openGLContext] makeCurrentContext];    glDrawBuffer(GL_BACK);    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    // Adjust viewpoint to give heart beat effect    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();    gluLookAt(0, radius, 2*radius/3,              0, 0, 0,              0, 0, 1);    // Adjust rotation to make heart spin    glRotatef(rotation, 0.0f, 0.0f, 1.0f);    // Draw heart    glDrawArrays(GL_TRIANGLES, 0, [marchingCubes vertexCount]/3);    glFlush();    [[glView openGLContext] flushBuffer];    // Rotate and scale a bit    rotation += 1.0f;    radius = 4.0 + 0.25*sin(rotation/4);}

有什么想法为什么镜面照明不同吗?某些显卡根本不支持镜面照明吗?非常感谢任何指点。

最佳答案

GL_SPECULAR(和其他颜色)的默认值为{ 0.0,0.0,0.0,1.0 }

GLfloat mat_specular[] = { 0.0, 0.0, 0.0, 1.0 };

您也可以在设置功能结束时执行此操作,以 1. 优化绘图,2. 仔细检查设置时照明是否实际应用于正面。

glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);

关于macos - Mac OS X 10.6 中的 OpenGL 对象有光泽/ Shiny ,但 10.5 则不然。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9051795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com