自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (49)
  • 收藏
  • 关注

原创 android性能分析之内存优化

命令android性能分析之常用命令查看系统内存状态cat /proc/meminfoadb shell procrank (pid)adb shell dumpsys meminfo/cpuinfo <package_name>/pid内查看本地层程序top -t -m 5 -n 2 查询Cpu/内存的基本使用adb shell cat /proc/buddyinfoadb shell cat /proc/meminfo // 查看更加详细的内存信息adb shell c

2021-01-25 13:00:30 528

原创 SurfaceFlinger学习笔记(六)之View Layout Draw过程分析

视图的绘制工作大概分为Measure、Layout和Draw三个主要的流程。而启动这些流程的一个入口则是ViewRootImpl类的performTraversals,具体请参考应用启动流程DecorView在PhoneWindow中被创建,在Activity的onResume方法回调的时候继而调用Activity的makeVisible()方法,Activity对应的PhoneWindow对象才被WindowManager添加WindowManager.addView()->WindowMan

2020-05-19 12:47:13 1189

原创 C++11总结

nullptr空指针由新关键字nullptr[④]表示,类似于Java中的null。Raw字符串Raw是为了解决正则表达式里那些烦人的转义字符\而提供的解决方法在C++中,如果使用转义字符串来表达,则变成(’(?:[ˆ\\’]|\\.)∗’|"(?:[ˆ\\"]|\\.)∗")|。使用转义字符后,整个字符串变得很难看懂了。如果使用Raw字符串,改成R"dfp((’(?:[ˆ\’...

2019-09-05 21:03:15 2775

原创 android性能分析之常用命令

性能分析:-Android studio的工具Memory Monitor工具主要是用来监测APP的内存分配情况,判断是否存在内存泄漏Dump Java Heap定位内存泄漏, 生成.hprofEclipse: ddms->update heap->cause gc生成总内存信息,然后会有data object-运行时错误分析/data/tombstones全志平台:/m...

2019-06-16 11:30:51 3019

原创 SurfaceFlinger学习笔记(七)之SKIA

skia绘制流程

2023-01-30 19:36:44 2893

原创 synergy跨平台键鼠共享

Synergy官方版是一款功能强大的鼠标键盘共享工具。通过Synergy软件用户可以在多台电脑之间共享一个鼠标与键盘,帮助用户同时操纵多部计算机,提高操作效率。支持windows、Linux、mac等操作系统。

2022-10-13 18:49:20 2550 1

原创 android性能分析之simpleperf

android性能分析之Systraceandroid性能分析之常用命令Android Studio 包含 Simpleperf 的图形前端,记录在使用 CPU 性能剖析器检查 CPU 活动中。大多数用户更喜欢使用该图形前端,而不是直接使用 Simpleperf。Android Profiler分析(一)概述Android Profiler分析(二) Memory ProfilerAndroid Profiler分析(三) CPU Profiler如果您更喜欢使用命令行,可以直接使用 Simpl

2021-03-05 15:59:27 7780

原创 Zygote pre-fork线程池源码分析

前言在Android Q上,google为了加快应用的启动速度。在zygote fork阶段,采用了线程池的方式,来加快fork的过程。首先,如果让我们自己做,肯定会选择java的线程池模型,先创建N个进程,当需要fork的时候,取出来一个来bindapplication,同时进行补充进程池。但是google的做法并不是这样,google的思路是:**同时fork N个进程,监听同一个socket fd,当收到消息的时候,只有一个进程会被唤醒,来处理这个消息。**google利用了这样的一个机制,来进

2021-01-25 13:00:20 881

原创 Android OomAdj

Android系统的设计理念正是希望应用进程能尽量长时间地存活,以提升用户体验。应用首次打开比较慢,这个过程有进程创建以及Application等信息的初始化,所以应用在启动之后,即便退到后台并非立刻杀死,而是存活一段时间,这样下次再使用则会非常快(cached进程和empty进程)。对于APP同样希望自身尽可能存活更长的时间。物极必反,系统处于低内存的状态下,手机性能会有所下降;系统继续放任所有进程一直存活,系统内存很快就会枯竭而亡,那么需要合理地进程回收机制。谈到优先级,可能有些人会想到Linux进程

2020-12-14 10:27:56 2908

原创 Android OomAdj(二)Cached进程、Empty进程和mem_factor、Trim

空进程(empty)和缓存进程(cached)cached和empty主要是区别是否有Activity(cache有activity)empty进程没有任何东西在内运行的进程(不含任何活动应用组件的进程),作用是提高该程序下次的启动速度或者记录程序的一些历史信息Cached进程cache进程和empty有以下四个进程级别PROCESS_STATE_CACHED_EMPTY这个state级别主要是在computeOomAdjLocked函数中更新,依次排除完是否为PROCESS_STAT

2020-12-14 10:26:33 1631

原创 内存管理(二)Zone和Watermark

概览为了支持NUMA模型,也即CPU对不同内存单元的访问时间可能不同,此时系统的物理内存被划分为几个节点(node), 一个node对应一个内存簇bank,即每个内存簇被认为是一个节点首先, 内存被划分为结点. 每个节点关联到系统中的一个处理器, 内核中表示为pg_data_t的实例. 系统中每个节点被链接到一个以NULL结尾的pgdat_list链表中,而其中的每个节点利用pg_data_tnode_next字段链接到下一节.而对于PC这种UMA结构的机器来说, 只使用了一个成为contig_pa

2020-12-04 15:10:06 1775 1

原创 内存管理(三)伙伴系统

概览Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生。Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题Buddy算法最主要的的特点任何时候区域里的空闲内存都能以2的n次方进行拆分或合并。伙伴系统的宗旨就是用最小的内存块来满足内核的对于内存的请求。在最初,只有一个块,也就是整个内存,假如为1M大小,而允许的最小块为64K,那么当我们申请一块200K大小的内存时,就要先将1M的块分裂成两等分,各为512K,这两分之间的关系就称为伙伴,然后再将第

2020-12-04 11:28:19 627

原创 内存管理概览

buddy伙伴系统Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生。Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题Buddy算法最主要的的特点任何时候区域里的空闲内存都能以2的n次方进行拆分或合并。伙伴系统的宗旨就是用最小的内存块来满足内核的对于内存的请求。在最初,只有一个块,也就是整个内存,假如为1M大小,而允许的最小块为64K,那么当我们申请一块200K大小的内存时,就要先将1M的块分裂成两等分,各为512K,这两分之间的关系就称为伙

2020-12-04 11:25:49 504

原创 androidQ/R lmkd介绍

一、简介lmkd(Low Memory Killer Daemon)是低内存终止守护进程,用来监控运行中android系统内存的状态,通过终止最不必要的进程来应对内存压力较高的问题,使系统以可接受的水平运行。二、背景之前Android 使用内核中的 lowmemorykiller 驱动程序来监控系统内存压力,该驱动程序是一种依赖于硬编码值的严格机制。从内核 4.12 开始,lowmemorykiller 驱动程序已从上游内核中移除,用户空间 lmkd会执行内存监控以及进程终止任务。用户空间 lmkd

2020-11-28 15:04:55 19269 7

原创 android dumpsys命令源码分析

初始化* frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java* ServiceManager.addService("meminfo", new MemBinder(this), /* allowIsolated= */ false, DUMP_FLAG_PRIORITY_HIGH);ServiceManager.addService("gfx

2020-09-28 15:32:52 1767

原创 android IO Prefetch源码分析

I/O Prefetcher是高通本身提供的一套优化方案,可以用在Android手机App冷启动的时候。本文基于android Q主要分libqti-iopd、vendor.qti.hardware.iop@2.0-impl、libqti-iopd-client_system三个so,编译后在/vendor/lib/目录下,其中libqti-iopd、vendor.qti.hardware.iop@2.0-impl为服务端首先看服务端的实现IO Prefetcher的初始化vendor.qti.h

2020-09-08 21:53:49 6750

原创 android synchronized原理分析(一) java HotSpot

public class SyncLock { public void testBolokCode(){ synchronized (SyncLock.this){ } } public synchronized void testBolokMethod(){ } public static synchronized void testStaticBolokMethod(){ }}执行javac SyncLock.java

2020-08-01 14:12:52 617

原创 android synchronized原理分析(二) Monitor

public class SyncLock { public void testBolokCode(){ Thread thread1 = new Thread(new Runnable() { @Override public void run() { synchronized (SyncLock.this){ try{

2020-07-30 21:24:31 1423

原创 android input(二) InputDispatcher

唤醒InputDispatcher以Motion事件的分发过程来进行举例void InputDispatcher::notifyMotion(const NotifyMotionArgs* args) { //检查Motion事件的参数是否有效,对于motion事件,主要时校验触控点的数量与ID是否在合理范围 if (!validateMotionEvent(args->action, args->actionButton, args->poi

2020-06-16 21:57:42 5075

原创 android性能分析之Systrace

启动-SystraceSystrace 是 Android4.1 中新增的性能数据采样和分析工具。它可帮助开发者收集 Android 关键子系统(如 SurfaceFlinger/SystemServer/Kernel/Input/Display 等 Framework 部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况(如surfaceflinger

2020-05-15 10:32:14 5755

原创 AndroidP/Q/R/S编译系统

Android编译环境的初始化过程,在编译环境初始化完成后,我们就可以用m/mm/mmm/make命令编译源代码了。当然,这要求每一个模块都有一个Android.mk文件。Android.mk实际上是一个Makefile脚本,用来描述模块编译信息。Android编译系统通过整合Android.mk文件完成编译过程。mmm命令的编译过程,需要依赖会make命令全部模块编译完成,下面使用编译mmm.........

2020-05-11 18:15:47 35070 13

原创 SurfaceFlinger学习笔记(五)之HWUI

渲染机制的更新,Android提出了硬件加速的机制,其作用就是将2D的绘图操纵,转换为对应的3D的绘图操纵,这个转换的过程,我们把它叫做录制。需要显示的时候,再用OpenGLES通过GPU去渲染。界面创建时,第一次全部录制,后续的过程中,界面如果只有部分区域的widget更新,只需要重新录制更新的widget。录制好的绘图操纵,保存在一个显示列表DisplayList中,需要真正显示到界面的时候,直接显示DisplayList中的绘图 操纵。这样,一方面利用GPU去渲染,比Skia要快;另一方面,采用Dis

2020-04-28 15:33:40 6035 1

原创 SurfaceFlinger学习笔记(一)应用启动流程

用户在Launcher程序里点击应用图标时,会通知ActivityManagerService启动应用的入口Activity,ActivityManagerService则会通知Zygote进程孵化出应用进程,然后在这个应用进程里执行ActivityThread的main方法。应用进程接下来通知ActivityManagerService应用进程已启动,ActivityManagerService...

2020-04-21 14:00:19 3666 1

原创 SurfaceFlinger学习笔记(二)之Surface

* frameworks/base/tests/HwAccelerationTest/src/com/android/test/hwui/HardwareCanvasSurfaceViewActivity.javapublic class HardwareCanvasSurfaceViewActivity extends Activity implements Callback { p...

2020-04-16 18:45:08 1991

原创 Android Hidl笔记

HAL 类型在 Android 8.0 及更高版本中,较低级别的层已重新编写以采用更加模块化的新架构。搭载 Android 8.0 或更高版本的设备必须支持使用 HIDL 语言编写的 HAL,下面列出了一些例外情况。这些 HAL 可以是绑定式 HAL 也可以是直通式 HAL。Android R 也支持使用 AIDL 编写的 HAL。所有 AIDL HAL 均为绑定式。绑定式 HAL。以 H...

2020-04-16 12:21:35 2944

原创 SurfaceFlinger学习笔记(三)之SurfaceFlinger进程

应用进程ComposerService:定义:frameworks\native\include\private\gui\ComposerService.h实现:frameworks\native\libs\gui\SurfaceComposerClient.cpp作用:通过Singleton,定义单例类,初始化时候调用connectLocked,获取SurfaceFlinger服务代理...

2020-04-15 20:00:50 5952

原创 C/C++面试

Clinux调试工具编译阶段nm:获取二进制文件里面包含的符号。用户跟踪链接错误gdb: debug程序运行gcc –gldd: 显示程序需要使用的动态库和实际使用的动态库运行时:strace: 显示程序调用的系统调用。定位进程异常退出,定位共享内存异常-c计算各个系统调用累计占用的时间-T –tt显示单个系统调用的开始时间、执行时间-e trace=ipc 选项,让st...

2020-03-25 13:28:24 339

原创 Openssl android编译静态库

准备编译脚本到 https://github.com/leenjewel/openssl_for_ios_and_android 下载别人写好的编译环境配置脚本build-openssl4android.sh 中,默认的OpenSSL 版本是 openssl-1.1.0f,改成最新的即可。LIB_NAME=“openssl-1.1.0f”脚本会自动下载 openssl 1.1.1e,需要...

2020-01-17 17:23:29 925

转载 Android中apk加固完善篇之内存加载dex方案实现原理(不落地方式加载)

Android中apk加固完善篇之内存加载dex方案实现原理(不落地方式加载) 转载 ...

2020-01-15 19:53:27 1131 2

原创 Java笔记-JNI各种签名

生成java方法的JNI签名javap -p -s org.jemen.test.Test签名:类描述符开头的’L’与结尾的’;'必须要有;数组描述符,开头的’['必须有;方法描述符规则: “(各参数描述符)返回值描述符”,其中参数描述符间没有任何分隔符号基本类型签名引用数据类型的转换...

2020-01-02 17:55:37 174

原创 安全策略

app加固1、混淆策略代码混淆、资源混淆2、应用的签名校验在应用application中校验app签名,如果不正确测退出3、反调试异常检测防止so和应用被调试4、应用的加固策略a、dex加固:dex加壳、函数抽取、指令抽取、字符串加密b、so加固:section加密、函数加密FOTA加固对FOTA包做签名运算,然后对签名做加密对FOTA包整体做加密,然后在计算签名(...

2019-12-02 11:01:14 266

原创 APP加固总结

dx工具:转换class未dex,在build-tools/*/dx目录下执行命令 : dx --dex --output=Hello.dex Hello.class

2019-11-29 16:46:00 1922

原创 Selinux Rule

Selinux Code:platform/external/sepolicy查看Selinux状态adb shell getenforceroot@E2303:/ # getenforceEnforcingroot@SGP321:/ # getenforcePermissive关掉Selinux, 查看问题是否和Selinux相关device/qcom/xxx/Bo...

2019-10-27 14:44:56 544

原创 repo使用

Repo使用命令repo init –u <URL> [<OPTIONS>]初始化命令-u: 指定连接到的manifest仓库地址-m: 选择仓库中某个manifest文件,如果没有设置,就使用default.xml-b: 选择一个maniest仓库中的一个特殊的分支或修正版本repo init -u “ssh://zhangzhihao@172.30.3....

2019-10-22 09:51:59 1195

原创 面试-android

- 工具的使用调查内存泄漏工具: LeakCanary如果只关注activity的内存泄漏,那么在Application中onCreate加入RefWatcher ref = LeakCanary.install(this);就OK了,会通过notification通知如果还关注fragment的泄漏情况,那么Application加上RefWatcher,然后在对应fragment页面中o...

2019-10-10 09:35:56 2195 1

原创 android逆向总结

签名signapk.jar是Android源码包中的一个签名工具。 代码位于Android源码目录下的/build/tools/signapk/SignApk.java文件中,源码编译后可以在/out/host/linuxx86/framework目录中找到它。 Android源码中提供的签名文件testkey.pk8与testkey.x509.pem,它们位于Android源码的build/t...

2019-09-22 12:25:46 143

原创 Android编译环境搭建

修改/etc/apt/source.list,添加源deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiversedeb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiversedeb...

2019-08-26 18:32:59 1206

原创 Android LowmemoryKiller机制

为什么引入LowmemoryKiller?进程的启动分冷启动和热启动,当用户退出某一个进程的时候,并不会真正的将进程退出,而是将这个进程放到后台,以便下次启动的时候可以马上启动起来,这个过程名为热启动,这也是Android的设计理念之一。这个机制会带来一个问题,每个进程都有自己独立的内存地址空间,随着应用打开数量的增多,系统已使用的内存越来越大,就很有可能导致系统内存不足。为了解决这个问题...

2019-08-15 15:57:56 848

原创 热修复和动态加载

热修复目前存在比较好的解决方案是热修复技术,即生成差一补丁包后,直接将更新补丁上传到云端,此时App从云端下拉补丁直接应用生效,即直接在用户已安装的程序中修复bug,准确而言它是一个亡羊补牢的措施。比较有代表性的的App是阿里系的优酷和支付宝,腾讯系的微信,两者使用的都是自行研发的方案。可解决的典型问题:刚发布的应用出现闪退、ANR等bug,及时修复 。及时推送一些小的功能给用户使...

2019-07-01 13:55:43 495

原创 android性能优化之布局优化

概述根据Google官方出品的Android性能优化典范,60帧每秒是目前最合适的图像显示速度,事实上绝大多数的Android设备也是按照每秒60帧来刷新的。为了让屏幕的刷新帧率达到60fps,我们需要确保在时间16ms(1000/60Hz)内完成单次刷新的操作(包括measure、layout以及draw),这也是Android系统每隔16ms就会发出一次VSYNC信号触发对UI进行渲染的原...

2019-06-25 20:07:28 648

个人常用命令-android.code-workspace

个人常用命令-android.code-workspace

2023-11-06

quickbuild.tar.gz

framework快速编译脚本 当前Q编译framework的时间非常久, 编译一次需要10~30分钟, 这样对于我们本地多次修改代码编译调试就效率非常低

2020-05-28

android vold模块详解

Uevent 简介 NetLink 简介 MountService 功能介绍: MountService 同 StroageManager 的交互 MountService 同 Vold 的交互

2020-04-28

阿里巴巴出品--《深入探索Android热修复技术原理》.pdf

第1 章 热修复技术介绍 01 1.1 什么是热修复 02 1.2 基本概念 03 1.3 技术积淀 06 1.4 技术概览 08 1.5 本章小结 14 第2 章 热替换代码修复 15 2.1 底层热替换原理 16 2.2 突破底层差异的方法 25 2.3 编译期与语言特性的影响 36 2.4 本章小结 75 第3 章 冷启动代码修复 77 3.1 冷启动类加载原理 78 3.2 多态对冷启动类加载的影响 91 3.3 Dalvik 下完整dex 方案的新探索 99 3.4 入口类与初始化时机的选择 110 3.5 本章小结 119 第4 章 资源热修复技术 121 4.1 普遍的实现方式 122 4.2 资源文件的格式 128 4.3 运行时资源的解析 130 4.4 另辟蹊径的资源修复方案 134 4.5 更优雅地替换AssetManager 139 4.6 一个意料之外的资源问题 143 4.7 本章小结 158 第5 章 so 库热修复技术 159 5.1 so 库加载原理 160 5.2 so 库热部署实时生效的可行性分析 162 5.3 so 库冷部署重启生效实现方案 169 5.4 如何正确复制补丁so 库 173 5.5 本章小结 174 第6 章 其他优秀的热修复方案 175 6.1 Dexposed 浅析 176 6.2 AndFix 探索历程 185 6.3 Amigo 核心解读 193 6.4 腾讯系热修复方案简介 202 第7 章 热修复技术的未来展望 209 7.1 热修复的专业性 210 7.2 对Android 生态的影响 211 7.3 Android 与iOS 热修复的不同 212 7.4 未来,无限可能 213 附录A Sophix 方案比较 215 A.1 Sophix 方案纵向比较 216 A.2 Sophix 方案横向比较 217

2019-05-31

android sliding menu 滑动菜单

android sliding menu 滑动菜单

2015-06-11

android 下拉刷新加载库

android 下拉刷新加载库 pulltorefresh

2015-06-11

android datetimepicker 时间选择控件

android datetimepicker 时间选择控件

2015-06-11

DevicePolicyManager屏幕锁定android源码

DevicePolicyManager屏幕锁定android源码

2015-06-11

精通LINUX设备驱动程序开发

第1章 引言    第2章 内核    第3章 内核组件    第4章 基本概念    第5章 字符设备驱动程序    第6章 串行设备驱动程序    第7章 输入设备驱动程序    第8章 I2C协议   第9章 PCMCIA和CF    第10章 PCI    第11章 USB   第12章 视频驱动程序    第13章 音频驱动程序    第14章 块设备驱动程序    第15章 网络接口卡    第16章 Linux无线设备驱动    第17章 存储技术设备    第18章 嵌入式Linux    第19章 用户空间的驱动程序    第20章 其他设备和驱动程序    第21章 调试设备驱动程序    第22章 维护与发布    第23章 结束语    附录A Linux汇编    附录B Linux与BIOS    附录C seq文件

2012-03-16

新编Photoshop.CS4从入门到精通

新编Photoshop.CS4从入门到精通,pdf高清版

2011-10-12

最长的一帧

osg OpenSceneGraph 最长的一帧

2011-09-19

OpenSceneGraph三维渲染引擎编程指南

目 录 第1章 OpenSceneGraph概述 1 1.1 OpenSceneGraph简介 2 1.1.1 什么是OpenSceneGraph 2 1.1.2 OpenSceneGraph的历史和发展 2 1.1.3 OSG中国 3 1.1.4 OSG组成模块 3 1.2 开发的预备知识 5 1.3 OSG的安装及编译 6 1.3.1 OSG的获取及安装 6 1.3.2 编译OSG 7 1.3.3 OSG邮件列表 13 1.4 OSG基础 14 1.4.1 开发环境设置 14 1.4.2 OSG中的HelloWorld工程 14 1.4.3 OSG实用工具——场景浏览器osgViewer 17 1.4.4 OSG实用工具——版本信息查看器 osgVersion 21 1.4.5 OSG实用工具——场景图形压缩归档工具 osgArchive 21 1.4.6 OSG实用工具——数据转换工具 osgConv 23 第2章 OpenSceneGraph数学基础 27 2.1 坐标系统 28 2.2 坐标系变换 29 2.2.1 世界坐标系-物体坐标系变换 30 2.2.2 物体坐标系-世界坐标系变换 30 2.2.3 世界坐标系-屏幕坐标系变换 32 2.3 向量、矩阵及四元数 34 2.3.1 向量 34 2.3.2 矩阵 35 2.3.3 四元数 36 2.3.4 矩阵与四元数之间的转换 37 第3章 场景的组织及渲染 41 3.1 OSG场景树 42 3.1.1 OSG场景树节点 42 3.1.2 OSG中的父节点与子节点 42 3.2 Geode 43 3.2.1 Billboard节点 43 3.2.2 布告板示例 44 3.3 Group 48 3.3.1 位置变换节点 48 3.3.2 位置变换节点示例 49 3.3.3 矩阵变换节点 50 3.3.4 矩阵变换节点示例 51 3.3.5 自动对齐节点 53 3.3.6 自动对齐节点示例 53 3.3.7 开关节点 56 3.3.8 开关节点示例 57 3.3.9 细节层次节点 58 3.3.10 细节层次节点示例 59 3.3.11 分页细节层次节点 61 3.3.12 分页细节层次节点示例 61 3.3.13 替代节点 63 3.3.14 替代节点示例 64 3.3.15 遮挡裁剪节点 66 3.3.16 遮挡裁剪节点示例 67 3.3.17 坐标系节点 70 3.3.18 坐标系节点示例 71 3.4 场景中节点的拷贝—— osg::CopyOp类 73 3.4.1 自定义场景拷贝示例(一) 73 3.4.2 自定义场景拷贝示例(二) 79 第4章 OSG中几何体的绘制 83 4.1 场景基本绘图类 84 4.2 基本几何体的绘制 86 4.2.1 几何体类 86 4.2.2 基本几何体绘制示例 87 4.2.3 索引绑定几何体绘制示例 90 4.3 使用OSG中预定义的几何体 93 4.3.1 osg::Shape类 93 4.3.2 osg::ShapeDrawable类 94 4.3.3 网格化类 94 4.3.4 预定义几何体示例 95 4.4 多边形分格化 97 4.5 几何体操作 101 4.5.1 简化几何体 102 4.5.2 简化几何体示例 102 4.5.3 Delaunay三角网绘制 104 4.5.4 Delaunay三角网绘制示例 105 4.5.5 三角带绘制 107 4.5.6 三角带绘制示例 108 4.5.7 生成顶点法向量 111 4.5.8 生成顶点法向量示例 112 第5章 渲染状态、纹理与光照 115 5.1 渲染状态 116 5.1.1 osg::StateSet类 116 5.1.2 渲染属性和渲染模式 117 5.1.3 状态继承 118 5.1.4 渲染状态示例 119 5.2 纹理映射 121 5.2.1 二维纹理映射 123 5.2.2 二维纹理映射示例 126 5.2.3 多重纹理映射 129 5.2.4 多重纹理映射示例 129 5.2.5 Mipmap纹理映射 131 5.2.6 Mipmap纹理映射示例 132 5.2.7 TextureRectangle纹理映射 138 5.2.8 TextureRectangle纹理映射示例 139 5.2.9 自动生成纹理坐标 142 5.2.10 自动生成纹理坐标示例 142 5.2.11 计算纹理坐标 144 5.2.12 计算纹理坐标示例 145 5.2.13 立方图纹理 149 5.2.14 立方图纹理示例 150 5.2.15 渲染到纹理 155 5.2.16 渲染到纹理示例 1

2011-09-19

OpenSceneGraph三维渲染引擎设计与实践_source

OpenSceneGraph三维渲染引擎设计与实践 源代码

2011-09-19

OpenSceneGraph三维渲染引擎设计与实践

目 录 第1章 初识OpenSceneGraph(OSG) 1 1.1 场景图形初步 2 1.1.1 场景图形的概念 2 1.1.2 具体实现:三维渲染引擎 2 1.1.3 主流渲染引擎介绍 3 1.2 OpenSceneGraph概述 4 1.2.1 诞生与发展 4 1.2.2 优势与不足 5 1.3 OpenSceneGraph的组成结构 6 1.3.1 核心结构 6 1.3.2 资源获取 8 1.3.3 中文社区 8 第2章 OSG的安装与调试 9 2.1 快速安装和使用 10 2.1.1 下载预编译包 10 2.1.2 设置环境变量 11 2.1.3 建立工程环境 13 2.1.4 范例:第一个程序 15 2.2 从源代码进行编译 16 2.2.1 OSG源代码的获取与更新 16 2.2.2 编译环境生成工具CMake 19 2.2.3 基本编译选项 22 2.2.4 高级编译选项 25 2.3 调试输入与输出 28 2.3.1 命令行输入 28 2.3.2 调试输出 29 第3章 开发预备知识 31 3.1 基本数学组件 32 3.1.1 二维与多维向量 32 3.1.2 四元数 35 3.1.3 矩阵 37 3.1.4 包围体 41 3.2 数组对象 44 3.2.1 数据数组 44 3.2.2 数据索引数组 46 3.3 内存管理机制 47 3.3.1 智能指针 48 3.3.2 参照对象 51 3.3.3 范例:智能指针的使用 52 第4章 场景的组织结构 55 4.1 节点的定义与种类 56 4.1.1 场景图形BVH树 56 4.1.2 节点的父子关系 58 4.1.3 叶节点与组节点 59 4.1.4 节点的功能与分类 62 4.2 节点的访问 65 4.2.1 访问器机制 65 4.2.2 节点的遍历函数 67 4.2.3 范例:节点属性访问器 68 4.2.4 节点的更新与事件回调 70 4.2.5 范例:使用回调实现旋转动画 71 4.3 重要节点的功能实现 74 4.3.1 空间变换节点 74 4.3.2 范例:使用空间变换节点 79 4.3.3 开关节点 81 4.3.4 范例:使用开关节点 82 4.3.5 细节层次节点(LOD) 83 4.3.6 范例:使用LOD节点 85 4.3.7 范例:节点代理 86 第5章 绘制几何对象与文字 89 5.1 几何元素的储存 90 5.1.1 顶点属性 90 5.1.2 顶点数组、显示列表和VBO 91 5.1.3 构建几何体对象 94 5.1.4 范例:简易房屋 100 5.2 几何元素的绘制与访问 103 5.2.1 几何体的绘制实现函数 103 5.2.2 数据的更新显示 108 5.2.3 几何体的更新回调 109 5.2.4 范例:跃动的线 110 5.2.5 信息获取和统计 112 5.2.6 范例:使用仿函数遍历几何体 113 5.3 位图的显示 116 5.3.1 图像与图像的绘制 116 5.3.2 范例:在场景中绘制位图 119 5.4 文字的显示 120 5.4.1 文字的绘制方法 120 5.4.2 文字的绘制实现函数 123 5.4.3 字符编码格式 124 5.4.4 范例:一首古诗 127 第6章 设置纹理和渲染属性 131 6.1 渲染属性与模式 132 6.1.1 OpenGL中的渲染状态设置 132 6.1.2 节点的渲染状态集合 132 6.1.3 渲染属性概览 135 6.2 纹理与纹理属性 139 6.2.1 纹理的实现方法 139 6.2.2 纹理的分类 143 6.2.3 范例:场景中的纹理设置 146 6.2.4 范例:纹理的明细层次(Mipmap) 149 6.3 属性的实现与访问 152 6.3.1 将属性应用到场景 152 6.3.2 渲染状态集回调 153 6.3.3 范例:雾参数的实时更新 153 6.4 OSG与OpenGL着色语言 155 6.4.1 OpenGL着色语言 155 6.4.2 着色器属性 159 6.4.3 一致变量回调 162 6.4.4 范例:在场景中使用GLSL着色语言 162 第7章 观察我们的世界 167 7.1 场景的观察与变换 168 7.1.1 OpenGL中的变换 168 7.1.2 相机节点 171 7.1.3 范例:鸟瞰图相机 174 7.2 图形设备接口 176 7.2.1 图形设备与相机 176 7.2.2 窗口与像素缓存(Pixel Buffer) 179 7.2.3 渲染到纹理(Render To Texture) 181 7.2.4 范例:将场景渲染到纹理 183 7.3 视景器 186 7.3.1 视景器的主要工作 186 7.3.2 单视景器与多视景器 188 7.3.3 范例:投影墙显示 191 7.3.4 范例:多视景器系统 192 7.3.5 视景器辅助部件 194 第8章 人机交互与图形用户接口 197 8.1 获取鼠标和键盘消息 198 8.1.1 事件适配器 198 8.1.2 动作适配器 202 8.1.3 事件队列与处理器 203 8.1.4 范例:处理键盘事件 205 8.2 三维人机交互工具 207 8.2.1 漫游器 207 8.2.2 拖曳器 210 8.2.3 范例:场景拖曳器的实现 214 8.3 二维图形用户接口 217 8.3.1 窗口设备 217 8.3.2 Windows下窗口设备的实现 219 8.3.3 范例:使用Windows API构建渲染 窗口 221 第9章 场景中的动画效果 225 9.1 场景动画基本组件 226 9.1.1 关键帧 226 9.1.2 采样与插值 228 9.1.3 动画频道 231 9.1.4 动画更新回调 236 9.1.5 范例:关键帧路径动画 239 9.2 刚体动画 242 9.2.1 简单路径动画 242 9.2.2 范例:使用路径动画回调 244 9.2.3 动画的多频道融合 245 9.2.4 范例:基本动画管理器 246 9.3 角色与变形动画 249 9.3.1 骨骼动画 249 9.3.2 范例:骨骼运动 252 9.3.3 变形体 255 9.3.4 范例:对折硬纸 257 9.4 渲染状态与纹理动画 259 9.4.1 渐进动画(Ease Motion) 259 9.4.2 范例:物体的淡入淡出 262 9.4.3 纹理动画 264 9.4.4 范例:纹理动画效果 266 第10章 文件的读写机制 269 10.1 数据文件支持机制 270 10.1.1 文件格式概述 270 10.1.2 OSG支持的文件格式 272 10.1.3 基本文件读写接口 277 10.2 文件读写插件 279 10.2.1 插件的编写和注册 279 10.2.2 插件的职责链机制 283 10.2.3 文件读写回调 285 10.3 插件设计方法 287 10.3.1 范例:简单插件设计 287 10.3.2 范例:文件读取进度 290 10.4 OSG(即.osg)格式及其扩展 292 10.4.1 封装器 292 10.4.2 场景扩展库插件 295 第11章 场景的动态更新与裁减 297 11.1 场景的更新流程 298 11.1.1 人机交互事件的更新 298 11.1.2 用户请求与系统调度的更新 299 11.2 场景的裁减流程 300 11.2.1 裁减的意义与常用技术 300 11.2.2 裁减访问器 303 11.2.3 状态树与状态节点 305 11.2.4 状态树的构建 309 11.2.5 裁减回调 312 11.3 数据的动态调度 313 11.3.1 动态调度技术概述 313 11.3.2 分页数据库 314 11.3.3 范例:分页LOD节点 316 11.3.4 分页图像库 318 第12章 场景的多线程渲染 319 12.1 多线程开发技术概述 320 12.1.1 多线程开发的常用概念 320 12.1.2 OpenThreads库简介 321 12.1.3 范例:线程的创建与控制 324 12.1.4 OSG操作线程 325 12.2 基本场景渲染流程 327 12.2.1 OSG状态机 327 12.2.2 构建场景渲染树 333 12.2.3 渲染树的优化排序 338 12.2.4 范例:广告牌森林 339 12.3 多种线程模型的讨论与实现 341 12.3.1 渲染器与场景视图 341 12.3.2 单线程模型 347 12.3.3 多设备裁减/绘制模型 348 12.3.4 多设备绘制模型 349 12.3.5 多相机绘制模型 350 12.3.6 数据变度 351 第13章 开源社区与未来 353 13.1 基于OSG的开源工程 354 13.1.1 地形与地理信息 354 13.1.2 特效实现 356 13.1.3 扩展节点组件 358 13.1.4 数据和场景管理 358 13.1.5 其他语言封装 360 13.2 开发者资源 360 13.2.1 实用网址 360 13.2.2 用户群体简介 361 13.3 十条箴言 363 主要参考资料 365

2011-09-19

Javascript高级教程

目录: 第1课 第一页 Javascript高级教程 第二页 本教程的课程计划 第三页 一个if-then-else的快捷方式 第四页 什么是变量 第五页 变量的使用方法 第2课 第一页 Javascript高级教程-第2日 第二页 神奇的字符串处理 第三页 子字符串 第四页 分割方法(splitting method) 第五页 相关数组 第六页 相关数组的一个例子 第七页 介绍cookie 第八页 深入了解cookies 第九页 读取cookies 第十页 复杂的cookies读取 第十一页 读取和编写多重cookies 第十二页 再次深入了解cookies 第十三页 cookie路径和域 第3课 第一页 Javascript高级教程 - 第三日 第二页 如何给事件定时 第三页 定时循环的概念 第四页 定时循环的做法 第五页 一个Javascript编写的时钟 第六页 给定时器加入变量 第七页 识别用户的浏览器 第八页 如何识别用户的浏览器 第九页 对象和方法的识别 第十页 History对象 第4课 第一页 JavaScript高级教程- 第4天 第二页 图象映射与JavaScript 第三页 预装图象 - 是什么? 第四页 预装图象 - 怎么做? 第五页 对象的优点 第六页 创建你自己的对象 第七页 你的面向对象的虚拟宠物 第八页 计算字符串 第九页 获取难以索引的对象 第十页 另一种获取难以索引的对象的手段 第十一页 第四天课程复习 第5课 第一页 JavaScript高级教程- 第5天 第二页 打印变量 第三页 一般性程序错误 第四页 修正错误 第五页 好的编程实践 第六页 按速度优化JavaScript代码 第七页 下面讲什么?

2011-08-20

Eclipse开发J2ME插件-EclipseMe1.5.0

EclipseME插件的最新版本,用Eclipse开发J2ME的最佳搭档! 1.5.0版对设备管理部分进行了大刀阔斧的重构,配置更加方便,对各厂商无线工具包的支持更加灵活。 EclipseME

2011-08-20

餐饮管理程序的源代码

这是个一个完整的餐饮管理程序的源代码,学习VC++的入门。这个程序,是基于对话框,包括了一些基本控件(tree、listctrl、page等)的使用,数据库应用,打印的程序。很适合初学者。初始用户和密码:Admin,1234。另外,在&ldquo;前台销售&rdquo;窗口的ListCtrl中,有个Button,要在第一个空白行的&ldquo;名称&rdquo;列的最右边点击才会显示出来。非常感谢vckbase,我从这里学到了很多有用的知识和经验。我很愿意和大家交流学习。

2011-08-20

ASP.NET 2.0入门经典(第4版)

ASP.NET 2.0入门经典(第4版)

2011-08-20

objective c 面向对象编程

(中文版)objective-c_面向对象编程 pdf

2011-08-14

Objective C 入门指南

Objective C 入门指南 pdf

2011-08-14

《Android应用开发揭秘》源代码

《Android应用开发揭秘》源代码 只有2--16章

2011-08-14

The C++ Programming Language

The C++ Programming Language

2011-07-19

轻松制作chm文件 chm

轻松制作chm文件 中文 轻松制作chm文件 中文

2011-07-19

深度探索C++对象模型(清晰版)

深度探索C++ 对象模型(清晰版) 侯捷

2011-07-19

Effective C++ 中文 高清

Effective C++ 中文 第三版 高清

2011-07-19

thinking in c++ 2nd edition

thinking in c++ 2nd edition

2011-07-19

MFC类库详解 chm

MFC类库详解 中文 函数查询工具 MFC类库详解 中文 函数查询工具

2011-07-19

U盘小偷程序 C 程序设计

U盘小偷程序 C 语言 U盘小偷程序 C 语言

2011-07-19

成绩管理系统 MFC

成绩管理系统 MFC Access C++

2011-07-19

OpenGL ES 2.0 编程语言

OpenGL ES 2.0 Programming GuideOpenGL ES 2.0 Programming Guide

2011-07-19

OpenGl 着色语言

OpenGl 着色语言 中文版OpenGl 着色语言 中文版

2011-07-19

OpenGL编程指南

OpenGL编程指南 中文版 第六版 pdf格式

2011-07-19

openGL 课程教程

北大 openGL 课程北大 openGL 课程

2011-07-19

OpenGL开发框架

vc下OpenGL开发框架与应用 vc下OpenGL开发框架与应用

2011-07-19

OpenGL 着色语言第三版

OpenGL 着色语言 第三版OpenGL 着色语言 第三版

2011-07-19

OpenGL编程与实例

OpenGL 编程 实例 中文 详细讲解OpenGL

2011-07-19

OpenGL ES 2.0 Common Profile 规范

详细讲解了OpenGL ES 2.0相对于Opengl的区别

2011-07-19

Android开发之OpenGL+ES教程

Android开发之OpenGL+ES教程

2011-04-29

OpenGL API

OpenGL 应用程序开发文档 OpenGL 应用程序开发文档

2011-04-29

Mobile 3D Graphics with OpenGL ES and M3G

Mobile 3D Graphics with OpenGL ES and M3G

2011-04-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除