gpt4 book ai didi

opengl glMaterialfv 与 glMaterialiv

转载 作者:行者123 更新时间:2023-12-02 17:52:46 24 4
gpt4 key购买 nike

将 Material 数据传递给 opengl(在着色器中使用)时:


float white[4] ={1.0f,1.0f,1.0f,1.0f};

glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, white);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, white);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white);

int whitei[4] = {255,255,255,255};
glMaterialiv(GL_FRONT_AND_BACK, GL_AMBIENT, whitei);
glMaterialiv(GL_FRONT_AND_BACK, GL_DIFFUSE, whitei);
glMaterialiv(GL_FRONT_AND_BACK, GL_SPECULAR, whitei);

第一个效果很漂亮,但第二个只给出了黑色网格。两者都在完全相同的上下文中使用(基本上我编写了第一个,然后第二个替换了第一个)。

有人知道这是为什么吗? glMaterialiv 确实会让我的生活更轻松(如果我能让它工作),因为我将颜色保留为 rgba 字节,并且我不确定是否想让它们变大 4 倍只是为了将它们转换为 float 。

最佳答案

glColor3i 和 glMaterialiv 都采用 [0, INT_MAX] 范围内的颜色,INT_MAX 为 2^31 - 1。这解释了您的网格是黑色的,255 相当于为 float 传递 0.000000119。

从技术上讲,将其作为 float 或整数传递应该没有多大关系。在您的示例中,您已经将各个组件存储为其原始大小的 4 倍,因此没有损失。

我什至不相信跳过 int -> float 转换会产生任何性能增益,因为驱动程序仍然可能在 CPU 端将事物转换为浮点型。我推测,测试必须证明这一点。

关于opengl glMaterialfv 与 glMaterialiv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6007500/

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