c - opengl使聚光灯像手电筒一样

标签 c opengl graphics

我试图在 opengl 中模仿手电筒。基本上我希望聚光灯与相机处于相同的位置,并指向与相机指向相同的方向。

这是我的代码:

gluLookAt (xAt, yAt, zAt, xLookAt, yLookAt, zLookAt, 0, 1, 0);
light_pos [4] = {xAt, yAt, zAt, 1.0};
glLightfv (GL_LIGHT0, GL_POSITION, light_pos);

spotDir [] = {xLookAt - xAt, yLookAt - yAt, zLookAt - zAt};
glLightfv (GL_LIGHT0, GL_SPOT_DIRECTION, spotDir);

我已调用初始化灯光并计算了所有对象的表面法线。

现在上面的代码可以工作了,当移动相机时聚光灯随之移动。然而,当我将相机移近一个物体时,物体上的光线就会减少。当我将相机移得更远时,物体会获得更多光线。

我希望发生相反的情况 - 相机离物体越远,照射到物体上的光线就越少。这是怎么做到的?或者这不是 opengl 聚光灯的行为?

最佳答案

所以我对此进行了研究,显然修改光的衰减会产生正确的结果。希望这可以帮助其他偶然发现这一点的人。

关于c - opengl使聚光灯像手电筒一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13618425/

相关文章:

c++ - 将 OpenGL 纹理转换为 OpenCV 矩阵

c++ - GLFW 获取屏幕高度/宽度?

algorithm - 从样本的 3 维矩阵中确定 3D "contour-esque"形状

C 从链表中删除节点

c - 为什么这个变量的值等于 '0' 而不是 '42?

基于循环迭代器在 C/Fortran 中动态创建多个数组

r - 与TIFF相比,SVG质量较差

c - 使用 Windows 和 C 编译器在 64 位系统上运行 32 位 C 代码

c++ - 设计一个 "renderer",是否有必要使用 OpenGL 以外的 API?

java - JPanel 位置被 BufferStrategy 重击