![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图形学
文章平均质量分 59
嘿克不黑
因为热爱,成就梦想。
展开
-
渲染书籍目录汇总(不断更新中...)
渲染是一个令人着迷的方向,可学习渲染着实有不小的难度。渲染技术不断在发展,各种技术层出不穷,相关英文资料(中文相对少了很多)更是多如牛毛。那么如何快速找到自己需要的资料呢?为了帮助自己和广大渲染爱好者更方便的找到自己需要的资料,特意写了这篇文章。这篇文章(不知道知乎是否有字数限制,若有将分多篇文章)将不断更新渲染相关的书籍,并且列出书籍目录。列出书籍目录有什么用呢?(个人英语水平有限,目录翻译不对还望指正。)比如,我要学习毛发渲染,那么,可以直接浏览器里面Ctrl+F快捷键搜索毛发或hair,就原创 2022-05-08 09:50:18 · 4738 阅读 · 2 评论 -
这么多图形API我该学那个呢
图形API有很多,这时候很多人可能会纠结于自己到底应该学那个?怎么说呢,其实学那个都无所谓(当然如果你有特别需求另外考虑),当把其中一个学得差不多了去学其他的也花不了多少时间。WebGL不过,如果是初学者的话,我还是比较推荐先学WebGL,因为这玩意是众多图形API里面最简单的一个了。OpenGL当然你也可以去学OpenGL,因为这玩意是众多图形API里面资料最多的一个了。OpenGL ESOpenGL ES和WebGL差不多简单,如果是搞Android什么的方向的话到可以考原创 2021-10-19 15:14:49 · 1052 阅读 · 0 评论 -
光栅化渲染器:目录
前言光栅化渲染是一个又好玩又有挑战的东西,个人通过写一个光栅化渲染器来学习渲染的话是一个不错的选择。光栅化渲染器目录光栅化渲染器:项目设置光栅化渲染器:画线光栅化渲染器:填充三角形光栅化渲染器:对三角形着色光栅化渲染器:坐标变换光栅化渲染器:渲染一个场景光栅化渲染器:深度缓存光栅化渲染器:视椎体剔除光栅化渲染器:背面剔除光栅化渲染器:纹理光栅化渲染器:光照光栅化渲染器:加载模型光栅化渲染器:立方体贴图光栅化渲染器:阴影光栅化渲染器:泛光…结尾如果你遇到了问题可原创 2021-08-28 15:57:40 · 332 阅读 · 0 评论 -
光栅化渲染器:深度缓存
前言上一篇文章我们已经发现了渲染不正确的问题,我们今天就通过z buffer来解决这个问题。深度缓存深度缓冲区与帧缓冲区相对应,用于记录上面每个像素的深度值,通过深度缓冲区,我们可以进行深度测试,从而确定像素的遮挡关系,保证渲染正确。深度缓存中存储着每个象素点的深度值,深度值(Z值)越大,则离摄像机越远。在不使用深度测试的时候,如果我们先绘制一个距离较近的物体,再绘制距离较远的物体,则距离远的物体因为后绘制,会把距离近的物体覆盖掉,这样的效果并不是我们所希望的。而有了深度缓冲以后,绘制物体的顺序就不那原创 2021-08-28 09:39:35 · 315 阅读 · 0 评论 -
光栅化渲染器:渲染一个场景
前言上一篇文章我们已经对三角形进行了坐标变换,今天准备渲染几个立方体,渲染立方体就会比平面的三角形看起来更意思了。渲染一个线框立方体咱们现在可以渲染一个三角形了,那么也就意味着我们可以渲染任何物体了,因为任何物体都可以划分为三角形,那么咱们今天就先从比较简单的立方体开始。上一篇文章的坐标变换部分有点乱,今天对它们进行了封装,具体可以看代码。// 引用EasyX图形库头文件#include <graphics.h> #include <conio.h>//glm数学相关原创 2021-08-27 22:31:39 · 379 阅读 · 0 评论 -
光栅化渲染器:坐标变换
前言坐标变换是渲染管线里面很重要的一个过程,已经有很多书籍和文章对此进行了讲解,我这边就不重复讲解了。虽然我们可以借助glm等数学库非常轻松的构造MVP矩阵,但是,我还是推荐大家去了解Model矩阵是如何构造出来的,为什么是按照SRT顺序构造而不是其他顺序呢?还有View矩阵是如何构造出来的,以及构造View矩阵有几种方法?各自有什么区别呢?还有比较复杂的投影矩阵是如何构造出来的?以及为什么需要这么多矩阵呢?等等都推荐大家去了解清楚。构造MVP矩阵因为我们使用了glm,所以构造起来还是比较简单的。原创 2021-08-26 23:39:17 · 386 阅读 · 0 评论 -
光栅化渲染器:对三角形着色
前言上一篇文章咱们已经画出来了一个纯色的三角形,那么今天我们画一个非纯色的三角形。对三角形着色其实对三角形着色很简单,咱们只需要给予不同的顶点不同的颜色值,然后进行插值就可以了,废话不多说直接看代码。// 引用EasyX图形库头文件#include <graphics.h> #include <conio.h>//glm数学相关头文件#include <glm/glm.hpp>#include <glm/gtc/matrix_transform.原创 2021-08-26 21:53:56 · 378 阅读 · 0 评论 -
光栅化渲染器:填充三角形
前言为什么三角形是实时渲染的首选多边形?因为它们具有以下理想的特性:三角形是最简单的多边形类型。少于三个顶点就没法组成一个多边形。三角形始终是平面的。任何具有四个或更多顶点的多边形都没有这个属性,因为前三个顶点定义了一个平面,第四个顶点可能位于该平面的上方或下方。三角形在大多数类型的变换下仍然是三角形,包括仿射变换和透视投影。几乎所有商业图形加速硬件都是围绕三角形光栅化设计的。绘制线框三角形上篇文章我们实现了画线功能,现在可以轻而易举的画一个三角形了。// 引用EasyX图形库头文件#原创 2021-08-25 22:28:17 · 528 阅读 · 0 评论 -
光栅化渲染器:画线
直线方程假设在屏幕上面有两个点,P0(x0,y0)和P1(x1,y1),那么我们如何画一条从P0到P1的线?其实很简单,在P0P1这条线上的点P都满足一个方程:P = P0 + t(P1 - P0)转化为:x = x0 + t(x1 - x0)y = y0 + t(y1 - y0)进一步化简第一个方程,求得:t=(x - x0) / (x1 - x0)把t带入第二个方程,可得:y = y0 + (x - x0) / (x1 - x0) * (y1 - y0)因为(y1 -原创 2021-08-24 22:35:22 · 329 阅读 · 0 评论 -
光栅化渲染器:项目设置
前言本系列教程准备从零到一实现一个光栅化渲染器,采用的编程语言是C++。在开始编写渲染器之前,我们需要提前准备四项功能。显示窗口输出一个像素的方法处理鼠标键盘事件数学库本教程将使用一个非常简单的图形库EaxyX,EasyX刚刚好具备前三个功能,EasyX使用很简单,只需要下载安装然后添加相应的头文件就可以了。对于数学库的话我们使用glm。下载安装EasyX下载地址下载完以后直接双击下一步安装就可以,点完安装就可以关闭了,非常简单。下载glm下载地址下载完以后,咱们只需要保原创 2021-08-23 22:30:34 · 473 阅读 · 0 评论 -
3D软件渲染教程:渲染实体
添加RenderText.java/** * * @author yangshuohao */public class RenderContext extends Bitmap{ private final int m_scanBuffer[]; public RenderContext(int width,int height) { super(width,height); m_scanBuffer=new int[height原创 2021-08-15 15:47:22 · 256 阅读 · 0 评论 -
3D软件渲染教程:透视
上篇文章的结果修改Stars.java/** * * @author yangshuohao */public class Stars3D { private final float m_spread; private final float m_speed; private final float m_starX[]; private final float m_starY[]; private final float m_starZ[];原创 2021-08-15 13:34:23 · 359 阅读 · 0 评论 -
3D软件渲染教程:星域
添加Stars3D.java/** * * @author yangshuohao */public class Stars3D { private final float m_spread; private final float m_speed; private final float m_starX[]; private final float m_starY[]; private final float m_starZ[];原创 2021-08-15 12:14:29 · 232 阅读 · 0 评论 -
3D软件渲染教程:显示位图
添加Bitmap.javaimport java.util.Arrays;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/** * Stores a set of pixels in a component-based format. * The component-based format stores color原创 2021-08-15 08:59:12 · 363 阅读 · 0 评论 -
3D软件渲染教程:创建显示
新建项目File–>New Project添加Display.Javaimport java.awt.Canvas;import java.awt.Dimension;import javax.swing.JFrame;/** * * @author yangshuohao */public class Display extends Canvas{ private final JFrame m_frame; public Display(int wi原创 2021-08-14 23:49:04 · 291 阅读 · 0 评论 -
3D软件渲染教程
3D软件渲染教程系列通过Java编程语言从零到一实现一个软渲染器,从而学习3D软件渲染相关的知识。本次开发采用的IDE是NetBeans,大家可以去官网下载安装,关于NetBeans如何下载安装网上有很多教程,大家可以自行搜索。目录3D软件渲染教程:创建显示...原创 2021-08-14 23:33:38 · 346 阅读 · 0 评论 -
齐次坐标介绍
问题:两条平行线可以相交。铁路变窄,在地平线上相遇。在欧几里得空间(几何)中,同一平面上的两条平行线不能相交,也不能永远相交。这是每个人都熟悉的常识。然而,在投影空间中则不再如此,例如,侧面图片中的火车铁路在远离眼睛的同时变得更窄。最后,两条平行的轨道在地平线上相遇,这是无穷远处的一个点。欧几里得空间(或笛卡尔空间)很好地描述了我们的 2D/3D 几何,但它们不足以处理射影空间(实际上,欧几里德几何是射影几何的一个子集)。二维点的笛卡尔坐标可以表示为(x, y)。如果这个点远离无穷远呢..翻译 2021-08-11 09:26:24 · 597 阅读 · 0 评论 -
推导投影矩阵
推导投影矩阵在任何 3D 图形程序员工具包中的基本矩阵变换中,投影矩阵都比较复杂。平移和缩放一目了然,任何对三角学有基本了解的人都可以想象出旋转矩阵,但投影有点棘手。如果您曾经查找过此类矩阵的公式,就会知道常识不足以告诉您它的来源。然而,我还没有在网上看到很多资源来描述如何推导投影矩阵。这就是我将在本文中讨论的主题。对于那些刚开始使用 3D 图形的人,我应该提一下,了解投影矩阵的来源可能是我们中间有数学倾向的人的好奇心,但这不是必需的。你可以只用公式;如果您正在使用像 Direct3D 这样的图形翻译 2021-08-10 12:07:22 · 564 阅读 · 0 评论