博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt3D Shader
阅读量:6762 次
发布时间:2019-06-26

本文共 3575 字,大约阅读时间需要 11 分钟。

---------------------------------------------------Qt3D ShaderProgrameQt3D GLSL 渲染器Shader示例可参考:    http://blog.csdn.net/candycat1992/article/details/44039077    https://www.shadertoy.com/http://blog.csdn.net/candycat1992/article/details/44039077faq: shader的输入参数怎么各家都不一样,到底是如何定义的---------------------------------------------------概念    渲染代码可由ShaderProgram对象封装    参数的传递比ShaderEffect复杂得多,好麻烦    要求输出的参数是一致的(gl_Position, gl_FragColor)    Qt3D默认提供的参数    attribute highp vec4 vertexPosition;   // 顶点位置    attribute highp vec3 vertexNormal;     // 顶点法线    attribute highp vec2 vertexTexCoord;   // 顶点纹理坐标    uniform highp mat4 mvp;                // ?    uniform highp mat4 modelMatrix;        // ?    uniform highp vec3 cameraPosition;     // 相机位置    uniform mat4 modelView;                // ?    uniform mat4 modelNormalMatrix;        // ?常用的方法   normalize   dot   min/mix/max/pow/   textureCube    highp vec4 surface = texture2D(surfaceTexture, texCoord);    highp vec3 reflectedDirection = reflect(viewDirection, normalize(normal));    textureCube(skyboxTexture, reflectedDirection).rgbVertexShader    // Qt 3D默认提供的参数      attribute vec3 vertexPosition;      attribute vec3 vertexNormal;      uniform mat4 modelView;      uniform mat4 modelNormalMatrix;      uniform mat4 mvp;      // 自己提供的参数      uniform vec3 lightPosition;      varying vec3 reflectVec;      varying vec3 viewVec;      varying float NdotL;      void main( void )      {
vec3 ecPos = ( modelView * vec4( vertexPosition, 1.0 ) ).xyz; vec3 normal = normalize( modelNormalMatrix * vec4( vertexNormal, 1.0 ) ).xyz; vec3 lightVec = normalize( lightPosition - ecPos ); reflectVec = normalize( reflect( -lightVec, normal ) ); viewVec = normalize( -ecPos ); NdotL = ( dot( lightVec, normal ) + 1.0 ) * 0.5; gl_Position = mvp * vec4( vertexPosition, 1.0 ); } FragmentShader // 自己提供的参数 uniform vec3 surfaceColor; uniform vec3 warmColor; uniform vec3 coolColor; uniform float diffuseWarm; uniform float diffuseCool; varying vec3 reflectVec; varying vec3 viewVec; varying float NdotL; void main( void ) {
vec3 kcool = min( coolColor + diffuseCool * surfaceColor, 1.0 ); vec3 kwarm = min( warmColor + diffuseWarm * surfaceColor, 1.0 ); vec3 kfinal = mix( kcool, kwarm, NdotL ); float spec = max( dot( reflectVec, viewVec ), 0.0 ); spec = pow( spec, 32.0 ); gl_FragColor = vec4( min( kfinal + spec, 1.0 ), 1.0 ); } cinematic3d/BackgroundCubeMap.qml ShaderProgram {
id: gles2SkyboxShader vertexShaderCode: " attribute vec3 vertexPosition; varying vec3 texCoord0; uniform mat4 mvp; void main() { texCoord0 = vertexPosition.xyz; gl_Position = vec4(mvp * vec4(vertexPosition, 1.0)).xyww; // Fail depth test always against any rendered pixel } " fragmentShaderCode: " varying highp vec3 texCoord0; uniform samplerCube skyboxTexture; void main() {
gl_FragColor = textureCube(skyboxTexture, texCoord0); } " } // 二维贴图材质Texture2D {
property alias source: image.source minificationFilter: Texture.LinearMipMapLinear magnificationFilter: Texture.Linear generateMipMaps: true wrapMode { x: WrapMode.ClampToEdge y: WrapMode.ClampToEdge } TextureImage {
id: image}}

 

你可能感兴趣的文章
python18-day5
查看>>
企业称重防作弊概述 称重软件
查看>>
ASP.NET 大文件下载的实现思路及代码
查看>>
得到一个范围的随机数函数
查看>>
8148 8168 中移植live55 出现except rtsp 中途莫名的断流
查看>>
Linux——搭建PHP开发环境第三步:mysql
查看>>
Vue.nextTick和Vue.$nextTick
查看>>
经典算法-链表(golang)
查看>>
leetcode — search-a-2d-matrix
查看>>
魔板 bfs() 预处理,记录每种状态。然后状态置换,(重点要用到全排列的hash记录状态)...
查看>>
构建之法课后作业第一次作业(15个题选一个)
查看>>
操作redis方法
查看>>
C语言函数
查看>>
Python3-异常处理
查看>>
Python-简单打印进度条
查看>>
【02】天气查询应用(第二课)
查看>>
监听微信返回按钮
查看>>
第二次实验报告
查看>>
HDU ACM 3790 最短路径问题
查看>>
python生成器
查看>>