`
hbczzsw
  • 浏览: 42708 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Gallery3D中画图时调用glTranslate函数参数赋值过程

J# 
阅读更多
GridDrawManager::drawDisplayItem(RenderView view, GL11 gl, DisplayItem displayItem, Texture texture, int pass,Texture previousTexture, float mixRatio) 函数有下面几句:
      
Java代码 复制代码
  1. Vector3f animatedPosition = displayItem.mAnimatedPosition;   
  2.         float translateXf = animatedPosition.x * camera.mOneByScale;   
  3.         float translateYf = animatedPosition.y * camera.mOneByScale;   
  4.         float translateZf = -animatedPosition.z;  
Vector3f animatedPosition = displayItem.mAnimatedPosition;
        float translateXf = animatedPosition.x * camera.mOneByScale;
        float translateYf = animatedPosition.y * camera.mOneByScale;
        float translateZf = -animatedPosition.z;

调用过程:
->computeVisibleItems(),displayItems[baseIndex + j] = displayItem;Vector3f position = pool.create(); GridCameraManager.getSlotPositionForSlotIndex(i, camera, layout, deltaAnchorPosition, position);//give position value  displayList.setPositionAndStackIndex(displayItem, position, j, true);//raletive position to item

->GridLayer, mDrawManager = new GridDrawManager(context, mCamera, mDrawables, sDisplayList, sDisplayItems, sDisplaySlots);
->GridDrawManager(), mDisplayItems = displayItems;
->drawFocusItems ,DisplayItem[] displayItems = mDisplayItems;
->animatedPosition = displayItem.mAnimatedPosition;
->drawDisplayItem, amAnimatedPosition
->DisplayItem::commit()  amAnimatedPosition.set(mTargetPosition);
-> DisplayItem::set(Vector3f position, int stackIndex, boolean performTransition) mTargetPosition.z =


Java代码 复制代码
  1. public void getPositionForSlotIndex(int slotIndex, int itemWidth, int itemHeight, Vector3f outPosition) {   
  2.         outPosition.x = (slotIndex / mNumRows) * (itemWidth + mSpacingX);   
  3.         outPosition.y = (slotIndex % mNumRows) * (itemHeight + mSpacingY);   
  4.         int maxY = (mNumRows - 1) * (itemHeight + mSpacingY);   
  5.         outPosition.y -= (maxY >> 1);   
  6.         outPosition.z = 0;   
  7.         Log.d("outPosition","slotIndex="+slotIndex+",mNumRows="+mNumRows+",outPosition=("+outPosition.x+","+outPosition.y+","+outPosition.z+")");   
  8.     }  
public void getPositionForSlotIndex(int slotIndex, int itemWidth, int itemHeight, Vector3f outPosition) {
        outPosition.x = (slotIndex / mNumRows) * (itemWidth + mSpacingX);
        outPosition.y = (slotIndex % mNumRows) * (itemHeight + mSpacingY);
        int maxY = (mNumRows - 1) * (itemHeight + mSpacingY);
        outPosition.y -= (maxY >> 1);
        outPosition.z = 0;
        Log.d("outPosition","slotIndex="+slotIndex+",mNumRows="+mNumRows+",outPosition=("+outPosition.x+","+outPosition.y+","+outPosition.z+")");
    }


在gallery3d中矩阵是从上到下、从左到右排列的,在主界面时最多有3行,mNumRows=3,在缩略图界面最多4行mNumRows=4,在查看界面只有一行mNumRows=1
上面函数是计算所绘制项位置的,slotIndex / mNumRows得到的是当前处于多少列,slotIndex % mNumRows得到的是处于多少行。 int maxY = (mNumRows - 1) * (itemHeight + mSpacingY);
        outPosition.y -= (maxY >> 1);是为了在y方向对称,想成屏幕中间是分界线,以上的项y为负,线以下的y为正。
deltaAnchorPosition的赋值过程:
Java代码 复制代码
  1. int currentlyVisibleSlotIndex = getAnchorSlotIndex(ANCHOR_CENTER);->anchorItem = displayItem.mItemRef;-> newSlotIndex = i;->if (currentAnchorSlotIndex != Shared.INVALID && newAnchorSlotIndex != Shared.INVALID) {   
  2.                 layout.getPositionForSlotIndex(newAnchorSlotIndex, itemWidth, itemHeight, deltaAnchorPosition);   
  3.                 oldLayout.getPositionForSlotIndex(currentAnchorSlotIndex, itemWidth, itemHeight, currentSlotPosition);   
  4.                 currentSlotPosition.subtract(sDeltaAnchorPosition);   
  5.                 deltaAnchorPosition.subtract(currentSlotPosition);   
  6.                 deltaAnchorPosition.y = 0;   
  7.                 deltaAnchorPosition.z = 0;   
  8.             }  
int currentlyVisibleSlotIndex = getAnchorSlotIndex(ANCHOR_CENTER);->anchorItem = displayItem.mItemRef;-> newSlotIndex = i;->if (currentAnchorSlotIndex != Shared.INVALID && newAnchorSlotIndex != Shared.INVALID) {
                layout.getPositionForSlotIndex(newAnchorSlotIndex, itemWidth, itemHeight, deltaAnchorPosition);
                oldLayout.getPositionForSlotIndex(currentAnchorSlotIndex, itemWidth, itemHeight, currentSlotPosition);
                currentSlotPosition.subtract(sDeltaAnchorPosition);
                deltaAnchorPosition.subtract(currentSlotPosition);
                deltaAnchorPosition.y = 0;
                deltaAnchorPosition.z = 0;
            }


MediaFeed::run()
onFeedChanged(, onLayout(newSlotIndex, currentlyVisibleSlotIndex, null);
onLayout,  sDeltaAnchorPositionUncommited.set(deltaAnchorPosition);
computeVisibleRange(),sDeltaAnchorPosition.set(sDeltaAnchorPositionUncommited);
deltaAnchorPosition.set(sDeltaAnchorPosition);
deltaAnchorPosition
分享到:
评论
1 楼 huchunming2010 2011-04-28  
deltaAnchorPosition这个变量作用?OnFeedChanged这个方法较为复杂,onlayout这个方法的作用也不是很清楚,请否加QQ781649477讨论

相关推荐

    Gallery3D 图库 缩略图

    当调用 `drawDisplayItem` 函数时,会涉及到对 `glTranslate` 函数的使用,这是OpenGL ES中的一个关键函数,用于在图形坐标系中进行平移操作。在 `drawDisplayItem` 中,首先获取 `DisplayItem` 的动画位置 `...

    openGL 各种坐标矩阵变换

    这些变换可以通过 glTranslate 函数、glRotate 函数和 glScale 函数来实现。例如,glTranslate 函数可以将物体移动到指定的位置,而 glRotate 函数可以将物体旋转到指定的角度。glScale 函数可以将物体缩放到指定的...

    三维坐标画图

    在IT行业中,三维坐标画图是一项重要的技能,特别是在图形学、游戏开发以及可视化应用中。OpenGL是一个广泛应用的跨语言、跨平台的编程接口,用于渲染2D和3D图形。本篇文章将深入探讨如何利用OpenGL进行三维坐标画图...

    常用的OpenGL的函数

    glLoadIdentity(),几何变换函数 glTranslate*()、glRotate*()和 glScale*(),投影变换函数 glOrtho()、glFrustum()和视口变换函数 glViewport()等等。 (3)颜色、光照和材质的函数,如设置颜色模式函数 glColor*...

    opengl函数与范例

    在学习OpenGL时,范例代码尤其重要,因为它们可以帮助理解如何将这些函数组合在一起以创建动态图形。"opengl函数与范例.pdf"很可能是包含这些实例的文档,可能包括简单的Hello World程序、绘制基本几何体、纹理映射...

    OPENGL图形函数库

    这些状态在绘制时会影响结果,开发者可以通过调用相应的函数来改变它们。 7. 着色语言GLSL: OpenGL着色语言(GLSL)允许开发者编写运行在GPU上的自定义着色器,实现复杂的光照、纹理混合等效果。GLSL提供了顶点...

    opengl 观察参数的设置

    OpenGL是计算机图形学中广泛使用的应用编程接口(API),它允许开发者创建复杂的3D图形和交互式视觉效果。观察参数的设置是OpenGL编程中的关键部分,因为它直接影响到用户看到的场景视角和效果。在这个主题中,我们...

    二维图形变换(VC++)

    在OpenGL中,我们可以通过glTranslate函数实现,参数为X、Y轴的位移量。 2. 旋转:图形的旋转是围绕一个固定点(通常为中心点)进行的。OpenGL中的glRotate函数接受一个旋转角度和旋转轴向量(默认Z轴)来实现2D...

    OpenGL函数介绍

    本文将详细介绍OpenGL库中的各类函数及其用途。 #### 二、OpenGL库函数分类 OpenGL库函数大致可分为核心库函数和扩展库函数两大类,其中核心库函数是最基本也是最重要的部分,主要包括以下几类: 1. **核心库**...

    0openGl函数集

    错误检查在开发过程中至关重要,`glGetError()`函数用于检测并报告OpenGL的运行时错误。`glGetString(GL_VERSION)`则返回当前OpenGL版本信息。 文件"www.pudn.com.txt"可能包含更多关于OpenGL函数集的文档或示例...

    opengl_function.rar_OpenGL函数_opengl_visual c

    OpenGL函数库是计算机图形学中的一个关键组件,用于在各种操作系统和硬件平台上创建复杂的3D和2D图形。"opengl_function.rar"这个压缩包显然包含了一份关于OpenGL函数的详细说明,特别针对使用Visual C++的开发者。...

    opengl-function.rar_OPenGL函数查询

    在实际应用中,配合索引搜索功能,用户可以快速定位到特定函数,无论是在编写代码时需要查阅,还是在解决运行时问题时查找解决方案,都十分便利。因此,这份手册对于任何涉及OpenGL图形编程的人来说,都是一份宝贵的...

    OpenGL 常见函数功能查询

    ### OpenGL 常见函数功能查询 #### 一、OpenGL基础绘图函数 **glshadeModel**: 设置平滑或平面的着色模式。 - **功能描述**:此函数用于设置物体表面的着色方式,有两种模式可以选择:GL_SMOOTH(平滑)和GL_FLAT...

    OpenGL函数参考(chm格式)及Glut参考手册(pdf格式)及WindowsAPI大全(chm格式)

    OpenGL函数参考、GLUT参考手册和Windows API大全是IT领域中三个重要的参考资料,尤其是对于进行图形编程和系统级开发的人员来说,它们是不可或缺的知识库。 OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D、3D...

    OPENGL API 函数说明

    1. **视图变换**:OpenGL提供了一系列函数如`glTranslate`、`glRotate`、`glScale`来执行视图变换,帮助我们将物体在3D空间中的位置、旋转和缩放进行控制。现代OpenGL则更倾向于使用矩阵栈和`glMultMatrix`进行更...

    opengl函数大全

    OpenGL 函数大全是 OpenGL 中的核心组件之一,提供了大量的函数来处理图形渲染、几何图形、材质、光照、像素操作等方面的任务。 第一章 GL 库函数 OpenGL 的 GL 库函数提供了许多基本的图形处理函数,包括选择平面...

    openGL函数查询

    ### OpenGL函数查询知识点详解 #### 一、GL库函数与颜色管理 - **`glshadeModel`**: 用于选择平面明暗模式(GL_FLAT)或光滑明暗...通过这些函数,开发者可以构建出复杂的3D图形应用和游戏,实现各种高级图形效果。

    QT绘制3D条形图源码.zip

    2. **初始化OpenGL上下文**:在QT应用中,创建一个QOpenGLWidget实例并重写paintEvent()方法,这个方法会在需要更新画布时被调用。 3. **设置投影和视口**:使用glMatrixMode()和glLoadIdentity()函数来切换和重置...

    NeHe.OpenGL中文教程 和常用函数

    OpenGL是计算机图形学中广泛使用的应用编程接口(API),它允许程序员创建复杂的3D图形和交互式应用程序。NeHe Productions是由Jeffrey Ventrella创建的一系列OpenGL教程,旨在帮助初学者和中级开发者掌握OpenGL编程...

Global site tag (gtag.js) - Google Analytics