GridDrawManager::drawDisplayItem(RenderView view, GL11 gl, DisplayItem displayItem, Texture texture, int pass,Texture previousTexture, float mixRatio) 函数有下面几句:
- Vector3f animatedPosition = displayItem.mAnimatedPosition;
-
float translateXf = animatedPosition.x * camera.mOneByScale;
-
float translateYf = animatedPosition.y * camera.mOneByScale;
-
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 =
- 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+")");
- }
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的赋值过程:
- 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;
- }
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
相关推荐
当调用 `drawDisplayItem` 函数时,会涉及到对 `glTranslate` 函数的使用,这是OpenGL ES中的一个关键函数,用于在图形坐标系中进行平移操作。在 `drawDisplayItem` 中,首先获取 `DisplayItem` 的动画位置 `...
这些变换可以通过 glTranslate 函数、glRotate 函数和 glScale 函数来实现。例如,glTranslate 函数可以将物体移动到指定的位置,而 glRotate 函数可以将物体旋转到指定的角度。glScale 函数可以将物体缩放到指定的...
在IT行业中,三维坐标画图是一项重要的技能,特别是在图形学、游戏开发以及可视化应用中。OpenGL是一个广泛应用的跨语言、跨平台的编程接口,用于渲染2D和3D图形。本篇文章将深入探讨如何利用OpenGL进行三维坐标画图...
glLoadIdentity(),几何变换函数 glTranslate*()、glRotate*()和 glScale*(),投影变换函数 glOrtho()、glFrustum()和视口变换函数 glViewport()等等。 (3)颜色、光照和材质的函数,如设置颜色模式函数 glColor*...
在学习OpenGL时,范例代码尤其重要,因为它们可以帮助理解如何将这些函数组合在一起以创建动态图形。"opengl函数与范例.pdf"很可能是包含这些实例的文档,可能包括简单的Hello World程序、绘制基本几何体、纹理映射...
这些状态在绘制时会影响结果,开发者可以通过调用相应的函数来改变它们。 7. 着色语言GLSL: OpenGL着色语言(GLSL)允许开发者编写运行在GPU上的自定义着色器,实现复杂的光照、纹理混合等效果。GLSL提供了顶点...
OpenGL是计算机图形学中广泛使用的应用编程接口(API),它允许开发者创建复杂的3D图形和交互式视觉效果。观察参数的设置是OpenGL编程中的关键部分,因为它直接影响到用户看到的场景视角和效果。在这个主题中,我们...
在OpenGL中,我们可以通过glTranslate函数实现,参数为X、Y轴的位移量。 2. 旋转:图形的旋转是围绕一个固定点(通常为中心点)进行的。OpenGL中的glRotate函数接受一个旋转角度和旋转轴向量(默认Z轴)来实现2D...
本文将详细介绍OpenGL库中的各类函数及其用途。 #### 二、OpenGL库函数分类 OpenGL库函数大致可分为核心库函数和扩展库函数两大类,其中核心库函数是最基本也是最重要的部分,主要包括以下几类: 1. **核心库**...
错误检查在开发过程中至关重要,`glGetError()`函数用于检测并报告OpenGL的运行时错误。`glGetString(GL_VERSION)`则返回当前OpenGL版本信息。 文件"www.pudn.com.txt"可能包含更多关于OpenGL函数集的文档或示例...
OpenGL函数库是计算机图形学中的一个关键组件,用于在各种操作系统和硬件平台上创建复杂的3D和2D图形。"opengl_function.rar"这个压缩包显然包含了一份关于OpenGL函数的详细说明,特别针对使用Visual C++的开发者。...
在实际应用中,配合索引搜索功能,用户可以快速定位到特定函数,无论是在编写代码时需要查阅,还是在解决运行时问题时查找解决方案,都十分便利。因此,这份手册对于任何涉及OpenGL图形编程的人来说,都是一份宝贵的...
### OpenGL 常见函数功能查询 #### 一、OpenGL基础绘图函数 **glshadeModel**: 设置平滑或平面的着色模式。 - **功能描述**:此函数用于设置物体表面的着色方式,有两种模式可以选择:GL_SMOOTH(平滑)和GL_FLAT...
OpenGL函数参考、GLUT参考手册和Windows API大全是IT领域中三个重要的参考资料,尤其是对于进行图形编程和系统级开发的人员来说,它们是不可或缺的知识库。 OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D、3D...
1. **视图变换**:OpenGL提供了一系列函数如`glTranslate`、`glRotate`、`glScale`来执行视图变换,帮助我们将物体在3D空间中的位置、旋转和缩放进行控制。现代OpenGL则更倾向于使用矩阵栈和`glMultMatrix`进行更...
OpenGL 函数大全是 OpenGL 中的核心组件之一,提供了大量的函数来处理图形渲染、几何图形、材质、光照、像素操作等方面的任务。 第一章 GL 库函数 OpenGL 的 GL 库函数提供了许多基本的图形处理函数,包括选择平面...
### OpenGL函数查询知识点详解 #### 一、GL库函数与颜色管理 - **`glshadeModel`**: 用于选择平面明暗模式(GL_FLAT)或光滑明暗...通过这些函数,开发者可以构建出复杂的3D图形应用和游戏,实现各种高级图形效果。
2. **初始化OpenGL上下文**:在QT应用中,创建一个QOpenGLWidget实例并重写paintEvent()方法,这个方法会在需要更新画布时被调用。 3. **设置投影和视口**:使用glMatrixMode()和glLoadIdentity()函数来切换和重置...
OpenGL是计算机图形学中广泛使用的应用编程接口(API),它允许程序员创建复杂的3D图形和交互式应用程序。NeHe Productions是由Jeffrey Ventrella创建的一系列OpenGL教程,旨在帮助初学者和中级开发者掌握OpenGL编程...