我是3D编程的新手。最近我发现uv映射让我感到困惑。
使用
tex ft0, v1, fs0 <2d,repeat,nomip>
mov oc, ft0
我将v1作为uv坐标,将fs0作为纹理位图,这样就可以了。纹理包裹着3D对象。
但我只用一个坐标v1将ft0复制到oc一次,系统如何知道填充其他区域的内容?
我也没有提供顶点坐标,片段程序是否调用每个像素或每个顶点渲染?
答案 0 :(得分:1)
只是为了澄清 - 你不需要为每个像素调出着色器。如果您为顶点和片段着色器提供了正确的纹理和常量,那么上传program3D就足够了(包含顶点和片段着色器)。当您调用context3D.drawTriangles(...)然后调用context3D.present时,GPU将对渲染进行排序。
答案 1 :(得分:0)
好吧,首先你从顶点着色器得到'v1':(改变寄存器1):通过从你的(顶点属性)'vaX'中设置它,通常是:mov vX, vaX
或其他操作。
变化的寄存器(即'v1')对构成三角形的三个顶点插入uv(即'vaX')的值。
注意 :不同的寄存器是您在顶点和片段着色器之间进行通信的唯一方法。
对于每个像素,'tex'函数将从纹理采样器'fs0'中采样区域'v1'(rasterise) 括号之间的规则(即&lt; 2d,repeat,nomip&gt;)。
将第一行视为ft0 = fs0.getPixel(v1)
,v1从 va1(1)[x,y,z,w] 运行到 va1(2)[ x,y,z,w] (z可用于照明和其他效果),然后将这一个像素/片段输出到'oc'(输出颜色)。 / p>
片段着色器也称为像素着色器 - &gt;为每个像素调用一次。
另一方面,每个顶点都会调用一次像素着色器。
第三种着色器称为几何着色器,但在Stage3D / AGAL中不可用。