使用OpenGL我试图绘制我校园的原始地图.

任何人都可以向我解释通常如何实现平移,缩放和旋转?

例如,通过平移和缩放,我只是调整视口吗?所以我绘制并绘制构成我的地图的所有线条,然后当用户点击并拖动时,它会调整我的视口?

对于平移,它是否会移动我的视口的x / y值,而对于缩放是否会增加/减少我的视口一些量?轮换怎么样?

为了轮换,我是否必须为代表我校园地图的每条折线进行仿射变换?在尺寸合适的地图上飞行,这不是很昂贵吗?

或者,视口是否保持不变并且平移/缩放/旋转是否在其他方面完成?

例如,如果您转到此link,您将看到他通过修改视口来描述平移和缩放我上面的具体方式.

这不正确吗?

解决方法

它们是通过在绘制场景之前应用一系列glTranslate,glrotate命令(代表摄像机位置和方向)来实现的. (从技术上讲,你正在旋转整个场景!)

有像gluLookAt这样的实用函数,它可以抽象出一些关于此的细节.

为简化事物,假设您有两个向量代表您的相机:位置和方向.

gluLookAt获取位置,目标和向上矢量.

如果实现矢量类,destinaion =位置方向应该为您提供目标点.

再简单一点,您可以假设向上矢量始终为(0,1,0)

然后,在渲染场景中的任何内容之前,加载单位矩阵并调用gluLookAt

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt( source.x,source.y,source.z,destination.x,destination.y,destination.z,0 );

然后开始绘制对象

您可以通过稍微向右或向左更改位置来让用户跨越.旋转有点复杂,因为你必须旋转方向向量.假设你正在旋转的是相机,而不是场景中的某些物体.

一个问题是,如果你只有一个方向向量“向前”,你如何移动它?左右在哪里?

在这种情况下我的方法是采用“方向”和(0,0)的交叉乘积.

现在,您可以使用以下方法将相机向左和向右移动:

position = position + right * amount; //amount < 0 moves to the left

您可以使用“方向向量”向前移动,但IMO最好将移动限制在水平平面上,因此获取前向向量的方式与获得正确向量的方式相同:

forward = cross( up,right )

说实话,这有点像一种hackish方法.

正确的方法是使用更“复杂”的数据结构来表示相机的“方向”,而不仅仅是前向方向.但是,既然你刚刚开始,那么一次采取一步是件好事.

opengl – 缩放,平移和旋转工作如何?的更多相关文章

  1. 为什么android浏览器视口比手机的实际屏幕尺寸小得多,即使使用width = device-width?

    我想问一下为什么我的HTCDesireHD浏览器报告视口的宽度为369px,即使屏幕的实际像素大小为480×800WVGA.我在我的页面中使用这个CSS样式:你能解释一下这个奇怪的行为,以及如何强制Android浏览器实际将视口的宽度设置为480px而不是奇怪的369px?

  2. Android WebView视口

    使用下面的html我预计绿色矩形只占据屏幕的一半,但实际上它占据整个屏幕宽度.我为视口宽度尝试了其他值,没有运气.任何想法为什么它不起作用?HTMLXML解决方法我有同样的问题,找到了答案!在您的情况下,您需要:

  3. 详解如何使用rem或viewport进行移动端适配

    这篇文章主要介绍了详解如何使用rem或viewport进行移动端适配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. 如何利用JS检查元素是否在视口内

    这篇文章主要给大家介绍了关于如何利用JS检查元素是否在视口内的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. windows-mobile – meta“viewport”device-width:Opera Mobile 9.7(10作品)错误的宽度小

    对于我当前的移动网络项目,我使用Meta“viewport”标签来指示移动浏览器使用设备宽度为1:1的比例:这适用于IE移动,iPhoneSafari甚至Opera10测试版,但它不在Opera9.7上,默认情况下安装在HTCHD2上.HTCHD2的设备尺寸为480×800,因此视口在纵向模式下的宽度应为480.但显而易见,Operamobile9.7(也许是9.5)设置了一个错误的宽度,所以之后

  6. Angular 4 – 当div进入视口时如何触发动画?

    我一直在使用Angular4构建一个新站点,我正在尝试重新创建一个效果,当div变为可见时然后可以触发角度动画以滑动div形式双方.我以前在Angular4之外使用jQuery已经能够做到这一点,但我想尝试使用原生的Angular4动画创建相同的效果.任何人都可以向我提供有关如何在div进入视图时触发动画的建议(即,当它进入视口时向下滚动到页面的下半部分?).我已经编写了幻灯片动画但我不知道如何在以后将div显示到视口时使用滚动触发它.感谢大家!

  7. jquery – scrollTop在移动Safari中不起作用

    解决方法我想你试图以错误的方式解决事情.只需确保您的表单字段在移动视口上具有font-size:16px,这样Safari将不会放大.如果您有位置,则ScrollTop可能无法正常工作:固定在容器上.

  8. jQuery:移动窗口视口来显示新鲜的切换元素

    我有一个jQuery在doc准备好的代码片段切换一个包含textarea的div:点击链接时,切换工作正常.我遇到的问题是,如果div#addnote-area在浏览器当前的视口下方,那么它会显示出来.我想要用户的光标去文本区域,整个textarea可以在窗口中查看.Clickheretoseeanimagehttp://i50.tinypic.com/5ousuv.png解决方法看看scroll

  9. ios – MKMapRect并显示跨越第180个子午线的地图叠加层

    如何正确构建跨越180度子午线的MKMapRect?

  10. javascript – 如何将当前视图的视口从OpenLayers中获取为几何,边框或wkt?

    我试图找到一些提示,我应该搜索这个主题,但我没有找到–我花了好几个小时在这个.我也尝试从当前显示的视口从OpenLayers映射中获取当前坐标,以仅添加位于当前视口当前边界框中的这些向量.解决方法对于OpenLayers2:…将返回一个坐标数组,表示范围的边界框.

随机推荐

  1. 微信小程序canvas实现水平、垂直居中效果

    这篇文章主要介绍了小程序中canvas实现水平、垂直居中效果,本文图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 使用HTML5做的导航条详细步骤

    这篇文章主要介绍了用HTML5做的导航条详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. H5最强接口之canvas实现动态图形功能

    这篇文章主要介绍了H5最强接口之canvas实现动态图形功能,需要的朋友可以参考下

  4. Canvas高级路径操作之拖拽对象的实现

    这篇文章主要介绍了Canvas高级路径操作之拖拽对象的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. html5视频自动横过来自适应页面且点击播放功能的实现

    这篇文章主要介绍了h5视频自动横过来自适应页面且点击播放,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. 详解HTML5中的picture元素响应式处理图片

    这篇文章主要介绍了详解HTML5中的picture元素响应式处理图片,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. canvas像素点操作之视频绿幕抠图

    这篇文章主要介绍了canvas像素点操作之视频绿幕抠图的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. html5利用canvas实现颜色容差抠图功能

    这篇文章主要介绍了html5利用canvas实现颜色容差抠图功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  9. canvas绘制视频封面的方法

    这篇文章主要介绍了canvas绘制视频封面的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. HTML5拖拽功能实现的拼图游戏

    本文通过实例代码给大家介绍了HTML5拖拽功能实现的拼图游戏,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧

返回
顶部