当前位置: 首页 > article >正文

glsl着色器学习(四)

前面讲到已经创建了程序对象,链接到顶点着色器和片段着色器,接着继续。


const positionLoc = gl.getAttribLocation(prg, 'position');
const normalLoc = gl.getAttribLocation(prg, 'normal');
const texcoordLoc = gl.getAttribLocation(prg, 'texcoord');

const projectionLoc = gl.getUniformLocation(prg, 'projection');
const modelViewLoc = gl.getUniformLocation(prg, 'modelView');
const diffuseLoc = gl.getUniformLocation(prg, 'diffuse');
const decalLoc = gl.getUniformLocation(prg, 'decal');
const diffuseMultLoc = gl.getUniformLocation(prg, 'diffuseMult');
const lightDirLoc = gl.getUniformLocation(prg, 'lightDir');
获取属性变量位置
  1. const positionLoc = gl.getAttribLocation(prg,'position');
    1. 使用gl.getAttribLocation方法从程序对象(上篇文章中的prg)中获取名为'position'的属性变量的位置。这个属性变量在顶点着色器中用于存储顶点的位置信息。在后续渲染过程中,可以通过这个位置来设置顶点的位置数据。
  2. const normalLoc = gl.getAttribLocation(prg,'normal');
    1. 获取名为'normal'的属性变量的位置,该变量存储顶点的法线信息,用于光照计算等。
  3. const texcoordLoc = gl.getAttribLocation(prg,'texcoord');
    1. 获取名为"texcoord"的属性变量的位置,存储顶点的纹理坐标信息,用于确定如何从纹理图像中采样颜色值。
获取统一变量位置
  1. const projectionLoc = gl.getUniformLocation(prg,'projection');
    1. 使用gl.getUniformLocation方法从程序对象中获取为名'projection'的统一变量的位置。这个统一变量在顶点着色器和片段着色器中用于存储投影矩阵,它定义了将3D场景投影到2D屏幕上的方式。
  2. const modelViewLoc = gl.getUniformLocation(prg,'modelView');
    1. 获取名为“modelView”的统一变量位置,存储模型视图矩阵,用于将顶点从模型空间转换到视图空间。
  3. const diffuseLoc = gl.getUniformLocation(prg,'diffuse');
    1. 获取名为'diffuse'的统一变量位置,对应一个二维纹理采样器,用于从基本颜色中采样颜色值。
  4. const decalLoc = gl.getUniformLocation(prg,'decal');
    1. 获取名为'decal'的统一变量位置,对应一个二维纹理采样器,用于从贴花纹理中采样颜色值。
  5. const diffuseMultLoc = gl.getUniformLocation(prg,'diffuseMult');
    1. 获取名为'diffuseMult'的统一变量的位置,存储一个四维向量,用于对基本颜色纹理进行缩放。
  6. const lightDirLoc = gl.getUniformLocation(prg,'lightDir');
    1. 获取名为'lightDir'的统一变量的位置,存储光照方向向量,用于光照计算。

http://www.kler.cn/news/289811.html

相关文章:

  • 日常避坑指南:如何合理利用Swap优化MongoDB内存管理
  • Linux驱动开发基础(IRDA 红外遥控模块)
  • E6000物联网主机:打造智慧楼宇的未来
  • Linux:vim编辑器的基本使用
  • 不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信
  • 6 自研rgbd相机基于rk3566之深度计算库移植及测试
  • Spring Boot集成Spring Cloud Scheduler进行任务调度
  • 如何使用Spoon连接data-integration-server并在服务器上执行转换
  • nginx配置白名单服务
  • Gnu: binutils: ld: .gnu.warning.链接时的主动警告 glibc
  • IP地址与物理地址:‌区别解析及在网络通信中的作用
  • 开始使用 ROS 工具箱
  • 3144. 分割字符频率相等的最少子字符串
  • C#Is和As的区别:
  • 工业图像输出卡设计原理图:FMC214-基于FMC兼容1.8V IO的Full Camera Link 输出子卡
  • 排查 Kafka 生产者服务问题的实战经验总结(dubbo的Serializable 问题)
  • ISO 26262中的失效率计算:SN 29500-11 Expected values for contactors
  • Spark MLlib模型训练—回归算法 Isotonic Regression
  • 浅谈常见的分布式ID生成方案
  • python图像灰度直方图对比分析
  • ECMAScript 与 JavaScript:主要区别与实例说明
  • Flutter 小技巧之 Row/Column 即将支持 Flex.spacing
  • Tiktok测评防关联秘籍:矩阵自养号策略全面解析
  • R语言 | 文件读取
  • 如何构建Java SpringBoot在线培训平台?集成Vue,实现课程管理,打造互动学习环境
  • 【nnUNet】环境安装
  • Ubuntu22.04服务器重启后没网络IP丢失
  • 24最新『ComfyUI』入门到入坟全套教程!!看到就是赚到!赶紧收藏!
  • 基于树莓派的儿童音频播发器—Yoto
  • [嵌入式] 设备没有联网的情况下如何安装库