混合可以实现很多效果,笔记单纯的记录混合的原理,和混合公式,混合函数的使用。最后分析书中的两个混合代码例子,两个例子结合起来说明了绘图顺序对混合最终效果的影响,及如何去规避这样的问题。在颜色中之前一直忽略的第四个分量alpha终于派上用场。在启用混合情况下,alpha常常用于把被处理片断的颜色值与已经存在帧缓冲区的像素颜色值进行组合。混合操作是在场景进行了光栅化并转换为像素之后,但是在最终的像素绘...
分类:
其他好文 时间:
2015-02-13 06:59:01
阅读次数:
199
计算机图形学之数字微分分析画线算法 现代计算机绘制,我们程序员经常会碰到画图的编程问题,并且现在的画图的API很多,换句话说,图形API非常丰富,从TC的graphic到Windows的GDI/GDI+,以及跨平台的开放标准OpenGL。这些API都提供了基本的绘图函数,如绘制直线,圆以及椭圆之类的。 画直线的算法也叫做直线的光栅化,我们知道,我们的计算机显示的屏幕实际上是一个个的像素组成的,绘图...
分类:
编程语言 时间:
2015-01-17 20:55:23
阅读次数:
247
现在的计算机的图像的都是用像素表示的,无论是点、直线、圆或其他图形最终都会以点的形式显示。人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已。那么计算机是如何画直线的呢,其实有比较多的算法,这里讲的是Bresenham的算法,是光栅化的画直线算法。直线光栅化是指用像素点来模拟直线,比如下图....
分类:
编程语言 时间:
2015-01-02 21:07:09
阅读次数:
493
阶段1.顶点->图元几何顶点被组合为图元(点,线段或多边形),然后图元被合成片元,最后片元被转换为帧缓存中的象素数据。阶段2.图元->片元图元被分几步转换为片元:图元被适当的裁剪,颜色和纹理数据也相应作出必要的调整,相关的坐标被转换为窗口坐标。最后,光栅化将裁剪好的图元转换为片元。1)裁剪在裁剪时点...
分类:
其他好文 时间:
2014-12-18 18:11:07
阅读次数:
182
基本概念透视(Perspective)变换(Transformation)投影矩阵(Projection Matrix):用于将3D坐标转换为2D屏幕坐标光栅化(Rasterization): 实际绘制或填充每个顶点之间的像素形成线段着色器(Shader)是在图形硬件上执行的单独程序,用来处理顶点和...
分类:
其他好文 时间:
2014-11-28 14:11:07
阅读次数:
256
摘要:Chromium图形栈在2014年有多项改进,在图形性能和资源消耗方面做了进一步提升,例如ubercompositor的使用,GPU加速的光栅化,零拷贝(zero-copy)的支持,Android WebView的渲染模型改进等。这个幻灯片尝试列举Chromium在图形栈方面一些变化,以及Chromium渲染流水线的总体框架,并对WebGL性能慢于OpenGL原生应用的原因做了一定的推测。...
分类:
其他好文 时间:
2014-11-07 20:56:16
阅读次数:
363
code source:salvia
代码展示
template void CRasterizer::rastTri_constColTex(int iy0,int iy1,sfByte8* buf,ZBUF_TYPE* zbuf,
t_rasterizier_point attribute,T col,t_material* material)
{
int a...
分类:
编程语言 时间:
2014-11-06 22:00:09
阅读次数:
284
坐标系
左图是左手坐标系 右图是右手坐标系
Direct3d用的是左手坐标系
顶点和法向
光栅化
变换
1世界变换
2观察变换
D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixL...
分类:
其他好文 时间:
2014-09-29 14:27:50
阅读次数:
150
void Bresenham_Ellipse(CDC *pDC, int ox, int oy, int a, int b)//圆心x,圆心y,横长,纵长
{
float d = b*b + a*a*(-b + 0.25);
int x = 0, y = b, fx = a*a / sqrt((float)a*a + b*b);
while (x != fx)
{
if (d < 0)...
分类:
其他好文 时间:
2014-09-02 22:58:05
阅读次数:
1232
代码如下,原理对比上篇画圆方法
void Bresenham_Circle(CDC *pDC, int ox, int oy, int r)
{
float d = 1.25 - r;
int x = 0, y = r, fx = r/1.4;
while (x != fx)
{
if (d < 0)
d += 2 * x + 3;
else
{
d += 2 *...
分类:
其他好文 时间:
2014-09-02 21:25:31
阅读次数:
454