OpenGL3.3-通过物体坐标系对物体实现鼠标移动

这里写自定义目录标题

实例

在这里插入图片描述
如图中 红色是黑色长方形的x轴 蓝色是z轴 绿色是y轴 我们如果点击相应轴向正或负方向移动 物体也会跟着移动

实现过程

1.首先我们为需要被移动的物体和坐标轴都设置了objID用于拾取(具体实现方法看3d拾取

shader.setInt("gobjectIndex", i);

2.当我们鼠标点击屏幕时会拾取点击处的像素所对应objID以确定我们是否点击到了物体

//如果鼠标点击到了物体 该物体是我们想要移动的物体时 我们将坐标系移动到物体的中心方便移动
if (obID > 0.2) //写0.2的原因是obID在没被赋值的时候是0.1而不是0
{
	glm::mat4 temp(1.0);
	temp = glm::translate(model[changeID], triangle.getCenter());//该temp矩阵是位移到目标物体中心的矩阵
	csys.setModel(temp);
}

3.当我们点击到的objID不为坐标轴时 那么将该objID赋值给changeID 就是我们想要移动的物体的objID记录下来

if (obID < 100)
	changeID = obID;

4.我们再点击物体上相应的坐标轴 此时会对点击的像素objID进行判断 如果是100,101,102则代表是坐标轴 就通过鼠标在世界坐标系中的差值进行相应轴的矩阵变换

            else if(obID>=100&&obID<=103)   //如果objID大于等于100且小于等于103 说明是坐标轴 此时我们就对物体的model矩阵进行变换
            {
                if (obID == 100)//如果点的是x轴
                {
                    glm::vec3 temp = glm::vec3(off.x,0.0,0.0);
                    model[changeID] = glm::translate(model[changeID], glm::vec3(temp));
                }
                else if (obID == 102)//如果点的是y轴
                {
                    glm::vec3 temp = glm::vec3(0.0,off.y,0.0);
                    model[changeID] = glm::translate(model[changeID], glm::vec3(temp));
                }
                else if (obID == 101)//如果点的是z轴
                {
                    glm::vec3 temp = glm::vec3(0.0,0.0,off.z);
                    model[changeID] = glm::translate(model[changeID], glm::vec3(temp));
                }
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值