主题:版内有对计算机图形学(openGL)比较了解的高手吗? -- 博客南
看了你的问题和一些回复,随便说几句
定点, 就是vertex是个三维笛卡尔坐标系的点,用一个四维坐标来表达,比如(x,y,z,1),最后一个一定是1,这就是所谓的齐次坐标.如果是向量,就是(x,y,z,0),最后一定是个0.说白了,简单的理解,第四个坐标值就是用来区别向量和点的.一个向量空间(三个坐标轴向量)加一个远点就可以定义一个三维空间,所有这个空间中的点和向量都可以定义了.
假设有一个三角形,它的三个定点如果显示在屏幕上,坐标值大概经历的pipeline如下:
object space->world space -> view space->screen space
前三个还是三维坐标,最后一个是屏幕的二维坐标,只有xy.
最后一个转换会经历perspective 变换,那是个难点,要好好研究.
你说的那个旋转问题,设计一个二维旋转矩阵,2X2的就好了,因为已经到了screen space,齐次坐标没啥用了,可以直接二维旋转就行了.网上搜一下就有现成的.
在GPU里面, 这些坐标转换都是在vertex shader里实现的.对每个三角形的三个定点分别完成转换, 面片上的点根据其 barycentric 坐标值做interpolation,就得到了具体的值.
这样之后,得到的是一个fragment,跟具体一个pixel可能不是一一对应的,一般叫做aliasing , 你玩游戏的时候看到什么防锯齿化就是为了消除这个问题.
pixelshader就是针对上面生成的pixel/fragment来操作,主要是完成光照和texture mapping, 以及所有杂七杂八的后续操作,目的就是增加视觉效果.这个时候,normal vector,就是法向量,会用到来计算光强.texture coordinate用来访问texture image,访问的时候加各种filter或者interpolation的操作来避免aliasing. 这里normal和texture coordinate 也已经根据面片自动做了interpolation,变成了针对每个pixel/fragment了
大概就这些,建议看一本graphics的基础书籍,然后读一些GPU的shader,这东西不下功夫从头看是明白不了的
希望有帮助
- 相关回复 上下关系8
🙂建议随便找本computer graphics的书 kernelh 字38 2009-06-03 03:06:32
🙂呵呵,随便找本书可解决不了我的问题 博客南 字47 2009-06-03 18:47:53
🙂最近在学习android中opengles的实现 1 博客南 字797 2009-06-03 22:54:48
🙂大概说几句
🙂出一道题:几何转换用齐次矩阵描述的原因何在? 肥狐 字0 2009-12-17 17:05:35
🙂是為了矩陣計算方便吧 博客南 字108 2009-12-17 19:10:49
🙂是为了描述硬件实现 肥狐 字722 2009-12-18 06:39:57
🙂用矩阵并不是因为硬件 午茶 字278 2009-12-18 10:43:40