
计算机图形学
文章平均质量分 74
计算机图形学相关内容学习
LV小猪精
努力缩小距离--卫星连接tiahuaking
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
布尔运算(Boolean Operators)
布尔操作(Boolean Operators)1 构造实体几何(CSG)2 布尔操作类型3 布尔操作部分代码1 构造实体几何(CSG)构造实体几何允许建模者通过使用布尔运算符组合更简单的对象来创建复杂的曲面或对象,通过组合一些基元对象,能够生成复杂的对象。CSG可以用二叉树表示,叶子节点表示基元,节点表示相应的操作,经典的CSG二叉树如图所示:2 布尔操作类型基元的布尔操作类型主要有以下几种:类型图片布尔并布尔交布尔差3 布尔操作部分代码这边主要用原创 2022-03-24 22:00:22 · 4883 阅读 · 0 评论 -
MC(移动立方体)算法
Marching Cubes(移动立方体)MC算法MC算法写在最前面 MS算法MC算法也被称作“等值面提取(Isosurface Extraction)”是面绘制算法中的经典算法,算法的主要精髓为:在三维离散数据场中通过线性差值来逼近等值面。在学习MC算法前需要给定一些基本概念:首先定义一个立方体单元为一个体素 ,每一个体元均由8个顶点所构成。体素顶点有两种不同的状态量所表示:1.高于或等于势值表示在物体表面的内部2.低于势值表示在物体表面的外部因此,体素的一个顶点有两中可能的状态,则一个原创 2022-03-23 22:11:26 · 6545 阅读 · 7 评论 -
渲染时场景变化平面始终朝向屏幕的操作方法
渲染过程中在实现一些贴图或者字符时希望当场景中相机视角发生变化或者物体发生位置变化时,贴图或者字符始终正面朝向屏幕即平面的法线需要始终朝向屏幕,这个问题有两种解决方法。原创 2023-04-28 15:08:31 · 404 阅读 · 1 评论 -
opengles共享纹理
而OpenGL扩展则定义了一组新的OpenGL ES纹理目标,可以将EGLImageKHR对象绑定到这些纹理目标上。OpenGL ES 3.0中引入的“外部纹理”(External Textures)扩展,允许将OpenGL纹理对象绑定到由外部API创建的纹理对象,例如相机采集到的图像、视频流或其他图像数据。外部纹理扩展提供了一种标准化的方式,让不同的API(如相机API和OpenGL)之间进行数据传输,从而避免了通过复制数据到系统内存再从系统内存传输到GPU内存的过程,提高了数据传输的效率和性能。原创 2023-02-26 16:36:41 · 1178 阅读 · 0 评论 -
opengl shader实现Bezier曲线
【代码】opengl shader实现Bezier曲线。原创 2023-01-05 11:36:35 · 664 阅读 · 0 评论 -
渲染到纹理RTT
创建一张纹理,纹理分辨率由用户设置,创建渲染目标视图,根据纹理宽高重新设置透视投影函数的宽高比以及视口的宽高,绘制目标模型,创建一张纹理D3D11_USAGE_STAGING,设置cpu可读,将数据从GPU拷贝到CPU,将读取的数据保存成jpg图片,然后恢复(与窗口一致)视口及透视投影函数的宽高,然后将Backbuffer与渲染目标视图绑定,绘制到后台缓冲,通过present显示到窗口。1.先创建帧缓冲可以查看。原创 2022-10-19 19:59:08 · 127 阅读 · 0 评论 -
gamma校正
而为了获取光照参数的纹理,像specular贴图和法线贴图几乎都在线性空间中,所以如果把它们也配置为sRGB纹理的话,光照就坏掉了。双曲线比使用二次函数变体在不用gamma校正的时候看起来更真实,不过但我们开启gamma校正以后线性衰减看起来太弱了,符合物理的二次函数突然出现了更好的效果。真实的物理世界中,光照的衰减和光源的距离的平方成反比。这种差异产生的原因是,光的衰减方程改变了亮度值,而且屏幕上显示出来的不是线性空间,所以在监视器上效果最好的衰减方程,并不是符合物理的。这和物理公式是很相似的。原创 2022-10-05 15:07:44 · 1608 阅读 · 0 评论 -
目标物体缩放方法
可以看出当h值不变,FOV越小,f值将会变大,那么其实我们能够看到更远的东西,相对画面大小不变,物体也就越大。相反如果h不变,视场角越大,焦距也就越小,能够看到的物体会越多,也越小。最容易想到的方法是通过改变相机的位置,将相机靠近或者远离目标物体从而实现物体大小的放大或者缩小。定义好传感器的高度h,和焦距f,能很轻松的算出。视场角FOV(Field of view)原创 2022-10-04 22:35:38 · 347 阅读 · 0 评论 -
obj模型文件的格式
一般带纹理的obj模型需要有以下三个文件,分别是。纹理库文件,还有纹理贴图(这里是。用记事本或者其他工具打开查看。原创 2022-09-04 16:22:09 · 3029 阅读 · 0 评论 -
实时渲染和离线渲染
实时渲染指的是一边计算画面,一边输出显示。特点是:能实时操控、实时交互,并且以极高的速度将3D图像处理了,同时实现了逼真的效果。实时渲染更多的是关注实时性与交互性,通常制作的场景是需要进行优化的,这样才可以提高计算画面速度,同时缩短延时。实时渲染的实时性是十分重要的,因为用户不论操作了了什么,都是需要得到实时的反馈结果的,例如,用户在键盘的输入,鼠标的电机等的操作,这些操作都会导致画面进行重新计算,得出新的结果。优点是可以实时操控(实现三维游戏、军事仿真、灾难模拟等)缺点是要受系统的负荷能力的限制,必原创 2022-07-03 10:56:46 · 2930 阅读 · 0 评论 -
Shader Language编程语言(CG/HLSL/GLSL)
Shader Language编程语言Shader Language编程语言Shader Language编程语言Shader Language目前主要有3种语言:基于 OpenGL 的 OpenGL Shading Language,简称 GLSL;基于 DirectX 的 High Level Shading Language,简称 HLSL;还有 NVIDIA 公司的 C for Graphic,简称 Cg 语言。OpenGL(全写Open Graphics Library) 是一个定义了原创 2022-05-27 16:56:29 · 1116 阅读 · 0 评论 -
Opengl同时显示模型和三角网格线框
Opengl同时显示模型和三角网格线框glPolygonMode 函数及相关参数同时显示模型和三角网格线框glPolygonMode 函数及相关参数glPolygonMode(参数1, 参数2);参数1 可以为: GL_FRONT、GL_BACK、GL_FRONT_AND_BACK参数2可以为:GL_LINE(注意区分GL_LINES)、GL_FILL实现效果如下:针对三维三角网格模型首先使用glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);得到的网格模型如下原创 2022-05-26 20:40:06 · 1393 阅读 · 0 评论 -
OpenGL渲染STL三角网格模型
Opengl绘制STL模型实现效果STL模型文件实现代码实现效果首先先看看使用可编程管线实现的STL模型的渲染效果,网格模型的数量大约在100来万,实现的效果还是挺鲁棒。STL模型文件关于STL的文件格式主要包括以下两种:ASCII格式二进制格式实现代码filesystem.h文件#ifndef FILESYSTEM_H#define FILESYSTEM_H#include <string>#include <cstdlib>#include "r原创 2022-05-26 17:40:16 · 1484 阅读 · 0 评论 -
OpenGL深度测试
OpenGL深度测试1. 深度缓冲(Depth Buffer)2. 深度缓冲实现3. 深度测试函数测试对比4. 深度冲突(Z-fighting)1. 深度缓冲(Depth Buffer)深度缓冲是由窗口系统自动创建的,它会以16、24或32位float的形式储存它的深度值。在大部分的系统中,深度缓冲的精度都是24位的。当深度测试(Depth Testing)被启用的时候,OpenGL会将一个片段的深度值与深度缓冲的内容进行对比。OpenGL会执行一个深度测试,如果这个测试通过了的话,深度缓冲将会更新为原创 2022-05-21 17:06:26 · 2124 阅读 · 0 评论 -
模型轮廓提取
模型轮廓提取模型边界 (孔洞)识别算法对于三角网格模型,如果存在某一条边只属于一个三角面片,那么这个边为模型边界,称这条边为模型的边界边。如果一条边同时属于两个三角形,则为内部边。由边界边首尾相连构成的闭环多边形则为边界。模型边界 (孔洞) 搜索主要思路:遍历找到边界边,以找到的边界边为起点,搜寻相邻边界边,最后构成一个闭环多边形。实现的伪代码:...原创 2022-05-05 15:00:29 · 506 阅读 · 0 评论 -
判断点集与多边形的位置关系
判断点集与多边形的位置关系点集与凸多边形点集与一般性多边形点集与凸多边形点集或者是点与多边形位置关系无非就三种点在多边形的内部点在多边形的外部点在多边形上一般如果该多边形是凸的那么我们可以直接用面积法或者向量法来解决位置关系,如下图所示:点集与一般性多边形但是更为一般的多边形可能有凸有凹,该方法便不再适用,如下图所示:根据该思路可以使用射线法,首先看看射线法的基本操作:从目标点引一条射线与多边形做交,当交点个数为奇数说明该点在多边形内部,若是为偶数则该点位于多边形外部,且该方法也原创 2022-05-05 14:39:58 · 839 阅读 · 0 评论 -
OpenGL光源
按照之前简化版点光源生成的平行光原创 2022-04-26 20:42:14 · 1229 阅读 · 0 评论 -
OpenGL光照贴图
光照贴图1. 光照贴图的意义2. 漫反射贴图3. 镜面光贴图1. 光照贴图的意义现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成。只有光照颜色的材质系统是不够的,它只是一个最简单的模型,难以模拟现实中复杂的物体材质。所以我们需要引入漫反射和镜面光贴图(Map)。实现更精确地对物体的漫反射分量和镜面光分量进行控制。2. 漫反射贴图这边要实现的案例是一个带有钢边的木箱子:二维纹理图片如图所示:在着色器中使用漫反射贴图的方法和纹理教程中是完全一样的。主要将纹理储存为Material结构原创 2022-04-22 14:33:17 · 864 阅读 · 1 评论 -
OpenGL物体材质
OpenGL物体材质定义材质的意义如何实现物体材质物体材质的设置光的属性定义材质的意义在现实世界里,每个物体会对光产生不同的反应,每个物体对镜面高光也有不同的反应。有些物体反射光的时候不会有太多的散射,因而产生一个较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的高光点。如果我们想要在OpenGL中模拟多种类型的物体,我们必须为每个物体分别定义一个材质属性。如何实现物体材质当描述一个物体的时候,我们可以用这三个分量来定义一个材质颜色(Material Color):环境光照(Ambie原创 2022-04-21 15:48:54 · 609 阅读 · 0 评论 -
OpenGL冯氏光照
OpenGL光照1. 环境光照 (Ambient lighting)2. 漫反射光照 (Diffuse lighting)3. 镜面反射光照 (Specular lighting)冯氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。通过光照材质的设置渲染出来的物体还是十分逼真的,如下面的这个咖啡机。1. 环境光照 (Ambient lighting)环境光 简单理解为来自环境的光,由许多光线经过多次漫反射最终打在某一点上,实际上环境光原创 2022-04-18 21:36:04 · 608 阅读 · 0 评论 -
OpenGL光照之颜色
OpenGL光照之颜色颜色什么是颜色如何表示物体颜色光照场景的搭建颜色什么是颜色颜色是通过眼、脑和我们的生活经验所产生的一种对光的视觉效应,我们肉眼所见到的光线,是由频率范围很窄的电磁波产生的,不同频率的电磁波表现为不同的颜色,对色彩的辨认是肉眼受到电磁波辐射能刺激后所引起的一种视觉神经的感觉。其实在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的(Reflected)颜色。如何表示物体颜色首先要知道,在实际模型中物体吸收了其中的大部分颜色,它仅反射了代表物体颜色的部原创 2022-04-17 14:43:51 · 874 阅读 · 0 评论 -
OpenGL鼠标视角交互
OpenGL鼠标视角交互1. 欧拉角2. 鼠标输入1. 欧拉角欧拉角(Euler Angle)是可以表示3D空间中任何旋转的3个值,一共有3种欧拉角:俯仰角(Pitch)、偏航角(Yaw)和滚转角(Roll),下面的图片展示了它们的含义:俯仰角是描述我们如何往上或往下看的角偏航角表示我们往左和往右看的程度滚转角代表我们如何翻滚摄像机把三个角结合起来我们就能够计算3D空间中任何的旋转向量本摄像机系统仅关注俯仰角和偏航角对于俯仰角,观察Y轴朝上的方向:俯仰角的Y值 等于sinθdir原创 2022-04-14 21:30:57 · 2237 阅读 · 1 评论 -
OpenGL摄像机键盘交互
摄像机交互对于摄像机基础实现内容较为生疏的可以参考该文章👉摄像机lookAt矩阵实现考虑键盘交互实现opengl摄像机绕着目标物体自由移动,首先需要设置一个摄像机系统,定义lookAt函数变量glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);glm::vec3 cameraFront = glm::vec3(0.0f, 0.0f, -1.0f);glm::vec3 cameraUp = glm::vec3(0.0f, 1.0f, 0.原创 2022-04-13 17:12:18 · 1104 阅读 · 0 评论 -
POV-Ray简单案例
POV-Ray,全名是Persistence of Vision Raytracer,是一个使用光线跟踪绘制三维图像的开放源代码免费软件。按照3.7版本给的参考,写的代码,以下为部分源码#version 3.7;global_settings { assumed_gamma 0.8 } //设置全局亮度#include "colors.inc"#include "textures.inc"#include "shapes.inc"#include "metals.inc"#includ原创 2020-09-16 16:46:02 · 1312 阅读 · 0 评论 -
OpenGL摄像机(Look At矩阵)
OpenGL摄像机1. 摄像机/观察空间2. Look At3. lookAt 矩阵案例1. 摄像机/观察空间观察矩阵将所有的世界坐标变换为相对于摄像机位置与方向的观察坐标。当定义一个摄像机时需要它在世界空间中的位置、观察的方向、一个指向它右侧的向量以及一个指向它上方的向量。实际上创建了一个三个单位轴相互垂直的、以摄像机的位置为原点的坐标系。如下图所示:图1中的Position为摄像机位置glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);正z原创 2022-04-13 13:32:12 · 4266 阅读 · 0 评论 -
OpenGL立方体纹理贴图
依据之前学习的坐标变换,构造一个立方体首先需要构造三维顶点(x,y,z)以及相应的纹理坐标(u,v)每个面由2个三角形构成所以一共有6个三维顶点和纹理坐标我们依次对每个面进行处理 float vertices1[] = { -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f, 1.0f, 0.原创 2022-04-12 14:27:20 · 4386 阅读 · 15 评论 -
OpenGL坐标变换
OpenGL坐标变换1. 坐标系统间的变换1.1 局部空间1.2 世界空间1.3 观察空间裁剪空间1.4 屏幕空间1.5 变换矩阵的组合2. 实现3. 渲染部分代码1. 坐标系统间的变换在渲染管线中,物体的顶点在最终转化为屏幕坐标之前还会被变换到多个坐标系统(Coordinate System)。将物体的坐标变换到几个过渡坐标系(Intermediate Coordinate System)的优点在于,在这些特定的坐标系统中,一些操作或运算更加方便和容易。比较重要的有5个不同的坐标系统:局部空间(L原创 2022-04-11 16:24:36 · 2256 阅读 · 0 评论 -
OpenGL中的变换
OpenGL中的变换1. 矩阵变换1.1 缩放1.2 平移1.3 旋转1.4 矩阵组合2. 案例实现2.1 缩放:2.1.1 等比缩放2.1.2 不等比缩放2.1.3 镜像X方向2.1.4 镜像Y方向2.2 平移2.2.1 动态平移2.3 旋转2.3.1 动态旋转2.4 组合变换2.4.1 复杂的组合变换1. 矩阵变换在opengl中矩阵变换使用的为齐次坐标;使用齐次坐标有几点好处:它允许我们在3D向量上进行位移,同时也方便使用透视投影操作。本篇文章主要偏向于实现,不深究理论的知识。1.1 缩放为向原创 2022-04-10 21:31:26 · 1513 阅读 · 0 评论 -
OpenGL纹理叠加
OpenGL纹理叠加1. 纹理贴图的实现2. 纹理单元在OpenGL纹理贴图的基础上继续深入学习纹理相关内容,本篇文章的主要目的是为了实现OpenGL纹理叠加,需要引入纹理单元的相关概念。1. 纹理贴图的实现按照之前纹理贴图的实现方法在两个三角形组成的矩形内贴上星空和胡桃如下所示2. 纹理单元之前在绘制纹理贴图时着色器的编写如下所示:#version 330 coreout vec4 FragColor;in vec3 ourColor;in vec2 TexCoord;// t原创 2022-04-10 11:02:03 · 1863 阅读 · 4 评论 -
OpenGL纹理贴图
OpenGL纹理1. 基本概念2. 纹理环绕方式3. 纹理过滤3.1 GL_NEAREST3.2 GL_LINEAR3.3 多级渐远纹理 (Mipmap)4. 纹理加载与创建4.1 纹理加载4.2 纹理创建4.3 纹理的使用1. 基本概念纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来表示物体的细节特征,希望绘制一个有足够多细节的物体,当然可以用足够多的顶点颜色来描述,但是无疑也增加了许多额外的开销;另一种办法就是使用纹理。学习之前先展示一张实现的纹理图以更好理解纹理!还是这张图为了将纹原创 2022-04-09 20:56:30 · 8644 阅读 · 0 评论 -
OpenGL可编程着色器
OpenGL着色器1. 着色器语言(GLSL)1.1 一个典型的着色器的基本组成着色器(Shader)是运行在GPU上的程序,是一种把输入转化为输出的程序,着色器之间的通信只能依靠输入与输出。1. 着色器语言(GLSL)着色器依靠着色器语言实现编写,包含一些针对向量和矩阵操作的有用特性1.1 一个典型的着色器的基本组成#version version_number //声明版本in type in_variable_name;//in 输入变量in type in_variab原创 2022-04-08 21:17:47 · 810 阅读 · 0 评论 -
多个着色器与多个VAO,VBO绘制三角形
VAO VBO 多个着色器练习原创 2022-04-07 20:23:02 · 1535 阅读 · 2 评论 -
OpenGL绘制三角形
可编程渲染管线在现代OpenGL中,我们必须定义至少一个顶点着色器和一个片段着色器(因为GPU中没有默认的顶点/片段着色器)。出于这个原因,刚开始学习现代OpenGL的时候可能会非常困难,因为在你能够渲染自己的第一个三角形之前已经需要了解一大堆知识了。#include <glad/glad.h>#include <GLFW/glfw3.h>#include <iostream>//当用户改变窗口的大小的时候,视口也应该被调整。//我们可以对窗口注册一个回调原创 2022-04-06 21:46:20 · 4144 阅读 · 0 评论 -
OpenGL窗口实现
OpenGL窗口实现1 渲染循环包括的代码:2 完整代码及解释3 实现的结果1 渲染循环包括的代码:// 渲染循环while(!glfwWindowShouldClose(window)){ // 输入 processInput(window); // 渲染指令 ... // 检查并调用事件,交换缓冲 glfwPollEvents(); glfwSwapBuffers(window);}2 完整代码及解释#include <g原创 2022-04-06 15:50:03 · 290 阅读 · 0 评论 -
OpenGL状态机
OpenGL状态机1. 什么是状态机?2. OpenGL状态机1. 什么是状态机?先来解释什么是“状态” State 。现实事物是有不同状态的,例如一个自动门,就有 open 和 closed 两种状态。我们通常所说的状态机是有限状态机,也就是被描述的事物的状态的数量是有限个,例如自动门的状态就是两个 open 和 closed 。“状态机”,也就是 State Machine ,不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换图。例如,根据自动门的运行规则,我们可以抽象出原创 2022-04-06 11:13:55 · 1788 阅读 · 1 评论 -
最全计算机图形学面试资料整理
计算机图形学面试资料整理1 什么是渲染管线2 有那几个坐标系(空间)?如何在空间之间进行转换?3 三个重要的空间变换矩阵4 视口变换是什么?5 顶点缓冲对象(Vertex Buffer Objects,VBO)6 顶点数组对象(Vertex Arrary Object,VAO)7 渲染管线的流程8 三种着色器有什么用?各完成了什么过程?9 什么是光栅化?10 OpenGL中有哪几种缓冲?都有什么用?11 为什么要用齐次坐标系12 片段和像素的区别?13 深度缓存算法(zbuffer算法)14 光照计算处理共原创 2022-04-05 21:33:22 · 5939 阅读 · 0 评论 -
原始三维格子点内部实现小范围格子重建
在原始N*M的数组A中(该数组可以理解为规则格子,各维度的增量均为常数)内部构建一个比其小的数组B,要求数组B与A格子点重合,如图所示:原创 2022-04-01 16:15:11 · 235 阅读 · 0 评论 -
STL模型渲染
齿轮龙原创 2021-06-16 14:11:38 · 598 阅读 · 4 评论 -
计算机图形学中的曲线曲面
计算机图形学中的曲线曲面1 曲线1.1 Bezier curves(贝塞尔曲线)2 曲面1 曲线1.1 Bezier curves(贝塞尔曲线)通过四个点定义唯一的曲线,曲线必定经过起始点和终点。理论推导:首先先给定三个点,通过三个点绘制一条曲线,怎么画呢?根据De Casteljau’s algorithm:三个点生成的是二次贝塞尔曲线,如图所示:根据递归的方式将每条边的长度归一化获取边上参数化为t的点,在连线上继续获取参数化为t的点,当点从b0走到b1时,曲线从b0绘制到b2。根据该原创 2022-03-20 15:09:20 · 979 阅读 · 0 评论 -
计算机图形学中的几何
计算机图形学中的几何1.几何表示方法1.1显示表示1.1.1 显示几何(Explicit Representations)1.2隐式表示三级目录1.几何表示方法1.1显示表示理解为能够通过参数映射的方法来定义几何形状,可以很轻易的采样到所有的点,但是给予你任意一点却很难判断它与曲面的关系,如下图所示:通过将(u,v)代入映射关系中能够快速获得(x,y,z)1.1.1 显示几何(Explicit Representations)显式几何有两种方式:一种为直接定义三角形信息另一种为通过参数映原创 2022-03-15 19:36:51 · 574 阅读 · 0 评论