<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Catog的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Catog</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Catog]]></copyright><item><title><![CDATA[OpenGL学习笔记（十）-几何着色器-实例化]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/124590519</link><guid>https://blog.youkuaiyun.com/Catog/article/details/124590519</guid><author>Catog</author><pubDate>Fri, 13 May 2022 10:43:44 +0800</pubDate><description><![CDATA[参考网址：LearnOpenGL 中文版
4.7 几何着色器
4.7.1 基本概念
1、顶点和片段着色器之间有一个可选的几何着色器，几何着色器的输入是一个图元（如点或三角形）的一组顶点，顶点发送到下一着色器之前可对它们随意变换，将顶点变换为完全不同的图元，并且还能生成比原来更多的顶点。
#version 330 core
layout (points) in;
layout (line_strip, max_vertices = 2) out;

void main() {    
    gl_Posit]]></description><category></category></item><item><title><![CDATA[OpenGL学习笔记（九）-高级数据-高级GLSL]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/124465643</link><guid>https://blog.youkuaiyun.com/Catog/article/details/124465643</guid><author>Catog</author><pubDate>Thu, 05 May 2022 15:47:58 +0800</pubDate><description><![CDATA[参考网址：LearnOpenGL 中文版
第四章 高级OpenGL
4.6 数据与缓冲
在OpenGL中使用缓冲来储存数据，本节将讨论不同的缓冲函数，以及如何使用纹理对象来储存大量的数据。缓冲是用来管理特定内存块的对象，将它绑定到一个缓冲目标后，才赋予了其意义。例如，将缓冲绑定到GL_ARRAY_BUFFER或GL_ELEMENT_ARRAY_BUFFER等缓冲目标上，OpenGL根据目标的不同，以不同的方式处理缓冲。
4.6.1 缓冲函数
1、之前一直调用glBufferData函数来填充缓冲对象所管理的]]></description><category></category></item><item><title><![CDATA[OpenGL学习笔记（八）-面剔除-帧缓冲-立方体贴图]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/124349976</link><guid>https://blog.youkuaiyun.com/Catog/article/details/124349976</guid><author>Catog</author><pubDate>Wed, 27 Apr 2022 10:53:36 +0800</pubDate><description><![CDATA[参考网址：LearnOpenGL 中文版
第四章 高级OpenGL
4.4 面剔除
4.4.1 基本概念
1、一个3D立方体，从任意方向最多能同时看到3个面，以某种方式丢弃这几个看不见的面，能省下超过50%的片段着色器执行数。
2、如何确定物体的某一个面看不见？一个闭合形状的每个面都有两侧，每一侧要么面向用户，要么背对用户。面剔除能够检查所有面向观察者的面，并渲染它们，而丢弃那些背向的面。但要告诉OpenGL哪些是正向面和背向面，这可通过分析顶点数据的环绕顺序完成。
4.4.2 环绕顺序
1、当定义一组三角]]></description><category></category></item><item><title><![CDATA[OpenGL学习笔记（七）-深度测试-模板测试-混合]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/124289562</link><guid>https://blog.youkuaiyun.com/Catog/article/details/124289562</guid><author>Catog</author><pubDate>Fri, 22 Apr 2022 16:27:31 +0800</pubDate><description><![CDATA[参考网址：LearnOpenGL 中文版
第四章 高级OpenGL
4.1 深度测试
4.1.1 深度缓冲
1、深度缓冲用来防止被阻挡的面渲染到其它面的前面，由窗口系统自动创建，在每个片段中储存了它的深度值。当启用深度测试时，OpenGL会将一个片段的深度值与深度缓冲的深度值进行对比。如果通过了深度测试，则在深度缓冲中储存该片段的z值；如果没有通过，则会丢弃该片段。
2、深度缓冲创建于片段着色器运行之后，在屏幕空间中运行，与glViewport所定义的视口密切相关。屏幕空间坐标可使用GLSL内建变量gl_F]]></description><category></category></item><item><title><![CDATA[OpenGL学习笔记（六）-模型加载]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/124103342</link><guid>https://blog.youkuaiyun.com/Catog/article/details/124103342</guid><author>Catog</author><pubDate>Fri, 15 Apr 2022 16:05:54 +0800</pubDate><description><![CDATA[参考网址：LearnOpenGL 中文版
哔哩哔哩教程
第三章 模型加载
3.1 Assimp
1、Assimp能够导入多种模型文件格式，将所有的模型数据加载至Assimp的通用数据结构中，我们就能够从Assimp的数据结构中提取我们所需的所有数据了。
2、Assimp会将整个模型加载进一个场景对象，场景对象中包含一系列的节点，每个节点包含了场景对象中所储存数据的索引，每个节点都可以有任意数量的子节点。（图中左半边）

场景的根节点含子节点，子节点中有一系列指向场景对象中mMeshes数组中储存的网格数据的]]></description><category></category></item><item><title><![CDATA[OpenGL学习笔记（五）-投光物-多光源]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/124073159</link><guid>https://blog.youkuaiyun.com/Catog/article/details/124073159</guid><author>Catog</author><pubDate>Mon, 11 Apr 2022 10:58:00 +0800</pubDate><description><![CDATA[参考网址：LearnOpenGL 中文版
哔哩哔哩教程
2.5 投光物
2.5.1 平行光
1、当一个光源处于很远的地方时，来自光源的每条光线就会近似于互相平行，例如太阳。不论物体和/或者观察者的位置，看起来好像所有的光都来自于同一个方向。当假设光源处于无限远处的模型时，它就被称为定向光。

2、通过定义光线方向向量即可模拟一个定向光。
struct LightDirect {
    vec3 lightDir;

    vec3 ambient;
    vec3 diffuse;
    vec3 ]]></description><category></category></item><item><title><![CDATA[OpenGL学习笔记（四）-光照-材质-光照贴图]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/123940091</link><guid>https://blog.youkuaiyun.com/Catog/article/details/123940091</guid><author>Catog</author><pubDate>Sun, 10 Apr 2022 09:46:06 +0800</pubDate><description><![CDATA[参考网址：LearnOpenGL 中文版
哔哩哔哩教程
第二章 光照
2.1 颜色
现实生活中人眼看到某一物体的颜色，是它所反射的颜色。如将白光照在红色的玩具上，玩具会吸收白光中除了红色以外的所有子颜色，不被吸收的红色光被反射到我们的眼中，让这个玩具看起来是红色的。

该颜色反射的定律运用在OpenGL时，给定光源颜色，把光源的颜色与物体的颜色值相乘，所得到的就是这个物体所反射的颜色。
glm::vec3 ambientColor(0.0f, 1.0f, 0.0f);
glm::vec3 objColor(]]></description><category></category></item><item><title><![CDATA[OpenGL学习笔记（三）-变换-坐标系统-摄像机]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/123755523</link><guid>https://blog.youkuaiyun.com/Catog/article/details/123755523</guid><author>Catog</author><pubDate>Sun, 03 Apr 2022 10:29:57 +0800</pubDate><description><![CDATA[参考网址：LearnOpenGL 中文版
哔哩哔哩教程
1.5 变换
为了使物体变成动态的，需要使用多个矩阵对象变换一个物体。
1.5.1 向量
向量包含方向和模。由于向量是一个方向，很难用位置表示，因此可指定原点，然后指向一个方向，对应一个点，使其变为位置向量。
1、向量与标量运算：数学中是没有这个运算的，但是在许多线性代数的库中支持这样的运算。该运算就是将向量的每个元素，与标量进行运算。其中的+可以是+，-，·或÷。注意－和÷运算时不能颠倒（标量-/÷向量），因为颠倒的运算是没有定义的。

2、向量取反]]></description><category></category></item><item><title><![CDATA[OpenGL学习笔记（二）-着色器-纹理]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/123682270</link><guid>https://blog.youkuaiyun.com/Catog/article/details/123682270</guid><author>Catog</author><pubDate>Sat, 26 Mar 2022 12:46:41 +0800</pubDate><description><![CDATA[参考网址：LearnOpenGL 中文版
哔哩哔哩教程
第一章 入门
1.3 着色器
1.3.1 基本结构
利用着色器语言编写着色器，以顶点着色器和片段着色器为例，在着在顶点着色器中输出颜色变量vertexColor，在片段着色器中输入变量vertexColor作为图案的颜色。
#version 330 core
layout (location = 0) in vec3 aPos; // 位置变量的属性位置值为0
out vec4 vertexColor; // 为片段着色器指定一个颜色输出
void m]]></description><category></category></item><item><title><![CDATA[OpenGL学习笔记（一）-窗口-渲染管线]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/123631768</link><guid>https://blog.youkuaiyun.com/Catog/article/details/123631768</guid><author>Catog</author><pubDate>Tue, 22 Mar 2022 15:55:26 +0800</pubDate><description><![CDATA[参考网址：LearnOpenGL 中文版
哔哩哔哩教程
第一章 入门
1.0 配置库

首先，在我们画出出色的效果之前，需创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而，这些操作在每个系统上都是不一样的，因此需要利用GLFW库，给我们提供一个窗口和一个OpenGL上下文用来渲染；
其次，OpenGL只是一个标准/规范，具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多，它大多数函数的位置都无法在编译时确定下来，需要在运行时查询。为避免查询繁琐的过程，需利用GLE]]></description><category></category></item><item><title><![CDATA[Vrep学习笔记（二）]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/119393165</link><guid>https://blog.youkuaiyun.com/Catog/article/details/119393165</guid><author>Catog</author><pubDate>Fri, 06 Aug 2021 10:06:14 +0800</pubDate><description><![CDATA[四、基于Dummy和path的路径规划
4.1 Dummy和path

Path是Scene的一种“实体”，可以使用Path来自定义各种运动路径，从Path上我们可以给定某一个时刻机器人运动到某一点的位置以及其姿态，定义机器人在整个路径中每一时刻的运动过程，V-REP中默认的Path是通过给定一些关键的控制点，并在这些控制点中间采用贝塞尔曲线插值来得到光滑路径的。
Dummy是一种带有姿态信息的虚拟“质点”，Dummy可以沿着Path向前运动，实时获取当前时刻在Path上的位置和姿态，作为路径上的一个“领航]]></description><category></category></item><item><title><![CDATA[Vrep学习笔记（一）]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/119383086</link><guid>https://blog.youkuaiyun.com/Catog/article/details/119383086</guid><author>Catog</author><pubDate>Fri, 06 Aug 2021 10:06:04 +0800</pubDate><description><![CDATA[本文转载自知乎：AI与机器人
一、用代码控制YouBot机器人
1.1 YouBot机器人模型

YouBot机器人包括底盘和机械臂。
底盘带有四个麦轮，麦轮分为A轮和B轮，可以前后左右移动。
机械臂有5个旋转关节和相应的连杆机构串联组成，末端装有夹持机构。每个关节可以进行单独的控制。在Vrep中已经构建好了基本的关节模型和运动控制接口，只需要调用响应的控制接口来控制各个关节就行了。

1.2 Vrep中基本的代码框架


V-REP的控制脚本至少包含Main script和Child script。


]]></description><category></category></item><item><title><![CDATA[Python笔记（3）]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/118274243</link><guid>https://blog.youkuaiyun.com/Catog/article/details/118274243</guid><author>Catog</author><pubDate>Wed, 04 Aug 2021 14:10:45 +0800</pubDate><description><![CDATA[第十节 Numpy
10.1 数组创建

NumPy 用于处理数组。 NumPy 中的数组对象称为 ndarray。
可以使用 array() 函数创建一个 NumPy ndarray 对象。
可以将列表、元组或任何类似数组的对象传递给 array() 方法，然后它将被转换为 ndarray。

import numpy as np 

arr = np.array([1, 2, 3, 4, 5])
arr = np.array((1, 2, 3, 4, 5))

print(arr)
print(type]]></description><category></category></item><item><title><![CDATA[Pytorch笔记（3）]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/118343377</link><guid>https://blog.youkuaiyun.com/Catog/article/details/118343377</guid><author>Catog</author><pubDate>Thu, 01 Jul 2021 19:18:55 +0800</pubDate><description><![CDATA[九 损失函数
9.1 损失函数

L1loss- 直接求差
MSEloss-均方差
CrossEntropyLoss -交叉熵

我们定义一个分类的项目，要判断的目标为[person,dog,cat]，它们组成为class[0,1,2]，经过网络输出每个类别的概率x。例如，我们将dog的图片传递给网络，输出x=[0.1,0.2,0.3]，对应的class=1，于是我们就可以去算交叉熵为：
loss(x,class)=−0.2+log(e0.1+e0.2+e0.3)loss(x, class)=-0.2+lo]]></description><category></category></item><item><title><![CDATA[PyTorch学习笔记（2）]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/118302330</link><guid>https://blog.youkuaiyun.com/Catog/article/details/118302330</guid><author>Catog</author><pubDate>Tue, 29 Jun 2021 19:58:23 +0800</pubDate><description><![CDATA[七 torchvision中数据集的使用
7.1 下载数据集

pytorch提供的目标识别数据集CIFAR10     pytorchvision

CLASStorchvision.datasets.CIFAR10(root: str, train: bool = True, transform: Optional[Callable] = None, target_transform: Optional[Callable] = None, download: bool = False)

参数
root]]></description><category></category></item><item><title><![CDATA[PyTorch学习笔记（1）]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/117852655</link><guid>https://blog.youkuaiyun.com/Catog/article/details/117852655</guid><author>Catog</author><pubDate>Mon, 28 Jun 2021 14:05:47 +0800</pubDate><description><![CDATA[四、Python学习中的两大法宝函数
import torch
dir(torch)
dir(torch.cuda) #获取这个工具箱里的工具目录
help(torch.cuda.is_available) #获取函数的作用，要去掉括号

五、PyCharm及Jupyter使用及对比


]]></description><category></category></item><item><title><![CDATA[Python笔记（2）]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/118221938</link><guid>https://blog.youkuaiyun.com/Catog/article/details/118221938</guid><author>Catog</author><pubDate>Sun, 27 Jun 2021 14:32:47 +0800</pubDate><description><![CDATA[第三节 语句
3.1  If语句
a = 200
b = 66
if b &gt; a:
  print("b is greater than a")
elif a == b:
  print("a and b are equal")
else:
  print("a is greater than b")

a = 200
b = 66
c = 500
if a &gt; b and c &gt; a:
  print("Both conditions are True")

a = 200
b = 66]]></description><category></category></item><item><title><![CDATA[《机器视觉》笔记—视觉图像特征信息提取]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/117561563</link><guid>https://blog.youkuaiyun.com/Catog/article/details/117561563</guid><author>Catog</author><pubDate>Fri, 25 Jun 2021 15:19:06 +0800</pubDate><description><![CDATA[3.1 图像边缘与图像平滑
3.1.1 图像边缘

阶跃边缘
阶跃边缘表现为图像亮度在不连续处的两边的像素灰度值有明显差异，在实际图像中，阶跃边缘变成斜坡形边缘。如图(a)中的第三幅图，阶跃边缘图像亮度的一阶导数的幅度在阶跃边缘上非常大，而在非边缘上为零。而二阶导数值为零，但其左右分别有一正一负两个峰值。

线条边缘
线条边缘边线为图像亮度从一个灰度变化到另一个灰度，之后又很快返回原来的灰度。现实中，线条边缘呈屋顶形，其图像亮度一阶导数为零，二阶导数的幅度最大。

3.1.2 图像平滑滤波

图像滤波是通过]]></description><category></category></item><item><title><![CDATA[《数字图像处理》笔记—空间滤波]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/117749511</link><guid>https://blog.youkuaiyun.com/Catog/article/details/117749511</guid><author>Catog</author><pubDate>Fri, 25 Jun 2021 15:18:53 +0800</pubDate><description><![CDATA[3.4 空间滤波基础

]]></description><category></category></item><item><title><![CDATA[《数字图像处理》笔记—灰度变换]]></title><link>https://blog.youkuaiyun.com/Catog/article/details/117041862</link><guid>https://blog.youkuaiyun.com/Catog/article/details/117041862</guid><author>Catog</author><pubDate>Fri, 25 Jun 2021 15:18:26 +0800</pubDate><description><![CDATA[3.1 背景
本章主要讲解空间域的图像处理方法，直接对图像中的像素进行操作，主要包括：灰度变换和空间滤波。
灰度变换是对图像的各个像素进行操作，空间滤波是对每个像素的邻域进行操作。
3.1.1 灰度变换和空间滤波基础
空间域处理可以表达为


邻域原点从一个像素移动到另一个像素应用算子T，产生输出。对于任意指定的位置(x,y)，输出图像g(x,y)的值等于对f中以(x,y)为原点的邻域应用算子T的结果。以上的操作称为空间滤波。
最小邻域的大小为1，此时g只依赖于点(x,y)处的f值，此时T称为灰度变换函数，]]></description><category></category></item></channel></rss>