图形学
Golden_Shadow
做一名优秀的游戏程序员
展开
-
软光栅透视校正插值写好了
不摘.原创 2024-01-10 17:52:44 · 430 阅读 · 0 评论 -
Gamma Correction
老摘啥啊原创 2023-02-02 16:35:21 · 210 阅读 · 0 评论 -
Lambert’s law
Irradiance arriving at a surface varies according to the cosine of the angle of incidence of illumination, since illumination is over a larger area at larger incident angles. 刚刚看PBRT看到的.我真是个垃圾,搞了这么多年,今天才搞明白.最近下班刷高数,周末搞PBRT,还是有点用的.和各位分享下.我再去卷一会儿~谁也不要拦着...原创 2022-01-07 23:30:25 · 321 阅读 · 0 评论 -
开篇___
我思想上出现了一个转变,面对图形渲染问题,之前不求甚解,主张拿来就用,对了就行,所谓"对了".这是完全错误的,也是造成我对很多问题一知半解,一瓶子不满半瓶子咣当的原因.我接下来要仔细从头好好全都实现一遍,拿出我当初学编程之初时的精神. 这是一个开篇,准备最先去实现辐射度渲染,拿它开刀. 突然一下找到最近几年感觉自己没啥长进的原因,这二年计划把能撸的全都撸一遍.加油!...原创 2021-10-14 20:18:49 · 122 阅读 · 0 评论 -
最近的Baking2
说好的大场景,先这么大吧.找到足够的资源后可以摆出来.不过编辑器还是需要再进一步搞一下,才方便再做大.忙活了好几天,资源编辑方便搞出来了,很累人. 接下来,就解决接缝的问题了.貌似是最后一个技术问题了.周一还是比较累啊,是不是星期天的晚上不该装逼喝茶水啊.吼吼....原创 2018-06-11 17:07:15 · 296 阅读 · 0 评论 -
继上一篇的2
初步完成.以逐个对象渲染为例.多个对象padding到多个altas接下来搞.for (场景里的每个对象) { 用opengl渲染. vertex shader中用uv作为顶点位置的xy,z填写0.9,w填写1(不被裁剪掉就好).不作矩阵变换.变换并且传递世界空间position和normal进fragment shader. fragment shader...原创 2018-04-27 19:50:36 · 282 阅读 · 0 评论 -
HDR+bloom
说来很惭愧.身为一个图形程序员,却没有实现过几个图形效果.最近2周在引擎了集成了hdr+bloom.而且看来我确实如自己对自己的判断一样,看看资料就可以搞出来.简单说一下. 先渲染到浮点格式rt,里面自然允许rgb>1的颜色; 新建一个原有纹理大小1/16统一缩放的rt.这里在目标RT光栅化的过程中,每个像素向周围采16次,之后加权平均输出到1/16rt. 用这个1/16rt根据原创 2017-09-08 17:13:31 · 705 阅读 · 6 评论 -
坑儿无处不在
最近在搞往引擎里集成cluster forwad shading.因为引擎现在不具备图形调试能力,所以果断跑到unity里去实现. light.transform.position这个成员的类型是vector3,用4x4矩阵乘的话就会丢失矩阵位移信息.unity的矩阵又直接支持了operator * (vector3),所以还是比较隐蔽.不过还是被我找到了. 搞引擎工具尤为主要啊.不然原创 2017-07-24 11:53:48 · 418 阅读 · 0 评论 -
OPENGL编程宝典Phong着色
// DiffuseLight.cpp// OpenGL SuperBible// Demonstrates simple diffuse lighting// Program by Richard S. Wright Jr.#include // OpenGL toolkit#include #include #include #include #include #in原创 2013-02-01 20:23:48 · 3538 阅读 · 0 评论 -
Main.cpp
实现了一个渲染线框立方体的流水线,实现了除光栅化之外的部分.随着往里添加东西随着更新到这里吧,图形学还真有的血,数学还要齐头并进.挺好的,时隔一年,终于找到了自己最想要的.加油!后来添加了相机空间到裁剪空间的转换,从裁剪投影.经过一个星期的拉锯战,终于搞定了裁剪这条巨龙啊...接下来继续完善吧,实施裁剪,深度缓冲,将数学库加入到引擎中以实现操控立方体和摄像机.真好玩,哈哈!// M原创 2012-11-19 19:49:19 · 1408 阅读 · 0 评论 -
最近的Baking4
最近几天一直在尝试分UV之后使得分了之后的chart数量少一些.辗转了几个方向:自己写;抄UE4;研究UVAtlas;研究Thekla_Atlas.最后研究了最后一者.按照作者在git上之前给我的回复,我结合自己研究,还有他说的话,用了Max导出时的三角形顺序,再换了一种填充firstCol的方法,终于到了可以接受的程度.某个测试模型,chart数量能从几千到几百,相差了一个数量级,果断收...原创 2018-07-10 19:01:45 · 346 阅读 · 0 评论 -
最近的Baking3
最近在处理接缝.如上图所示,效果很好.参照顽皮狗一篇文章点击打开链接和这篇大神的blog点击打开链接.想法非常 straightforwad,直接"缝"接缝边.也让我不禁感叹写代码不能靠瞎蒙,要一点一点都想好了,再写.写不出来,就说明还没有明白.放到项目里之后还有问题,正在解决.解决完处理接缝之后,回过头还要考虑是不是重写一下,或者换一个生成UV的库,目前这个库还是比较细碎,避免接缝效果和离线...原创 2018-06-28 16:56:25 · 291 阅读 · 1 评论 -
最近的Baking5
如你所见,有弹射了.简单看了下基于蒙特卡洛积分近似的基于光线追踪的全局光照,https://www.scratchapixel.com/lessons/3d-basic-rendering/global-illumination-path-tracing,一共3部分,看完就看懂了.话说我天天晚上学那点微积分知识让我知道积分就是连续函数求和,这就行了.够用了. 接着就是,照这个抄htt...原创 2018-07-20 14:49:04 · 304 阅读 · 0 评论 -
最近的Baking6
这个就是bake出来的.最近几天把光照图的stitching做好了.其实原本人家的代码就可以直接拿来用,只是我生成轮廓图时错了.接下来简单重构一下代码,之前的痛点解决一下.一个不断开发,补坑的迭代过程.接着完善下加载模型部分,支持子网格.还有光照图存储,生成mipmap,再或者加一个基于chunk对齐来友好对待压缩.继续写吧.有时候这种查缺补漏的工作容易把自己搞得浑浑噩噩.还是挺欣慰的,还...原创 2018-08-07 15:22:13 · 233 阅读 · 0 评论 -
PBR一
因为要实现基于SPHERICAL GAUSSIANS的烘焙.我看他里面存了高光信息,算光照的时候也基于PBR.我理解的不够,于是先实现一遍PBR.IBL在看,不打算实现.至少烘焙完成之前不打算实现.实现PBR的话,也是加深对光照方程的理解. 而且我也以往就有对PBR的梗.现在总算做过了. 今天好累...可能前两天写代码写得太猛了....原创 2018-08-31 19:29:05 · 904 阅读 · 0 评论 -
最近的Baking7
最近在搞如何编码烘焙的数据.看了能有半个月.后来决定先搞一个版出来,以我以往的经验来看,看很久很久,最后不写的话,也不容易赶出来.开干我一直不想太早,现在看来,是不能太晚.最后存成了1阶SH,只存Lambertian diffuse BRDF.最后的结果看来,法线是看得到的.高光先放一放吧.说实在的,对于SH这套我还没有完全理解.光照方程理解得马马虎虎吧. 这周一开始来的时候,我就告...原创 2018-09-07 19:22:23 · 234 阅读 · 0 评论 -
最近的Baking8
前一阵测试烘焙结果.结果发现很渣.大致问题就是反射光线时分布不在半球上均匀分布.最近搞了搞,分布仍然不好,产生的随机数不够随机.cosWeighted的分布目前没发现问题,产生随机数的部分回头好好搞一下.现在总算勉强可以接受了.接下来准备搞一下纹理扩张,代替原来的缝合.目的就是去接缝.改到现在,之前的缝合也不好用了,也不去搞了. 想把这一套搞好真的好墨迹,我觉得可能就是我比较墨迹...原创 2018-09-19 18:28:10 · 238 阅读 · 0 评论 -
最近的Baking9
这个是直接光照和间接光照叠加在一起的效果.没有用SH.只支持一个平行光.因为我确实想今年把这东西搞出个眉目. 效果上已知的问题是随机数产生的问题,这个问题接下来解决.还有就是通过纹理扩张来处理接缝. 先搞吧,一有时间就搞.手头的干的也比较不慢,干完一个活就能迎来1天左右的清闲,我就来搞这个. 加油....原创 2018-09-29 17:48:58 · 274 阅读 · 0 评论 -
SMAA_
最近处理后处理的抗锯齿.刚开始没有抗锯齿,后来加了MSAA,发现内轮廓不灵(内轮廓是闭合的).之后上SSAA,可能是我实现的不对,效果不理想.后来没有放弃,继续研究,发现了MSAA,这是项目的github:https://github.com/iryoku/smaa.git. 项目里的是D3D9和D3D10实现的.至于D3D10是个啥到现在我也不知道...项目里使用OpenG...原创 2019-06-11 14:09:56 · 1316 阅读 · 2 评论 -
IDX9.cpp
#include "IDX9.h"#include "Math.h"IDX9 ::IDX9(){ g_pD3D = NULL ; g_pd3dDevice = NULL ; pVertexBuffer = NULL ; backVertexBuffer = new ScreenVertex[BVBSize] ; backIndexBuffer = new int[BIBSize]原创 2012-11-19 19:47:44 · 784 阅读 · 0 评论 -
IDX9.h
// IDX9.h#ifndef IDX9_H_#define IDX9_H_#include #include #include #include "Math.h"struct ScreenVertex{ float x ; float y ; float z ; float rhw ;} ;#define SCREEN_VERTEX_FVF (D3DFVF_X原创 2012-11-19 19:47:22 · 1833 阅读 · 0 评论 -
Quaternion-未测试-实现文件
#include #include "Quaternion.h"#include "Matrix4x4.h"void Quaternion ::Indentity(){ w = 1 ; x = y = z = 0 ;}void Quaternion ::SetToRotateAboutX(float theta){ float thetaOver2 = theta / 2原创 2012-12-25 21:39:41 · 857 阅读 · 0 评论 -
Quaternion-未测试-头文件
四元数,之前完全不知道是怎么一回事的东西,最近几天突击学习了下.同欧拉角,矩阵相联系的学习,写了这么一个东西.先放着吧,把3D数学这块学得差不多再考虑是不是要整合到我的线框引擎中,实现一个严谨的数学库还是相当难的啊.通常操作的都是单位四元数,因为这样的话n是单位向量,就如同单位向量在计算中带来的便捷那样.四元数跟向量是息息相关的,两个四元数点乘可以得出相似度,也就是可以求出夹角,并且通过求t次原创 2012-12-25 21:39:12 · 1026 阅读 · 0 评论 -
RotationMatrix-未测试-实现文件
#include "Vector3.h"#include "RotationMatrix.h"#include "EularAngles.h"#include "Quaternion.h"void RotationMatrix ::Identity(){ m11 = m22 = m33 = 1 ; m12 = m13 = m21 = m23 = m31 = m32 = 0 ;}原创 2012-12-25 21:43:56 · 791 阅读 · 0 评论 -
Matrix4x3-未测试-实现文件
#include #include #include "Vector3.h"#include "EularAngles.h"#include "Quaternion.h"#include "RotationMatrix.h"#include "Matrix4x3.h"#include "Common.h"void Matrix4x3 ::Identity(){ m11 = m原创 2012-12-25 21:49:42 · 1079 阅读 · 2 评论 -
我的3D引擎数学库头文件
#ifndef MYMATH_H_#define MYMATH_H_#define MIN(a, b) ((a) < (b) ? (a) : (b))#define SWAP(a, b, t) {(t) = (a) ; (a) = (b) ; (b) = (t) ;}float sinLookUpTable[361] = { 0, 0, 0} ;float cosLookUpTa原创 2012-10-10 23:26:00 · 2441 阅读 · 0 评论 -
我的3D引擎数学库实现文件
#include "stdafx.h"#include #include "MyMath.h"float FastSin(float theta){ theta = fmodf(theta, 360) ; if (theta < 0) theta += 360 ; int thetaIntPart = (int)theta ; float thetaFracPart =原创 2012-10-10 23:26:38 · 1763 阅读 · 1 评论 -
逆矩阵的性质
矩阵的逆矩阵具有许多有用的性质: 1.如果MM-1 = I, 则M-1M = I 2.(M1M2)-1 = M2-1M1-1 3.(M-1)-1 = M 4.(αM)-1 = (1/α)M-1 (α != 0) 说明:M-1,表示矩阵M的逆摘自>原创 2012-08-02 20:17:31 · 5878 阅读 · 0 评论 -
行列式的性质
像其他的矩阵运算一样,行列式也具有一些有趣并有用的性质: 1.矩阵的行列式等于其转置矩阵的行列式:|M| = |Mt| 2.两个矩阵之积的行列式等于两个矩阵的行列式之积:|MN| = |M||N| 3.矩阵的逆矩阵的行列式等于矩阵行列式的倒数:|M^(-1)| = 1/|M| 4.单位矩阵的行列式等于1:|I| = 1 5.数量与矩阵之积的行列式等于数量的矩阵大小次幂原创 2012-08-02 19:53:24 · 1464 阅读 · 0 评论 -
RotationMatrix-未测试-头文件
这个基本上就是抄的,对于局部空间到世界空间的来回转换其实挺糊涂,直观来说,只要求出一个,再求个逆,书上的做法名字比较好听罢了.真心觉得作者最好拿我当傻子,把最直观的东西呈现在我面前.否则,挺好的,我得自己去搞明白.#ifndef ROTATIONMATRIX_H_#define ROTATIONMATRIX_H_class Vector3 ;class EulerAngles ;cl原创 2012-12-25 21:42:54 · 766 阅读 · 0 评论 -
Matrix4x3-未测试-头文件
写这个,实现了除透视投影的其他大多数东西,反射,切变,缩放,平移,旋转,矩阵还真是一个好工具.连续研究这些东西大概三个星期了,真有点恶心了.C++叫我忘得差不多了,用C#永久了真的会白痴许多的.游戏开发渐渐会降低开发者的门槛,真正要做到牛还是要脚踏实地一步一步学习好多东西的.先去继续研究别的吧,而后再决定是不是杀回来.图形学方向还真多,先把数学这块学好吧,之后就简单多了.是吧,不然看别的,是干眼馋原创 2012-12-25 21:48:39 · 1125 阅读 · 0 评论 -
Camera.cpp
#include "Camera.h"#include // 初始情况下将摄像机放置在同世界坐标轴重合Camera ::Camera(float fov, float viewPortWidth, float viewPortHeight){ position.x = 0 ; position.y = 0 ; position.z = 0 ; direction.x = 0原创 2012-11-19 19:46:55 · 1548 阅读 · 0 评论 -
Camera.h
// Camera.h#ifndef CAMERA_H_#define CAMERA_H_#include "Math.h"class Camera{private: Vector3 direction ; // 朝向 float aspectRatio ; // 宽高比public: Vector3 position ; // 位置 // 根据原创 2012-11-19 19:46:33 · 2539 阅读 · 0 评论 -
Math.cpp
#include "Math.h"#include "Camera.h"Cube ::Cube(float x, float y, float z){ vertexCount = 8 ; polyCount = 12 ; position.x = x ; position.y = y ; position.z = z ; float scaler = 0.2 ; loc原创 2012-11-19 19:45:58 · 1597 阅读 · 0 评论 -
Math.h
#ifndef MATH_H_#define MATH_H_#include #define PI (3.141592654f)#define RADIAN_TO_DEGREE(r) ((r) * 180.0f / PI) // 弧度到角度#define DEGREE_TO_RADIAN(a) ((a) * PI / 180.0f) // 角度到弧度// 4D向量(齐次坐原创 2012-11-19 19:45:25 · 1687 阅读 · 0 评论 -
OPENGL编程宝典-6.9
Test test...简单说两句.刚刚自己写了个ADS光照模型,就是,环境光,漫反射,镜面反射这3个分量共同影响顶点的光照.写的是顶点着色器,简单说两句. 凭借着前一阵对固定流水线的学习,学习这个真心简单,哈哈!只要写好对每个顶点的处理,包括坐标系变换,光照计算,之后就继续交给流水线去完成.思绪清晰了好多,相信随着接下来的继续学习,会游刃有余的吧.咳,也确实,这东西不自己写一遍,光是看,毛原创 2013-01-25 23:26:55 · 2042 阅读 · 2 评论 -
OPENGL超级宝典-6.6
开始学习着色器了,果然跟固定流水线不同.好在前一段数学知识学得好,运用到这里学得不吃力.下面这段代码,我解释不出太多,学到差不多的时候再总结一下吧.渐渐开窍的感觉,先广度优先吧.#include "stdafx.h"#include #include #include #include #include #include #include #ifdef __APPLE__#原创 2013-01-24 21:51:14 · 1888 阅读 · 0 评论 -
EulerAngles-未测试-头文件
未测试,所以,BBBB的话留给以后.未测试的原因,是深度优先我有点受不了了,先把欧拉角,矩阵,四元数都写出来,再整合到我的线框引擎中测试吧. 参考的书籍是>和>,都是外国人写的书. 关于这个EulerAngles啊,看起来没什么,真要研究透彻,真的不是那么容易的...还好我睾明白了,贴出来吧.#ifndef EULAR_H_#define EULAR_H_class Qu原创 2012-12-19 00:15:52 · 878 阅读 · 0 评论 -
EulerAngles-未测试-实现文件
#include "stdafx.h"#include #include #include "Common.h"#include "EularAngles.h"#include "Quaternion.h"#include "Matrix4x4.h"EulerAngles ::EulerAngles(){}EulerAngles ::EulerAngles(float he原创 2012-12-19 00:17:33 · 989 阅读 · 0 评论 -
Vector3类
干了半年,才接触这块,之前都没学过这些,至少没系统地学过.工作上不需要我这些,但是还是想学,最近终于开始接触了,为了牛逼,为了牛逼.#include class Vector3{public: float x ; float y ; float z ; Vector3() { } Vector3(const Vector3 & a): x(a原创 2012-06-24 12:32:39 · 3503 阅读 · 0 评论