Qt+OpenGl 如何实现三维点的 平移旋转操作
我现在可以分别实现旋转、平移。一旦,旋转和平移交替操作就会回到屏幕中心。哪位大神,给个可以用的平移、旋转函数啊。...
我现在可以分别实现 旋转、平移。一旦,旋转和平移交替操作就会回到屏幕中心。哪位大神,给个可以用的平移、旋转函数啊。
展开
1个回答
展开全部
平移操作 调 函数 glTranslatef
glTranslatef(12.3,0.,0.); -- 沿x 平移12.3
glTranslatef(0., 34.5,,0.); -- 沿y 平移34.5
glTranslatef(0. , 0.0, 67.8); -- 沿z 平移67.8
旋转操作调 函数 glRotated 或 glRotatef ,前者参数1是角度值 整型,后者是 float型。
glRotated(3,1,0,0); -- 绕 x 轴 转 3 度
glRotated(3,0,1,0); -- 绕 y 轴 转 3 度
glRotated(3,0,0,1); -- 绕 z 轴 转 3 度
这段程序画 三维空间的 NN 个点,每个点用一个边长c1的立方块表示,颜色由z值决定。
for (i = 0; i< NN ; i++)
{
glPushMatrix();
glTranslatef(x[i],y[i],z[i]);
(void) my_color(z_color(z[i]));
(void) glutSolidCube(c1);
glPopMatrix();
}; // end for i
-----------------
注意 平移和转动的顺序,顺序不同,最终结果的位置和状态可能不能同。
必要时,加 glPushMatrix(); glPopMatrix(); 保证它是自己所要的位置转换。
glTranslatef(12.3,0.,0.); -- 沿x 平移12.3
glTranslatef(0., 34.5,,0.); -- 沿y 平移34.5
glTranslatef(0. , 0.0, 67.8); -- 沿z 平移67.8
旋转操作调 函数 glRotated 或 glRotatef ,前者参数1是角度值 整型,后者是 float型。
glRotated(3,1,0,0); -- 绕 x 轴 转 3 度
glRotated(3,0,1,0); -- 绕 y 轴 转 3 度
glRotated(3,0,0,1); -- 绕 z 轴 转 3 度
这段程序画 三维空间的 NN 个点,每个点用一个边长c1的立方块表示,颜色由z值决定。
for (i = 0; i< NN ; i++)
{
glPushMatrix();
glTranslatef(x[i],y[i],z[i]);
(void) my_color(z_color(z[i]));
(void) glutSolidCube(c1);
glPopMatrix();
}; // end for i
-----------------
注意 平移和转动的顺序,顺序不同,最终结果的位置和状态可能不能同。
必要时,加 glPushMatrix(); glPopMatrix(); 保证它是自己所要的位置转换。
追问
我刚学OpenGl没多久,你讲的平移和旋转函数我也了解了,但是用鼠标控制时,平移效果一旦和旋转放大效果共同使用,就很不理想。你能否给个鼠标操作函数。或者加个qq576487873。
追答
简单办法用GLUT ,并到SGI 找到 ZPR,把ZPR程序加入你的程序,就有Zoom,Pan,Rotate功能。 若只要 鼠标操作函数,用GLUT里的就可以了,不须要ZPR..
GLUT最后一版是3.7.6, 软件包很小。
东莞市易合传动科技有限公司
2024-11-06 广告
2024-11-06 广告
重载旋转平台是我们东莞市易合传动科技有限公司的明星产品之一。该平台采用高强度材料制造,具有卓越的承载能力和稳定性,能够承受极大的径向和轴向负载。其设计精密,旋转灵活,运转平稳,广泛应用于工业自动化、机器人、机床等领域。我们致力于为客户提供优...
点击进入详情页
本回答由东莞市易合传动科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询