- 博客(20)
- 收藏
- 关注
原创 leetcode题库学习系列——LC岛屿数量
原题地址:https://leetcode-cn.com/leetbook/read/queue-stack/kbcqv/该题是位于,队列、广度优先搜索的学习下的题。原题如下:给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [[“1”,“1”,“1”,“1”,“0”],[“1”,“1”,“0”,“1”,
2021-07-14 21:16:44
252
翻译 UE4实时渲染——几何结构渲染三
上一节:UE4实时渲染——几何结构渲染二这一节讲一下着色器Shader中的Vertex Shaders顶点着色器。着色器Shader着色器shader是一个在渲染中很常见的概念,可以这样简单的认为:着色器的代码,它的功能就是输入一组数据,使用它运算后,输出另一组数据。着色器shaders的分类有许多:顶点着色器Vertex Shader、像素着色器Pixel Shader、片段着色器Fragment Shader、域着色器Domain Shder等。着色器非常高效,我们之所以使用着色器系统,是因为
2021-07-14 08:58:22
601
翻译 UE4实时渲染——几何结构渲染二
上一节我们探讨了绘制调用drawcall的概述,以及对性能的影响。现在让我们看一下绘制调用drawcall在场景中可视化展现出来。使用RenderDoc插件,开启使用后,貌似要重启一下UE4才可以使用,这样做好,这里会多出一个小按钮。点击按钮后,会将当前场景捕捉到RenderDoc中,通常要5-10秒的等待时间,然后出现这样的画面,这是一个可以免费下载的程序:中间是编辑器输出的帧画面,你可以输出多个帧画面,然后双击帧画面,就会出现许多关于该帧画面的标签页,如果点击“渲染管线状态(Pipelin
2021-07-12 21:49:49
1303
原创 二叉树的层序遍历
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> ret = new ArrayList<List<Integer>>(); if (root == null) { return ret; } Queue&l
2021-07-08 17:30:00
135
翻译 UE4实时渲染——几何结构渲染一
上一节:UE4实时渲染——渲染前和遮挡上一节Draw线程准备好了一些对象,这些对象是当前一帧对象我们可见的,现在我们要使用GPU线程逐对象来渲染了。首先我们要考虑的,就是渲染对象的顺序,我们不能单纯的像粉刷墙画那样,先刷上一层背景,再刷上面的图案,这会导致图案和背景重叠的部分,会重复绘制2次,如果在N多个对象的场景中,这种绘制无疑是性能的浪费。我们的办法是依靠前期的深度(Z)通道,做一个深度测试,当渲染几何体时,他会先做一次预通道,确定下来其中一些像素点的值会被另一个模型的像素所覆盖,所以在渲染背景时
2021-07-04 13:06:24
1105
原创 Java中的ArrayList的sort排序如何记忆
https://zhuanlan.zhihu.com/p/54004622借鉴这篇文章ArrayList<Integer> integers = new ArrayList<>();integers.sort(new Comparator<Integer>() { @Override public int compare(Integer integer, Integer t1) { return integer-t1; }});
2021-07-03 20:16:49
295
翻译 UE4实时渲染——渲染前和遮挡
CPU线程:在交给GPU渲染之前,CPU会进行大量的计算,主要计算包括:1、动画2、模型和对象的位置3、物理效果4、人工智能5、对象的生成和销毁、显示或隐藏但这里不多介绍这些,因为这个系列是介绍实时渲染,而不是幕后的具体逻辑运算。Draw线程:CPU计算后,我们得到了所有对象和模型的位置,以及所有我们想要在CPU运算出来的信息,但这还不能进行渲染,因为我们不可能把所有的信息都渲染出来,这样性能是吃不消的,我们必须有选择的把必要信息渲染出来即可,那么这里就用到了一个Draw的线程(主要由CP
2021-07-03 12:06:18
2257
原创 leetcode题库学习系列——LCP 07. 传递信息
原题地址:https://leetcode-cn.com/problems/chuan-di-xin-xi/原题如下:小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。每轮信息必须需要传递给另一个人,且信息可重复经过同一个人给定总玩家数 n,以及按 [玩家编号,对应
2021-07-02 10:48:40
216
原创 leetcode题库学习系列——168. Excel表列名称
原题地址:https://leetcode-cn.com/problems/excel-sheet-column-title/原题如下:给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。例如:A -> 1B -> 2C -> 3…Z -> 26AA -> 27AB -> 28…示例 1:输入:columnNumber = 1输出:“A”示例 2:输入:columnNumber = 28输出:“AB”示
2021-06-29 23:20:00
221
1
原创 C++工程项目中常见的写法与解释——多种状态值的混合(按位处理)篇
一般来说,对于一个类而言,其状态的表达形式有很多,比如使用enum枚举enum CLASS_STATUS{status1=0,status2=1,status3=2}但假如这个类有多种状态,使用多个enum枚举状态值,效率往往没有按位计算来的更高。假如有一个类,animal动物,有行动状态(飞,走,游),有身形状态(大,中,小),有颜色状态(红,白,蓝),我们可以这样设定:#define animal_action_status_fly 0x00000001#define animal_
2021-06-29 16:34:30
541
1
翻译 UE4实时渲染需要注意的点——RTR(Real Time Rendering)
1、性能与质量这是一幅关于性能与质量的表达图示,需要指出的是,只要有渲染,性能是必定会受影响的。而好的渲染和糟糕的渲染之区别在于,取舍的平衡。一般的TargetFramerate,假设为30FPS,在我们的渲染已经无限接近30FPS的情况时,我们应该在保持这个帧率的前提下,尽可能的将渲染质量提高;或者换种说法,在我们追求高品质渲染的同时,将帧率维持在我们需要的目标帧率。同时,如果渲染到一定阶段的时候,帧率确实已经达到目标帧率,如30FPS了,那么此时就没有必要花费精力在,把帧率提升到60FPS这
2021-06-28 22:36:25
1310
原创 AndroidStudio基于JniInterface.java快速创建jni头文件
javahNDK-classpath . -jni -encoding $FileEncoding$ -d $ModuleFileDir$/src/main/cpp $FileClass$$ModuleFileDir$\src\main\javaJniInterface.java提前放好想要创建的jni接口也提前写好右键点击这里,就会在cpp目录下生成jni_JniInterface.h了...
2021-06-24 15:14:17
163
原创 C++工程项目中常见的写法与解释——类的前向声明(class XXX;)篇
一个类A调用另一个类B的方法有很多,详见:https://blog.youkuaiyun.com/qq_35721743/article/details/83592415这里记录一下,项目中常用但可能会被忽略的方法:类的前向声明看名字也知道,这是一种类的声明,只声明不实现的话,是没办法获取内部内容的。比如这样://A.cpp/A.h中class A{ public: A(); ~A(); public: void get();}//B.cpp/B.h中,如果不#include "A"
2021-06-24 14:40:24
832
原创 C++工程项目中常见的写法与解释——(extern “C“)篇
#ifdef __cplusplus extern "C"{#endif //代码#ifdef __cplusplus }#endif这部分代码,也是C++项目工程中常见的,用于C++代码与C代码互相调用时。常写于头文件中。分为两部分功能:第一部分功能,关于"__cplusplus",这是C++保留的宏定义,如果当前的头文件是*.cpp文件的头文件,那么在编译时会自动加上该宏。第二部分功能,关于extern “C”,在头文件中,使用该标记的函数或变量,将以C语言方式编译和连接。
2021-06-24 13:20:52
293
原创 C++工程项目中常见的写法与解释——typedef篇
typedef篇介绍三种工程项目常用的用法用法1、类型别名常用于定义句柄类型、返回值类型等快捷方式类型。易于理解含义和方便的类型别名。如,定义接口时,大量供其他人调用的接口中,返回值均为long,如果直接这样写:long interface1();long interface2();固然可以,但别人作为调用者,在不知情的情况下是不知道long会返回出什么值的。此时我们可以这样定义:typedef long RESULT;RESULT interface1();RESULT interf
2021-06-24 11:17:40
260
原创 关于程序设计相关知识的学习
学习代码是一个持久战,是一个长期的事情。计算机技术的更迭速度,是当今世界上更迭速度较快的事物之一。时刻保持学习的心态,不仅是对自己的技术成长有良好的帮助,也是对世界的技术更迭献以绵薄之力,当然,就职的公司也很希望你这样做。有些人对程序设计有较好的天赋,但大多数人像我一样,是个程序设计的普通人。一项技术的门外汉,要进门,就要对该项技术或方向,有着较好的兴趣,就算是少量的兴趣,如果在学习的过程中逐渐建立起尽可能多的兴趣,那也是好的。兴趣是最好的老师。入门,不妨从结果入手,先在控制台上,输出“Hello W
2021-06-23 09:22:35
168
原创 AndroidStudio如何使用Address Sanitizer(ASan)检测内存错误
Google原文:https://developer.android.com/ndk/guides/asan#cmake当使用VisualStudio编译cpp代码时,有一键选择编出ASan版本从而检测内存错误的功能。但AndroidStudio用到NDK时,从API27开始才支持ASan检测。在AS中使用ASan需要注意的是,ASan的CPU开销约为2倍,代码大小开销在50%到2倍之间,并且内存开销很大,约为2倍。官方建议对于64位ARM(一般现在的设备都是这个了),建议使用HWAddress S
2021-06-16 14:30:08
4115
3
原创 Android ABI(Application Binary Interface)
不同的Android设备使用不同的CPU,而不同的CPU支持不同的指令集。CPU与指令集的每种组合都有专属的应用二进制接口,也就是Application Binary Interface(ABI)。ABI接口,包含以下几个内容:1、可使用的CPU指令集,以及扩展指令集。2、运行时内存存储和加载的字节顺序,(Android一直都是little-endian,也就是小字节序或叫低字节序,小字节序意思就是,低位字节排在内存低地址端,高位字节排在内存高地址端。与之对应的是大字节序或叫高字节序,即高位字节排在
2021-06-16 10:58:08
274
原创 MSVC相关问题记录
MSVC是微软的VC运行库,减少编码量,提高兼容性。在该篇文章中https://devblogs.microsoft.com/cppblog/address-sanitizer-for-msvc-now-generally-available/Address Sanitizer for MSVC Now Generally AvailableWe’re thrilled to announce that as of Visual Studio 2019 version 16.9, the C++
2021-06-15 09:55:12
180
原创 再回优快云
再回优快云感想真的是大变样,功能齐全,编辑界面简洁,预览界面简约……这几年一直在用为知笔记,少了些分享和讨论问题的乐趣,最近打算回归,不多说了,共勉!步步为营,稳扎稳打。戒骄戒躁,不气不馁。屡败屡战,越战越勇。——座右铭...
2020-12-08 22:01:07
71
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人