在WebGL reference card中,有关于Vector组件的文档。
虽然在我看来我也可以使用{x,y,z,w},但我无法理解在从纹理中读取时是否必须使用{s,t,p,q}。< / p>
访问表示纹理坐标的矢量时使用
{s,t,p,q}字母的含义是什么?对于可读代码而言,这只是一个惯例问题,还是我还缺少一些东西?
答案 0 :(得分:4)
请参阅WebGL Specification Vesion 1.0:
4.3支持的GLSL构造
WebGL实现必须只接受符合OpenGL ES着色语言版本1.00的着色器......
请参阅OpenGL ES Shading Language 1.00 Specification :
5.5矢量组件
向量或标量的组件名称由单个字母表示。作为符号方便,基于位置,颜色或纹理坐标向量的共同使用,将几个字母与每个组件相关联。可以通过跟随变量来选择各个组件 名称带句点(。),然后是组件名称。
支持的组件名称是:
MVVM Light
在访问代表点或法线的向量时很有用
using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Command; using System; using System.Windows.Input; namespace PathTrimming.ViewModel { public class MainViewModel : ViewModelBase { public string Path1 { get { return _path1; } set { _path1 = value; RaisePropertyChanged(); } } public string Path2 { get { return _path2; } set { _path2 = value; RaisePropertyChanged(); } } private string _path1; private string _path2; public MainViewModel() { UpdatePathes(); } //The command that will update Path1 and Path2 with some random path values public ICommand UpdatePathesCmd { get { return new RelayCommand(UpdatePathes); } } private void UpdatePathes() { Path1 = PathProvider.GetPath(); Path2 = PathProvider.GetPath(); } } //A simple static class to provide a pool of different pathes public static class PathProvider { private static Random randIndexGenerator = new Random(); private static readonly string[] pathes = { "D:\\Directory1\\Directory2\\Directory3", "D:\\Directory1\\Directory2", "Directory1\\Directory2\\Directory3", "D:\\Directory1\\Directory12345678901234567890", "Directory1234567890123456789012345678901234567890", "D:\\Directory1" }; public static string GetPath() { var randIndex = randIndexGenerator.Next(pathes.Length); return pathes[randIndex]; } } }
在访问代表颜色的矢量时很有用- 时非常有用
{x, y, z, w}
访问表示纹理坐标的矢量组件名称
{r, g, b, a}
,{s, t, p, q}
和x
例如是向量中相同(第一个)组件的同义词。 请注意,OpenGL ES中纹理坐标集r
的第三个组件已重命名为s
,以避免与颜色中的r
(红色)混淆。
这意味着对于p
,r
与vec4 v;
或v.stpq
完全相同。
s,t命名来自Plane (geometry),其中计划可以参数化地描述为R = R0 + s V + t W形式的所有点的集合。 (R和R0是点,V和W是矢量,s和t是实数。