OpenGL 交互方式Trackball的实现代码

该博客详细介绍了如何在OpenGL中实现Trackball交互方式,通过将鼠标位置映射到特定范围来控制视角旋转,提供了关键的代码实现部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Trackball是将屏幕上捕捉到的鼠标位置转换到一个球的表面,根据它确定旋转轴和旋转角度。看下面的代码就能明白;

首先定义一些全局变量:

//camera transform variables
int state = 0, oldX=0, oldY=0;
float r_angle=0, dist = -2;
glm::vec3 r_axis_local=glm::vec3(1.0f, 0.0f, 0.0f);
glm::mat4 Tr;
glm::mat4 R=glm::mat4(1.0);
glm::mat4 MV,P,MVP;

将鼠标位置映射到(-1.0,1.0)范围内

glm::vec2 scaleMouse(glm::vec2 coords, glm::vec2 viewport) {
    return glm::vec2( static_cast<float>(coords.x*2.f) / static_cast<float>(viewport.x) - 1.f,
                 1.f - static_cast<float>(coords.y*2.f) / static_cast<float>(viewport.y) );
}

将鼠标位置映射到球面(或双曲面,当鼠标位置超过球的范围时)上

glm::vec3 projectToSphere(glm::vec2 xy) {
    static const float sqrt2 = sqr
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值