- 博客(17)
- 收藏
- 关注
原创 C++动态内存分配与智能指针
C++中的所有对象都执行严格的生存期。对于非动态对象,全局对象在程序启动时分配,在程序结束时销毁。对于局部自动对象,当我们进入其定义所在的程序块时被创建,在离开块时销毁。局部static对象在第一次使用前分配,在程序结束时销毁。除此之外,C++还支持动态分配对象,动态分配的对象的生存期与在哪里创建是无关的,只有当显式地被释放时,这些对象才会被销毁。非动态创建的对象,一般分配在静态内存和栈内存中,静态内存用来保存局部static对象,类static数据成员以及定义在任何函数之外的变量。
2025-02-05 21:14:59
425
原创 C++函数简介
return语句返回值的类型必须与函数的返回类型相同,或者能隐式地转换成函数的返回类型。当执行指针拷贝操作时,拷贝的是指针的值。因为不能拷贝数组,所以我们无法以值传递的方式使用数组参数,因为数组会被转换为指针,所以当我们为函数传递一个数组时,实际传递的是指向数组首元素的指针。它们对函数而言是“局部”的,仅在函数的作用域内可见,同时局部变量还会隐藏在外层作用域中同名的其他声明。返回一个值的方式和初始化一个变量或形参的方式完全一样:返回的值用于初始化调用点的一个临时量,该临时量就是函数调用的结果。
2025-02-05 21:09:30
793
原创 Shader动画实例
参考文献:《unity shader入门精要》纹理动画序列帧动画Shader "Unlit/Chapter11-ImageSequenceAnimation"{ Properties { _Color("Color Tint", Color) = (1,1,1,1) _MainTex("Image Sequence",2D) = "white" {} _HorizontalAmount("Horizontal Amo.
2021-03-01 20:32:29
194
1
原创 简单的程序纹理代码实例
参考文献《unity shader入门精要》简单的程序纹理代码实例using System.Collections;using System.Collections.Generic;using UnityEngine;[ExecuteInEditMode]public class ProceduralTextureGeneration : MonoBehaviour{ //该脚本使用的程序纹理 public Material material = null..
2021-03-01 20:29:00
364
原创 渲染纹理实例
参考文献:《Unity Shader入门精要》渲染纹理镜子效果Shader "Unlit/Chapter10-Mirror"{ Properties { _MainTex ("Main Tex", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" "Queue"="Geometry"} //LOD 100 P..
2021-03-01 20:26:17
146
原创 高级纹理
参考文献:《unity shader入门精要》立方体纹理立方体纹理时环境映射的一种实现方式。环境映射可以模拟物体周围的效果。而使用了环境映射的物体可以看起来像镀了层金属一样反射周围的环境。立方体纹理一共包含6张图像,这些图像对应了一个立方体的六个面,立方体纹理的名称也是由此得来。对立方体纹理采样我们需要提供一个三维的纹理坐标。这个三维纹理坐标表示我们在世界坐标空间下的一个3D方向。这个矢量方向从立方体的中心出发,当它向外部延伸时就会和立方体的6个纹理之一发生相交,而采样的结果就是该交点计算得.
2021-03-01 20:22:57
339
原创 复杂的光照
参考文献:《Unity shader入门精要》Unity的渲染路径渲染路径主要用于和光源打交道,shader编写中需要为pass指定渲染路径,这样unity才会明白程序员想要使用的渲染路径,然后将光源和处理后的光照信息放到这些数据里,程序员才能在着色器中进行访问。大多数情况下,一个项目只使用一种渲染路径,因此我们可以为整个项目设置渲染时的渲染路径。在Unity的Edit->Project Settings->Player->Other Settings->Render.
2021-03-01 20:16:51
203
原创 C++中常用的哈希结构
C++中常用的哈希结构数组 set(集合) map(映射)以下主要谈谈set和mapset 集合 底层实现 是否有序 数值是否可以重复 能否改变数值 查询效率 增删效率 set 红黑树 有序 否 否 O(logn)..
2021-03-01 20:10:19
385
原创 散列表
参考文献:《算法导论》第三版11.1 直接寻址表eg:数组用一个数组,或称为直接寻址表,记为T[0,m-1]。其中每个位置,或称为槽,对应全域U中的一个关键字。槽K指向集合中的一个关键字为k的元素。如果集合中没有关键字为k的元素,则T[k]=NIL删除,增加,修改时间复杂度均为o(1)11.2 散列表哈希冲突散列表中的两个关键字可能映射到同一个槽中。我们称这种情形为冲突。解决冲突的方法1.通过链接法解决冲突在链接法中,将散列到同一个槽中的所...
2021-03-01 20:06:45
319
原创 二叉树(一)
参考文献:二叉树专题精讲 by代码随想录二叉树的种类二叉树的两种主要形式:满二叉树完全二叉树满二叉树定义:如果一颗二叉树只有度为0的节点和度为2的节点,并且度为0的节点在同一层上,则这课二叉树为满二叉树。如图所示:这课树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树完全二叉树定义:在完全二叉树中,除了最底层可能没有填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第h层,则该层包含1~...
2021-03-01 19:56:23
325
原创 关于Unity Shader编写程序纹理报错error CS0246: The type or namespace name ‘SetProperty‘ could not be found 问题
在阅读《unity shader入门精要》这本书学习程序纹理一章时,在实验书中示例代码时,报错error CS0246: The type or namespace name 'SetProperty' could not be found问题,问题代码段如下:#region Material properties [SerializeField, SetProperty("textureWidth")] private int m_textureWidth = 512; public int
2021-01-24 23:06:17
1921
7
原创 类的自动转换和强制类型转换
类型转换内置类型转换:将一个标准类型变量的值赋给另一个标准类型的变量时,如果这两种类型兼容,则c++自动将这个值转变为接收变量的类型。eg:long cout=8; //int型的8将被转换为longdouble time =11; // int型的11将被转换为doubleint side=3.33 //double类型的3.33将被转换为int的3上述赋值语句都是可行的,因为在c++看来,各种数值类型都表示相同的东西——一个数字。类的强制类型转换#in...
2021-01-05 15:58:54
130
原创 Unity shader阴影
Unity shader阴影参考书籍:《Unity Shader入门精要》阴影是如何实现的在实时渲染中,我们最常使用的是一种名为Shadow Map的技术。这种技术的原理是将摄像机放到与光源重合的位置上,那么场景中该光源的阴影区域就是那些摄像机看不到的地方。Unity使用的就是这种技术。在前向渲染路径中,如果场景中最重要的平行光开启了阴影,unity就会为该光源计算它的阴影映射纹理(shadowMap)。这张阴影映射纹理本质上也是一张深度图,它记录了从该光源的位置出发、能看到的场景..
2020-12-26 21:12:21
1022
1
原创 Unity的渲染路径
Unity的渲染路径参考书籍:《Unity Shader 入门精要》渲染路径主要用于和光源打交道,shader编写中需要为pass指定渲染路径,这样unity才会明白程序员想要使用的渲染路径,然后将光源和处理后的光照信息放到这些数据里,程序员才能在着色器中进行访问。*大多数情况下,一个项目只使用一种渲染路径,因此我们可以为整个项目设置渲染时的渲染路径。在Unity的Edit->Project Settings->Player->Other Settings...
2020-12-26 21:00:15
479
原创 C++ 友元
友元C++控制对类对象数据的私有访问,通常情况下,公有方法提供唯一的访问途径,有时由于这种限制太严格,以致于不适合特定的编程问题。在这种情况下,C++提供了一种形式访问权限:友元友元有三种:友元函数 友元类 友元成员函数通过让函数成为类的友元,可以赋予该函数与类的成员函数相同的访问权限。以下主要介绍友元函数创建友元函数创建友元函数的第一步是将其原型放在类声明中,并在原型中附上friend关键字eg:friend Time operator*(double m,const .
2020-12-16 22:28:50
162
原创 C++运算符重载
运算符重载运算符重载是一种形式的C++多态。c++能够使用户定义多个名称相同但特征标(参数列表)不同的函数。这种被称为函数重载或者函数多态,旨在能用同名的函数来完成相同的操作。运算符重载也是如此。例如*号操作既可用于做指针地址,又可用于做两个数之间的乘法操作。C++会根据操作数的数目和类型来决定采用哪种操作。重载运算符方式:operatorop(argument-list)eg:operator+() 重载+号运算符,operator *()重载*号运算符。op必须为有效的运算符。以下.
2020-12-16 20:19:33
1208
原创 对象与类
面向对象编程(OOP)特性抽象封装和数据隐藏多态继承代码的可重用性类规范的组成类声明:以数据成员的方式描述数据部分,以成员函数(被称为方法)的方式描述公有接口。类方法定义:描述如何实现类成员函数。类和结构体最大的区别在于:结构体的默认访问类型是public,而类为private*如果函数定义位于类声明中,那么函数将自动成为内联函数*所创建的每一个对象都有自己的存储空间,用于存储其内部变量和类成员;但是同一个类的所有对象共享同一组类方法,即每一种方...
2020-12-12 16:43:42
102
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人