GLSL/HLSL易犯错误和注意点

Unity3d中Shader的一些关于矩阵变换的基本信息 基本信息mul函数mul函数,是表示矩阵M和向量V进行点乘,得到一个向量Z,这个向量Z就是对向量V进行矩阵变换后得到的值。 HLSL的mul函数接受mul(V, M)或mul(M, V),要注意通常HLSL要依DirectX计算(V * M)使用mul(V, M)的形式. 特别需要小心的是,V如果是float3,前后行列不等,违反HLSL规范,但shader编译也不报错,直接当成float4(V 阅读详情
渲染API容易出错,根源于其本质是个状态机,作一个渲染时,几十上百个状态都必须设置正确,才能得到正确的图像,这就很容易出点小差错.
1.GLSL的vec4有3种分量形式xyzw/rgba/stpq, 注意到的r分量是指颜色r分量, 习惯上的纹理坐标分量strq的r由于和颜色r冲突,改作p.

2.Global Amibient也要乘以材质Material.

3.HLSL 没有shadow2DProj函数, GLSL的shadow2DProj返回的是深度比较的结果1.0或0.0的4元组,不是深度值!且要记住,shadow2DProj受到固定流水中纹理 GL_TEXTURE_COMPARE_MODE/GL_TEXTURE_COMPARE_FUNC的影响,要使用shadow2DProj必须打开深度纹理比较模式.

4.HLSL允许如vec4向下强转为vec3这种隐式转换. GLSL语法上不允许,但实践上N卡出warning仍可以编译运行,A卡直接报错无法运行.

5.DirectX的shader调试状态和硬件实际运行状态的结果有很大区别,不能全信.

6.设置   glEnable(GL_COLOR_MATERIAL);
              glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
在shader中, A卡的glFrontMaterial.diffuse不会跟踪设置为当前顶点色,而N卡正确.

7.GLSL: N卡可以使用vec3 temp = { 1.0, 0.0, 1.0}; 这种形式的构造, A卡报错. 
   HLSL: 都可以使用float3 temp = { 1.0, 0.0, 1.0};形式.

8.HLSL的mul接受mul(vec, matrix)或mul(matrix, vec),要注意通常HLSL要依DirectX计算(V * M)使用mul(vec, matrix)的形式.
特别需要小心的是,vec如果是float3,前后行列不等,违反HLSL规范,但shader编译也不报错,直接当成float4(vec, 0)处理,而不是当成float4(vec, 1).即mul(float3, matrix)中的float3被当成向量,而不是顶点.

9.不要在一行中写过于复杂的表达式, N卡没问题, A卡很烂,通常都编译不过.例如:
http://www.ozone3d.net/blogs/lab/?p=38

10.GLSL可以只有PixelShader, 没有Vertex Shader, HLSL不支持.
vs_3_0 shader executed in hardware vertex processing mode can only be paired with at least a ps_3_0 shader.

11.GLSL的1.2版本开始支持mat4x3这种non-square矩阵,要注意4x3是4列3行,而不是4行3列.



References:
http://jegx.ozone3d.net/index.php?entry=entry070529-094845
opengl--光照 使能光 glEnable(GL_LIGHTING); 材料设置 方法一 // Enable color tracking glEnable(GL_COLOR_MATERIAL); // Set Material properties to follow glColor values glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); ... 阅读详情

相关推荐

【技术美术图形部分】2.3 HLSL常用函数

对HLSL中常用的几大类函数进行了总结。

qq_41835314的博客 4996

CG标准函数库

整理记录标准函数库0x01 数学函数 函数 功能描述 abs(x) 返回输入参数的绝对值 acos(x) 反余切函数,输入参数范围为[-1,1], 返回[0,π]区间的角度值 all(x) 如果输入参数均不为0,则返回ture; 否则返回flase。&&运算 any(x) 输入参数只要有其中一个不为0,则返回true。 asin(x) 反正弦函数,输入参

叫我上上的博客 664

DirectX 3D_基础之HLSL(高级着色语言) HLSL着色器程序的编制 HSLS变量 HLSL入口函数 HLSL程序编译 变量常量类型 设置方法 前缀 关键字 类型 语句 类型转换

每日一语:                 呆在这样的公司,的确没有什么积累,但我却应该庆幸这一段经历,不管什么东西都是有其两面性的,有得就有失,有成就有败。如果,之前没有进入这样的公司,没有这段经历,我就不会接触到手机,而且对Windows驱动有了更加深刻的认识,提高了动手实践能力。对Windows底层有了更深层次的认识。给自己的产品以及行业经验增加很重的砝码。

Z18_28_19的专栏 4146

【填坑】OpengGL GLSL开发常见开发问题排除

一、GLSL 程序相关错误 1)Shader脚本编译错误:排查作用域名、数据类型名是否正确,排查变量名是否一致。 2)Shader程序连接错误:检查varying作用域的变量在定点着色器脚本和片源着色器脚本中变量名是否一致。 二、纹理相关错误 1)程序执行正常执行无报错但是黑屏: 1、检查:顶点着色器代码中的 attribute作用域 变量名是否与C语言代码中glGetAttribLocation中的变量名是否一致。 2、检查:片源着...

qq_34950682的博客 1074

hlsl2glsl hlsl转换为glsl图形化工具

hlsl2glsl hlsl转换为glsl图形化工具hlsl2glsl hlsl转换为glsl图形化工具

国央企创新负责人如何快速识别关键技术成果并推动落地?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

多模态情感分析的隐私保护与可验证删除技术

多模态情感分析通过整合文本、语音和视觉等数据提升情感识别准确性,广泛应用于客户服务和心理健康监测。随着GDPR等隐私法规实施,用户数据删除权成为技术挑战。传统方法需完全重新训练模型,计算成本高且难以验证。Missing-by-Design框架将可验证删除作为设计原则,通过结构化表示学习解耦模态信息,实现精确参数删除。该技术显著降低计算成本,适用于实时合规需求,并在医疗诊断和智能驾驶等领域具有扩展潜力。

476

VMware桥接模式实战:用手机热点给Linux虚拟机共享网络(附WiFi适配技巧)

本文详细介绍了在移动办公场景下,如何为VMware中的Linux虚拟机配置桥接模式,以通过手机热点共享网络。文章深入解析了桥接模式在无线环境下的工作原理,提供了从主机端准备、VMware设置到Linux虚拟机内部配置的完整实战步骤,并针对手机热点的特殊性,分享了MTU优化、DNS配置及常见网络问题的诊断与解决方案,帮助用户实现稳定高效的移动虚拟化办公。

2y3u4i5o6p的博客 1196

[ZT]GLSL/HLSL易犯错误和注意点

GLSL/HLSL易犯错误和注意点 我的blog里有许多此类笔记,主要是记录写程序时犯下的错误.有相当多的错误,我都是一犯再犯,而且每次都因这种小错耽误时间而骂自己是猪,所以很有必要记录下来,以备查找.作程序的要懂得积累经验,并书面化,抽象化. 渲染API容易出错,根源于其本质是个状态机,作一个渲染时,几十上百个状态都必须设置正确,才能得到正确的图像,这就很容易出点小差错. 1.G

whbzealot的专栏 1772

ml307 二次开发

中移物联网旗下4g模组官方网站官方教程id=514官方客户不知道啥时候上班 早上10点也说不在服务时间内 找不到官方的sdk下载路径。

myWorld001的博客 2881

CAPL 中的变量类型详解与应用

CAPL 中的变量类型详解与应用

qq_42268594的博客 1448

DX 的 HLSL 和 GL 的 GLSL的 矩阵构建的行列区别

最近在做一些 DXBC to HLSL 的工作,其中遇到一些 DX HLSL 中的 `mul(pos, matrix)` 和 GL GLSL 中的 `mul(matrix, pos)` 的差异 为了更加方便做 shader 逆向,所以多记录一下 DX, GL 中的一些区别

Jave.Lin 的学习笔记 1231

ADS软件操作(10)——DAC控件使用

该控件可以用于为元件定义随频率变换的参数,如放大器的最佳负载阻抗或者源阻抗,需要双频匹配时的优化等,下图是ADS中该控件的模型。

Zhuanzhuyan的博客 4396

glColorMaterial 和 glMaterial 的区别

直接代码说明吧。 1、在使用(固定管线的)光照后,这2个函数才生效 glEnable( GL_LIGHTING ); /// 设置光源属性 ///... 2、使用glMaterial指定3D模型的材质,以环境光颜色为例 glm::vec4 ambientColor(1.0f,0.0f,0.0f,1.0f); glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT, &ambientColor.x ); 3、与2等价的效果:使用glColorMateri.

iMatt的专栏 2085

从特斯拉到蔚来:拆解主流智能汽车的车联网架构,看它们如何实现‘车、路、云’协同

本文深度解析了特斯拉、蔚来等主流智能汽车的车联网架构,详细拆解了其‘车、路、云’协同的技术实现。从车内网络、车际通信到云端协同,分析了通信技术、系统架构等关键技术选择,揭示了不同厂商如何通过差异化布局构建竞争优势。

weixin_42525289的博客 580

Altium Designer(AD24/25)如何在PCB设计阶段做阻抗匹配

目前阻抗匹配多直接有制版厂进行,PCB设计师在设计阶段可不关注阻抗设计,在加工阶段只需标注需要控制的阻抗线,制板厂即可按照要求对阻抗线进行调整和控制。但是对于设计师来讲掌握阻抗线的设计方法也是非常必要的。本文介绍Altium Designer(AD24/25)如何在PCB设计阶段做阻抗匹配。

fydar的博客 893

高级着色语言(HLSL)

HLSL中的函数具有以下性质函数使用与C++类似的语法参数总是按值传递的不支持递归函数总是内联的。

寂蝶难双,窃窃思羽. 2426

PCL 点云加权均值收缩

PCL 点云加权均值收缩

dayuhaitang1的博客 688

OpenGL 光照和材质

OpenGL 光照和材质 前言:很难受呀,一天又过去了,没有达到预期的进度,等下写完这篇博客,抓紧研究鼠标实现轨迹球! 长路漫漫啊…… 注:此篇文章建立在MFC环境搭建完成后 1.渲染处理 在OpenGL中,可以定义顶点的颜色,但如何定义线段的颜色,如何定义平面的颜色,这就需要OpenGL通过各个顶点的颜色采用两种不同的渲染处理方法。 明

MissXy_的博客 2351

深入浅出:使用Python爬取链家二手房数据

在数据驱动的时代,房地产数据作为社会经济的重要指标,一直是数据分析师、投资者和研究人员关注的焦点。链家作为国内领先的房产中介平台,其二手房数据具有较高的真实性和时效性。然而,官方API的访问限制和数据获取的门槛,让很多初学者望而却步。本文将带你从零开始,使用Python编写一个符合robots.txt规范的链家二手房爬虫,获取标题、户型、价格等信息。文章不仅会提供完整代码,还会深入讲解反爬策略、请求头伪装、数据解析、异常处理等实战技术。目录前言:为什么要写这篇博客?一、爬虫前的准备:法律与道德。

2201_76125261的博客 90

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

GLSL的基本语法

数据类型及其使用 基本数据类型 float,bool,int,uint 与C语言类似,定义一个变量的同时可以进行初始化 GLSL是强类型语言:必须进行显式的强势类型转换,不存在隐式的类型转换。 int b=2.0;//错误,无自动类型转换 int b=int(2.0); //正确 向量类型(vec) vec{2,3,4}:a vector of 2,3,or 4floats b...

Estelle 1855

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

图形渲染的那些rgba,xyzw,strq分量的是怎么命名的

一直很好奇这些变量怎么回事,各处google搜集整理了这些GPU里用到的变量的历史和细则: rgba不用多说啊,就是四个颜色分量:red,green,blue,alpha xyzw,三维坐标系的齐次坐标 stpq,重点要说的,是描述纹理坐标用的 从OpenGL说起: 第一版的OpenGL Programming Guide解释:“纹理坐标可以由一维,二维,三维或者思维组成。一般用strq来区别于对...

弗里茨杰拉德 4767

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: Opengl编程低级错误范例手册
下一篇: 关于DrawIndexedPrimitiveUP这个函数
lniwn
博客等级 码龄16年 33粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值