小编use*_*938的帖子

GCC错误地通过lambda函数中的引用捕获全局变量?

GCC似乎错误地通过lambda函数中的引用捕获全局变量,即使它们被指定为"按值捕获".此代码将编译并打印"a = 9":

#include <iostream>

int a = 10;

int main()
{
    [=]() { a = 9; } ();
    std::cout << "a = " << a << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然这段代码不会编译:

#include <iostream>

int main()
{
    int a = 10;
    [=]() { a = 9; } (); // error: assignment of member 'main()::<lambda()>::a' in read-only object
    std::cout << "a = " << a << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但显式捕获全局值然后分配给它会产生错误:

#include <iostream>

int a = 10;

int main()
{
    [a]() …
Run Code Online (Sandbox Code Playgroud)

c++ lambda gcc c++11

13
推荐指数
1
解决办法
3267
查看次数

为什么GL_LEQUAL推荐用于GL深度函数(为什么它对我不起作用)?

GL维基上,他们建议使用GL_LEQUAL作为深度函数.此外,深度函数默认为GL_LESS.当我使用这些功能中的任何一个时,我得到了奇怪的结果.在这张图片中,红色方块应位于蓝色方块的前面(两个方块的大小相同): 与GL_LESS

但是,如果我使用glClearDepth(0.0)然后glDepthFunc(GL_GREATER)运行其他未更改的程序,我会得到: 使用GL_GREATER

稍微考虑一下,GL_LESS会给出它所做的结果是有意义的:如果传入的深度值小于存储的深度值,则写入片段.

如果我将相机放在(1, 0, 0)并朝向(0, 0, 0)我的方向望去,我希望物体在物体(0.5, 0, 0)前面(0, 0, 0).使用GL_LESS,对象(0, 0, 0)不会是其片段被写入的对象吗?

编辑:尼科尔,谢谢你提到投影矩阵.好像它设置不正确.我正在关注arcsynthesis.org上的教程一段时间并将代码调整到我自己的项目中,但是我偏离了你的投影矩阵并使用了glFrustum手册页中描述的数学来实现我自己的函数版本,然后使用了NeHe的gluPerspective更换以取代gluPerspective.我不知道为什么替换不起作用,因为我的矩阵数学是正确的(我已经对各种在线计算器进行了检查).使用矩阵我用GL_LESS得到正确的结果.

c++ opengl depth-buffer

5
推荐指数
1
解决办法
9919
查看次数

为什么我的相机会用这个数学围绕一个点旋转?

当我尝试更改方向时,我的相机围绕一个点旋转.如果我旋转我的相机,比如Y轴上30度,而不是相机向右看30度,相机会围绕它正在看的点旋转.

o is the camera, A and B are 3D models. The lines show line-of-sight.
This is what I expect:
     A    B
     | > /
     |  /
     | /
     |/
     o

This is what actually happens:
     A    B
     |\
     | \
     |  \
     | > \
          o
Run Code Online (Sandbox Code Playgroud)

现在,根据我的理解,为了移动相机,我必须以相反的量移动世界.因此,如果我想在Z轴上移动+1,我将在Z轴上平移世界-1.因为我使用四元数来表示方向,所以我使用相机四元数的逆(因为方向总是单位四元数,我通过使用共轭而不是计算逆来优化)来旋转适当数量的世界.

这是我如何将四元数转换为矩阵,其中q是反转的四元数:

[1 - 2 * (q.y * q.y + q.z * q.z)   2 * (q.x * q.y - q.w * q.z)       2 * (q.x * q.z + q.w * q.y)         0]
|2 …
Run Code Online (Sandbox Code Playgroud)

c++ opengl camera quaternions

5
推荐指数
1
解决办法
847
查看次数

标签 统计

c++ ×3

opengl ×2

c++11 ×1

camera ×1

depth-buffer ×1

gcc ×1

lambda ×1

quaternions ×1