精华内容
下载资源
问答
  • 用于FPS游戏的外部菜单绘制,做游戏辅助开发的可以学习参考!
  • 易语言GDI文本的绘制源码,GDI文本的绘制,取指针,置指针,方法_置指针,new,delete,销毁,创建自窗口句柄,创建自DC,创建自图像,获取DC,释放DC,取混合模式,置混合模式,取渲染原点,置渲染原点,取混合品质,置混合品质,置...
  • FPS 的ESP绘图绘制源码,适用任何FPS游戏。此档案为CSGO 源码,可以修改的sln文件,开发环境为C++。主要有方框+射线的ESP代码。
  • 用于FPS游戏的外部绘制,绘制菜单 文字 骨骼 血条 方框 等!
  • 外部窗口绘制方块,内存占用小,小不闪烁 导入进程名,和坐标就能用
  • 不卡D3D绘制模块

    2018-10-11 18:48:17
    易语言 d3d绘制模块,不闪不卡。
  • D3D绘制模块

    2018-08-07 16:27:16
    D3D绘制模块 易语言辅助 刺激战场 模型描绘模块.......
  • FPS之游戏绘制(六)

    千次阅读 2020-05-10 16:17:43
    1.GDI外部绘制 这种绘制方式最为常见,游戏也不容易检测出,创建GDI设备在指定的窗口句柄上绘制,占用CPU很小,但是绘制到游戏里面会闪烁,原因是游戏FPS刷新频率与gdi绘制频率不同导致画出的方框会闪烁。...

    1.GDI外部绘制 这种绘制方式最为常见,游戏也不容易检测出,创建GDI设备在指定的窗口句柄上绘制,占用CPU很小,但是绘制到游戏里面会闪烁,原因是游戏FPS刷新频率与gdi绘制频率不同导致画出的方框会闪烁。
    2.GDI双缓冲
    这种绘制方式有一部分和外部绘制相同,但是又不同,这种绘制方式不会使方框闪烁,但是占用CPU极高,原理是申请一块与游戏高度宽度相同的内存,把这块内存作为内存画布使用,把绘制的方框画到这块内存画布中,然后获取游戏的窗口句柄,使内存画布中的图像和游戏屏幕来回替换,这种绘制方式占用CPU,但是绘制效率很高,方框也不会闪烁,电脑配置高的可以研究下这种绘制方式。
    3.GDI窗口绘制
    这种绘制原理和第一种一样,只不过不是绘制到游戏窗口,而是自己创建一个窗口,把方框绘制到这个窗口上,绘制效率快而且不易被检测,内存占用很小,但是有一个缺点,就是窗口不会自己刷新,需要自己写一个刷新窗口,使刷新窗口的频率大于等于gdi绘制频率,这样就窗口上的绘制内容就是连续的了,大家可以用这种绘制方式画方框,国外有一个FPS方框透视就是用这种原理,至于写法比这个精湛多了。
    4.D3Dhook绘图
    大家都知道3D游戏的图形接口有2种,DirectX和OpenGL,大部分的FPS游戏都是用DirectX引擎,所以我们可以通过hook DirectX设备接口函数来绘制方框,这种绘制方式不占CPU,不闪烁,但是易被检测,DX设备会在内存中申请2块空间作为缓存区A和缓存区B,DirectX设备会在缓存区A中绘制图形,绘制图形的原理是通过绘图函数比如DX11的DrawIndexed,通过这个函数的参数我们可以看出它是根据索引缓存绘制一个非实例化的图形,在设备创建到初始化再到绘制图形,这一系列全部完成后DX11设备会用present把缓存区A映射到缓存区B,让缓存区B作为游戏屏幕并呈现场景,这样缓存区A与B来回映射达到游戏画面不断更新,所以我们可以hook掉present函数,并获取设备指针引入自己的绘图函数,这种绘制方式肯定不会闪烁,因为游戏使用的就是d3d图形接口,我们绘制方框的函数是在这个接口内游戏FPS刷新频率和绘制方框频率肯定是一样的,现在大部分FPS游戏都对present加了检测。

    以上就是我总结四种绘图方式,可能有一点错误,毕竟是自己手写的,当然还有不同的绘制方式,也可以与我交流,说了一大堆就是给不会绘制的朋友们给个思路,大佬的话看看不说话就可以了,欢迎朋友们来评论。

    展开全文
  • Android 绘制原理浅析

    2019-08-06 19:25:03
    Android 的显示过程可以简单概括为:Android 应用程序把经过测量、布局、绘制后的surface 缓存数据,通过 SurfaceFlinger 把数据渲染到显示屏幕上,通过 Android 的刷新机制 来刷新数据。也就是说应用层负责绘制,...
    • Android 的显示过程可以简单概括为:Android 应用程序把经过测量、布局、绘制后的surface 缓存数据,通过 SurfaceFlinger 把数据渲染到显示屏幕上,通过 Android 的刷新机制 来刷新数据。也就是说应用层负责绘制,系统层负责渲染,通过进程间通信把应用层需要 绘制的数据传递到系统层服务,系统层服务通过刷新机制把数据更新到屏幕。 通过阅读 Android 系统的源码可以了解显示的流程,Android 的图形显示系统采用的是 Client/Server 架构。SurfaceFlinger(Server)由 C++代码编写。Client 端代码分为两部分,一 部分是由 Java 提供给应用使用的 API,另一部分则是由 C++写成的底层具体实现。

    绘制原理

    • 绘制任务是由应用发起的,最终通过系统层绘制到硬件屏幕上,也就是说,应用进程绘 制好后,通过跨进程通信机制把需要显示的数据传到系统层,由系统层中的 SurfaceFlinger 服务绘制到屏幕上。那么应用层和系统层中的流程是什么样的呢?
    应用层
    • 先来看一个 UI 界面的典型构成框架,也可以是一个 Activity 的构成。如图 2-2 所示,有 很多不同层次的基本元素——View,整体是一个树型结构,有不同的嵌套,存在着父子关系, 子 View 在父 View 中,这些 View 都经过一个相同的流程最终显示到屏幕上,这也意味着要 完整地显示所有数据,就要对其中的 View 都进行一次绘制工作,并且针对每个 View 的操作 都是一个递归过程。

    • 在 Android 的每个 View 绘制中有三个核心步骤(见图 2-3),通过 Measure 和 Layout 来 确定当前需要绘制的 View 所在的大小和位置,通过绘制(Draw)到 surface,在 Android 系 统中整体的绘图源码是在 ViewRootImp 类的 performTraversals()方法,通过这个方法可以 看出 Measure 和 Layout 都是递归来获取 View 的大小和位置,并且以深度作为优先级。可以 看出,层级越深,元素越多,耗时也就越长。

      View绘制流程可以看这篇文章

    • 页面构成框架
      在这里插入图片描述

    • View的绘制流程
      在这里插入图片描述
      (1)Measure 用深度优先原则递归得到所有视图(View)的宽、高;获取当前 View 的正确宽度 childWidthMeasureSpec 和高度 childHeightMeasureSpec 之后,可以调用它的成员函数 Measure 来设置它的大小。如果当前正在测量的子视图 child 是一个视图容器,那么它又会 重复执行操作,直到它的所有子孙视图的大小都测量完成为止。
      (2)Layout 用深度优先原则递归得到所有视图(View)的位置;当一个子 View 在应用程序窗口左 上角的位置确定之后,再结合它在前面测量过程中确定的宽度和高度,就可以完全确定它在 应用程序窗口中的布局。
      (3)Draw 目前 Android 支持了两种绘制方式:软件绘制(CPU)和硬件加速(GPU),其中硬件加 速在 Android 3.0 开始已经全面支持,很明显,硬件加速在 UI 的显示和绘制的效率远远高于 CPU 绘制,但硬件加速并非如大家所想的那么完善,它也存在明显的缺点: ·耗电:GPU 的功耗比 CPU 高。 ·兼容问题:某些接口和函数不支持硬件加速。 ·内存大:使用 OpenGL 的接口至少需要 8MB 内存。 所以是否使用硬件加速,需要考虑一些接口是否支持硬件加速,同时结合产品的形态和 平台,比如 TV 版本就不需要考虑功耗的问题,而且 TV 屏幕大,使用硬件加速容易实现更 好的显示效果。

    系统层
    • 真正把需要显示的数据渲染到屏幕上,是通过系统级进程中的 SurfaceFlinger 服务来实 现的,SurfaceFlinger 的主要工作如下:
    1. 响应客户端事件,创建 Layer 与客户端的 Surface 建立连接。
    2. 接收客户端数据及属性,修改 Layer 属性,如尺寸、颜色、透明度等。
    3. 将创建的 Layer 内容刷新到屏幕上。
    4. 维持 Layer 的序列,并对 Layer 最终输出做出裁剪计算
    • 既然是两个不同进程,那么肯定需要一个跨进程的通信机制来实现数据传输,在 Android 的显示系统,使用了 Android 的匿名共享内存:SharedClient,每一个应用和 SurfaceFlinger 之间都会创建一个 SharedClient,如下图所示。从图中可以看出,在每个 SharedClient 中,最多可以创建 31 个 SharedBufferStack,每个 Surface 都对应一个 SharedBufferStack,也 就是一个 window。 一个 SharedClient 对应一个 Android 应用程序,而一个 Android 应用程序可能包含多个窗 口,即 Surface。也就是说 SharedClient 包含的是 SharedBufferStack 的集合。因为最多可以创 建 31 个 SharedBufferStack,这也意味着一个 Android 应用程序最多可以包含 31 个窗口,同 时每个 SharedBufferStack 中又包含了两个(低于 4.1 版本)或者三个(4.1 及以上版本)缓 冲区,刷新机制中的双缓冲和三重缓冲技术。
      Android 显示框架
    • 最后总结起来显示整体流程分为三个模块:应用层绘制到缓存区,SurfaceFlinger 把缓存 区数据渲染到屏幕,由于是两个不同的进程,所以使用 Android 的匿名共享内存 SharedClient 缓存需要显示的数据来达到目的。 SurfaceFlinger 把缓存区数据渲染到屏幕(流程如下图所示),主要是驱动层的事情,这 里不做太多解释。
    • 从图中可以看出,绘制过程首先是 CPU 准备数据,通过 Driver 层把数据交给 CPU 渲 染,其中 CPU 主要负责 Measure、Layout、Record、Execute 的数据计算工作,GPU 负责 Rasterization(栅格化)、渲染。由于图形 API 不允许 CPU 直接与 GPU 通信,而是通过中间 的一个图形驱动层(Graphics Driver)来连接这两部分。图形驱动维护了一个队列,CPU 把 display list 添加到队列中,GPU 从这个队列取出数据进行绘制,最终才在显示屏上显示出来。

    在这里插入图片描述

    • 知道了绘制的原理后,那么到底绘制一个单元多长时间才是合理的,首先需要了解一个 名词:FPS。FPS(Frames Per Second)表示每秒传递的帧数。在理想情况下,60 FPS 就感觉 不到卡,这意味着每个绘制时长应该在 16ms 以内,如图
      在这里插入图片描述
    • 但是 Android 系统很有可能无法及时完成那些复杂的界面渲染操作。Android 系统每隔 16ms 发出 VSYNC 信号,触发对 UI 进行渲染,如果每次渲染都成功,这样就能够达到流畅的 画面所需的 60FPS。即为了实现 60FPS,就意味着程序的大多数绘制操作都必须在 16ms 内 完成。 如果某个操作花费的时间是 24ms,系统在得到 VSYNC 信号时就无法进行正常渲染,这 样就发生了丢帧现象。那么用户在 32ms 内看到的会是同一帧画面。主要场景在执行动画或 者滑动 ListView 时更容易感知到卡顿不流畅,是因为这里的操作相对复杂,容易发生丢帧的 现象,从而感觉卡顿。有很多原因可以导致 CPU 或者 GPU 负载过重从而出现丢帧现象:可 能是你的 Layout 太过复杂,无法在 16ms 内完成渲染;可能是 UI 上有层叠太多的绘制单元; 还有可能是动画执行的次数过多。
    展开全文
  • 如何启动这个“游戏”: 转到-> ThisProject / examples / example_win32_directx11 打开此文件-> example_win32_directx11.vcxproj Visual Studio启动 CTRL + F5
  • 功能描述:基于GDI PLUS实现外部图像文件绘制窗口图像基于GDI PLUS实现外部图像文件设置窗口图像基于GDI PLUS生成图像句柄接口函数:DrawWindowImageSetWindowImageDrawDlgItemImageSetDlgItemImageLoadImageEx下载...

    开发工具:

    Visual Studio v2010

    Windows SDK v7.1

    版本历史:

    V1.0 2010年12月18日

    • 完成正式版本。

    功能描述:

    • 基于GDI PLUS实现外部图像文件绘制窗口图像
    • 基于GDI PLUS实现外部图像文件设置窗口图像
    • 基于GDI PLUS生成图像句柄

    接口函数:

    DrawWindowImage

    SetWindowImage

    DrawDlgItemImage

    SetDlgItemImage

    LoadImageEx

    下载地址:

    GdiplusWidgets.zip

    演示Demo:

     

    源代码:

    GdiplusWidgets.h

    GdiplusWidgets.cpp

    展开全文
  • imgui最新源码,外挂一般用它来做界面,可直接编译,带所有示例,包含opengl2-3,directx9-12,大量范例帮助你快速制作界面
  • python经典程序练习题11:叠加等边三角形的绘制

    万次阅读 多人点赞 2018-07-18 12:29:14
    绘制如下图形: 源代码: ...#绘制外部大三角形 t.fd(200) t.seth(120) t.fd(200) t.seth(-120) t.fd(200) #绘制内部小三角形 t.seth(0) t.fd(100) t.seth(60) t.fd(100) t.seth(180) t.fd(100...

    绘制如下图形:

    源代码:

    import turtle as t
    t.pencolor("blue")  #笔触为蓝色
    #绘制外部大三角形
    t.fd(200)
    t.seth(120)
    t.fd(200)
    t.seth(-120)
    t.fd(200)
    #绘制内部小三角形
    t.seth(0)
    t.fd(100)
    t.seth(60)
    t.fd(100)
    t.seth(180)
    t.fd(100)
    t.seth(-60)
    t.fd(100)
    t.seth(120)
    t.fd(100)
    t.seth(0)
    t.done()

     

    展开全文
  • 【CG】OpenGL3.3+IMGUI_绘制Bezier曲线

    千次阅读 2018-05-23 20:42:25
    【CG】OpenGL3.3+IMGUI_绘制Bezier曲线 @(CG) Bezier Curve的基本定义 Bezier Curve的定义如下: 根据4个控制点拟合Bezier Curve,因此生成的是3次的多项式参数方程。 根据上面的Bezier Curve的定义,能够...
  • 获取并绘制圆的外部/内部公共切线
  • 函数 sirkl_tan 绘制两个不相交圆的外部公切线。 两个圆的半径由非负数向量给出,圆心由具有实数值的向量给出。
  • 板底钢筋自动绘制-板底钢筋自动绘制-板底钢筋自动绘制
  • 外部窗口添加按钮并响应事件系统结构:GetMsgProc,NewWndProc,位置,画按钮1,画按钮2,SetWindowsHookEx,CallNextHookEx,UnhookWindowsHookEx,SetPropA,RemovePropA,GetPropA,CopyMemory_MSG,SetWindowLongA,...
  • 手动与自动导入外部数据 散点拟合成曲面 手动导入外部文件绘图 手动操作步骤 手动导入后绘制的曲线示例 自动导入外部文件绘图 自动导入后绘制的曲线示例 自动导入的MATLAB代码 散点拟合成曲面 Matlab散点拟合成曲面...
  • 代码如下: ``` <!DOCTYPE html> <title></title> function draw(){ var canvas=document.getElementById('canvas'); if(canvas.getContext)...我还找了另一个例子,照着敲的也显示不出来
  • 易语言源码OPENGL窗口显示外部图片的一般方法.rar
  • 点击阅读原文利用进程注入+hook + CreateWindowExA函数,来实现禁止外部程序新建窗口。自绘没试过不知道可以不,本来想用在一款工具里的,但应该是程序内加了变量判断。链接: http://pan.baidu.com/s/1o8aTV6M 密码:...
  • 1. 绘制前的必要准备步骤(1) 设置资源流。设置资源流与一个顶点缓冲区挂钩,该流就是一个流入渲染管线的几何信息的流。使用方法:IDirect3DDevice9::SetStreamSource()(2) 设置顶点格式。使用方法:IDirect3DDevice9...
  • Matlab中用于绘制外部信息传输(EXIT)图表的工具。 这些可用于表征迭代解码和检测电信接收机中对数似然比(LLR)的交换。
  • 用turtle实现用正方形画圆

    千次阅读 多人点赞 2018-11-19 13:34:54
    “outline”: positive number 外部 “tilt”: number 倾斜 isdown() 如果笔停止返回True,反之返回False 颜色控制 color() 颜色,直接使用返回当前笔颜色与填充颜色 pencolor() 设置笔的颜色 ...
  • JavaScript开发二维图形绘制接口
  • 关键实现代码。不是完整的demo。主要利用CreateEvent、StartProcess、MoveWindow等函数。
  • cvDrawContours 在图像上绘制外部和内部轮廓
  • 监听滑动事件,滑动时实时输出刻度值,同时支持根据外部值动态设置刻度, 支持平滑/缓动滑动、实时绘制刻度, 兼容移动端/pc端滑动, 支持的传入的可配置项参数: // 默认配置 const default_conf = { // width: ''...
  • 绘制每个月收到的服饰   // painter.setBrush(Qt::BDiagPattern);   // for (int i = 0; i (); ++i) {   // painter.setPen(Qt::black);   // int fineryCount = yearList.at(i); /...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,151
精华内容 27,660
关键字:

外部绘制