我有一个 Opengl 光线追踪器,它能够加载 obj 文件并以光线追踪方式将其可视化。我的应用程序使用 assimp 加载 obj 文件,然后使用着色器存储缓冲区将所有三角形面(包括顶点及其索引)发送到片段着色器。之后,片段着色器通过跟踪光线路径来计算像素的颜色。光线来自相机 ( posCamera
) 的位置并穿过虚拟画布的像素。基本结构是将结果渲染到这个四边形画布上。
目前,我正在研究相机。相机始终注视0,0,0
点 ( viewPoint
),并且可以通过以下函数绕 y 轴旋转:
void setCamera(float param) {
connect = posCamera - viewPoint;
posCamera = glm::vec3(connect.x * cos(param) + connect.z * sin(param), connect.y,
-connect.x * sin(param) + connect.z * cos(param)) + viewPoint;
canvasX = cross(upVector, connect) * getLength(connect) * tanf(fieldOfview / 2);
canvasY = cross(connect, canvasX) * getLength(connect) * tanf(fieldOfview / 2);
setCam(posCamera,viewPoint, canvasY, fieldOfview);
Run Code Online (Sandbox Code Playgroud)
我只想围绕 x 轴旋转场景。为了解决这个问题,我创建了一个新函数:
void rotateAroundX(float param) {
connect …
Run Code Online (Sandbox Code Playgroud) 根据这个网站/链接/:
如果显式声明默认构造函数但将其标记为已删除,则不能使用空大括号初始化:
它还给出了一个例子:
class class_f {
public:
class_f() = delete;
class_f(string x): m_string { x } {} // if it is deleted, there will be no errors.
string m_string;
};
int main()
{
class_f cf{ "hello" };
class_f cf1{}; // compiler error C2280: attempting to reference a deleted function
}
Run Code Online (Sandbox Code Playgroud)
我真正不明白的是,如果没有用户提供的构造函数,即使删除的默认构造函数仍然存在,也不会再出现错误。据我所知,如果有用户提供的构造函数,就不会存在隐式的默认构造函数,但默认构造函数已经被删除了。所以我不知道在值初始化的情况下调用什么以及为什么它在下面的示例中起作用:
#include <string>
class class_f {
public:
class_f() = delete;
std::string m_string;
};
int main()
{
class_f cf1{}; // Does the implicit-default constructor is called here? But, it …
Run Code Online (Sandbox Code Playgroud)