Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将相机缩放到3d世界鼠标坐标_C++_Opengl - Fatal编程技术网

C++ 将相机缩放到3d世界鼠标坐标

C++ 将相机缩放到3d世界鼠标坐标,c++,opengl,C++,Opengl,我有点被困在试图将我的相机视图缩放到3D空间中的鼠标坐标上 我有鼠标的三维坐标 我的缩放功能只是缩放到屏幕中心,但我希望能够像您在Sketchup中那样进行缩放 void CCamera::OnMouseWheel(float zDelta) { Position -= Reference; if (zDelta < 0 && length(Position) < 500.0f) { Position += Position * 0.

我有点被困在试图将我的相机视图缩放到3D空间中的鼠标坐标上

我有鼠标的三维坐标

我的缩放功能只是缩放到屏幕中心,但我希望能够像您在Sketchup中那样进行缩放

void CCamera::OnMouseWheel(float zDelta) {
    Position -= Reference;

    if (zDelta < 0 && length(Position) < 500.0f) {
        Position += Position * 0.1f;
    }

    if (zDelta > 0 && length(Position) > 0.05f) {
        Position -= Position * 0.1f;
    }

    Position += Reference;

    CalculateViewMatrix();
}

void CCamera::CalculateViewMatrix() {
    ViewMatrix = mat4x4(X.x, Y.x, Z.x, 0.0f, X.y, Y.y, Z.y, 0.0f, X.z, Y.z, Z.z, 0.0f, -dot(X, Position), -dot(Y, Position), -dot(Z, Position), 1.0f);
    ViewMatrixInverse = inverse(ViewMatrix);
    ViewProjectionMatrix = ProjectionMatrix * ViewMatrix;
    ViewProjectionMatrixInverse = ViewMatrixInverse * ProjectionMatrixInverse;
}

void CCamera::Move(const vec3 &Movement) {
    Position += Movement;
    Reference += Movement;

    CalculateViewMatrix();
}
void CCamera::onmouseheel(float zDelta){
位置-=参考;
如果(zDelta<0和长度(位置)<500.0f){
位置+=位置*0.1f;
}
如果(zDelta>0和长度(位置)>0.05f){
位置-=位置*0.1f;
}
位置+=参考;
CalculateViewMatrix();
}
void CCamera::CalculateViewMatrix(){
ViewMatrix=mat4x4(X.X,Y.X,Z.X,0.0f,X.Y,Y.Y,Z.Y,0.0f,X.Z,Y.Z,Z.Z,0.0f,-点(X,位置),-点(Y,位置),-点(Z,位置),1.0f);
ViewMatrixInverse=逆(ViewMatrix);
ViewProjectionMatrix=ProjectionMatrix*ViewMatrix;
ViewProjectionMatrixInverse=ViewMatrixInverse*ProjectionMatrixInverse;
}
void CCamera::Move(const vec3和Movement){
位置+=移动;
参考+=运动;
CalculateViewMatrix();
}

可能重复您为什么要重复您的请求?@Ripi2我更改了我的请求,不认为有人在看它。