1.unity shader 好å¦ä¹
2.2 Qt+OpenGL环境搭建与基本理解
unity shader 好å¦ä¹
å¦ä½ç³»ç»çå¦ä¹ Unity3Dä¸çshaderç¼ånvidiacgç¼ç¨--UnityShaderï¼ï¼ç¸ä¿¡ä¸å®ä¹æå¾å¤åunity3då¼åçæå对shaderè¿ä¸åæçé®ãunity3dç®æ¯æ¯è¾æ°çå¼æï¼æè¿æ游åæ¯è¾ç«ï¼å¾å¤unity3dç¨åºç¿åºè¯¥æ¯ä»å ¶ä»ä¸ä¸è½¬è¿æ¥çï¼æ¯å¦æ¬äººä»¥åå°±æ¯æjavawebå¼åçï¼æ以对è¿ä¸åçç¥è¯ä½ç³»ä¸å¤ªäºè§£ãæçäºnvidiaå®ç½ä¸çThe源码CgTutorial:Chapter1.Introductionï¼ç®æ¯ç¨å¾®å ¥äºç¹é¨ï¼ç¶åçäºCgProgramming/Unityä¸çä¸äºä¾åï¼æå¾å¤çä¸æçï¼ï¼ç»åunity3då®æ¹ææ¡£ï¼è½åä¸äºç®åçshaderï¼ä½å¤æçä¸è¥¿å°±ä¸å¤ªæäºï¼æ¯å¦ä¸æ¬¡çå°ä¸ä¸ªéé¢åå°çä¾åï¼éé¢æäºç©éµè¿ç®ï¼ä¸å¤ªæç½é£ç®æ³æä¹æ¥çï¼å½ç¶èªå·±çº¿æ§ä»£æ°ä¸å¥½ä¹æ¯ç¡¬ä¼¤ï¼ãæè§cgç¼ç¨æ¶åçä¸è¥¿å¾å¤ï¼æ°å¦ãç©çãç¼ç¨ã3D模åä»ä¹çé½è¦æä¸äºï¼è¦å¦çä¸è¥¿å¾å¤å¾æï¼æäºè¿·è«ãä¸æ³åä¸æ¼è¥¿åæ¾ä¾åï¼è¿éæ·ä¸æ®µé£éæ·ä¸æ®µçåshaderï¼èæ¯æç §èªå·±çæ³æ³åã请é®æä»ä¹å¥½ä¹¦ç±å¯ä»¥å¸®å©æç³»ç»å°å¦ä¹ è¿ä¸åçç¥è¯ï¼å æ¬è®¡ç®æºå¾å½¢å¦ãæ°å¦çå个æ¹é¢ç书ç±ï¼ï¼ï¼è¿ä¼æ¯ä¸ªæ¯è¾æ¼«é¿çå¦ä¹ è¿ç¨ï¼ä¸ï¼å½å å¼è¿åºçç书ç±å½å å¼è¿æåºççå¾å½¢å¦ä¹¦ç±å¾å¤ï¼ä½æ¯å¤§é¨åæ¯ç³ç²ï¼çå®ä»¬æ¯æµªè´¹æ¶é´3Dæ°å¦åºç¡:å¾å½¢ä¸æ¸¸æå¼åè¿æ¬å¯ä»¥è¡¥æ°å¦åºç¡ï¼ç©éµåæ¢ï¼çº¿æ§ä»£æ°å¥çå¾å½¢çè²å¨:ç论ä¸å®è·µ(第2ç)è¿æ¬æ¯æ¯è¾æ°ç讲openglshaderçDirectX9.D游æå¼åç¼ç¨åºç¡è¿æ¬æ¯å½å åºçæå¼è¿çd3d书ç±ä¸å¯ä¸è½ççï¼äºï¼å½å 没æå¼è¿ç书ç±ï¼å¯ä»¥ä¸è½½çµåçæä¸æ·å®ä¹°æå°çOpenGLShadingLanguageå¯ä»¥è®¤ä¸ºæ¯glslçå£ç»Introductionto3DGameProgramming:WithDirectxå¯ä»¥è®¤ä¸ºæ¯d3dçå£ç»ï¼è¿æ¬æ¯DirectX9.D游æå¼åç¼ç¨åºç¡çå级çï¼ä¸ï¼ä¸ªäººæ¨è3Dæ°å¦åºç¡:å¾å½¢ä¸æ¸¸æå¼åDirectX9.D游æå¼åç¼ç¨åºç¡Introductionto3DGameProgramming:WithDirectxVinjnå¼ é--è¿å¾çNVidiaè¯å¿å 费彩è²pdfãGPUGEMSIIIIIIããè¿ä¸æ¬ä¹¦åå精彩ï¼æå¨å½åè¿æ²¡å è´¹çæ¶å就买è¿äºï¼ä¸æ¬ä¸ç¾å¤ãvczh--èªå·±åçä¸ä¸ï¼åè¡¥å 两æ¬ä¹¦ï¼1.ãUnityShadersandEffectsCookbookã主è¦è®²UnityçSurfaceShaderç¼ç¨æå·§ï¼é常å®ç¨ãé¤äºå ç §ä»¥å¤è¿æImageeffectså¨Unityä¸çå®ç°ã强åæ¨èã2.ãReal-TimeRenderingãæ¯è¾åºå±çå 容ï¼å¤¯å®åºç¡ï¼èªå·±è¿æ²¡çå®ï¼åç°äºæ°ç好书å继ç»æ´æ°ï¼kUANGtOBY--æè¿ä¹å¨å¦ä¹ shaderï¼æ¨èå ç¯å客ä¾é¢ä¸»å ¥é¨ã1ãé¦å æ¥ä¸¤ç¯ææåºç¡æç« å¯¹shaderæ大ä½ç认è¯ãè¿ä¸¤ç¯æç« ä¼åæshaderä¸çä¸è¡è¡ä»£ç ï¼è®²è§£è¯æ³åä½ç¨å¹¶å 以æ©å±ã读å®åå°±åºæ¬äºè§£äºshaderä¸çå±æ§ãTagsãLODãå ç §æ¨¡åçæ¯æä¹åäºãç«é½è½å¦ä¼çUnity3DShaderå ¥é¨æåï¼ä¸ï¼ç«é½è½å¦ä¼çUnity3DShaderå ¥é¨æåï¼äºï¼2ãç¶åå¯ä»¥çãUnityShaderandEffectCookbookãï¼æè å®çä¸æçãUnityçè²å¨åå±å¹ç¹æå¼åç§ç¬ããè¿æ¬ä¹¦ä¼å±ç¤ºshaderä¸çå个æ¹é¢ï¼å¦æ¼«åå°çè²ã纹çè´´å¾ãéé¢åå°ççãå¯è½ç±äºè¿æ¬ä¹¦æ¹æ¹é¢é¢é½ææ¶åï¼ææ¶ä¼å¿½ç¥ä¸äºæ¯è¾å ³é®çç»èï¼èè¿æ°æ°ä½¿åå¦è å°æãæä¸ä½å主记å½ä¸äºæ ¹æ®è¿æ¬ä¹¦å¦ä¹ çç¬è®°ï¼é¢ä¸»å¯ä»¥ç´æ¥çå客æ¥å¦ä¹ ï¼ãUnityShadersãæ¦è¿°åDiffuseShadingä»ç»3ãå¨ç¬¬2æ¥çè¿ç¨ä¸ï¼ä½ å¯è½éè¦æ¥é shaderä¸å个æ¦å¿µå½æ°çæ´è¯¦ç»çæ åµï¼è¿æ¶ä½ ä¼éè¦Unityå®æ¹æå以åCgæç¨ï¼Unity-Manual:ShadersUnity-Manual:ShaderReferenceTheCgTutorial4ãå¦ä¹ shaderçæ¶åï¼ä½ ä¸ä» æ³ç¥éæä¹ç¨ï¼å¯è½è¿æ³äºè§£å®èåçæºå¶ï¼é£è¿ç¯æç« ä½ è¯å®ä¸è½éè¿ï¼ãUnityShadersãåæ¢SurfaceShaderèåçæºå¶5ãè¿äºé½çç»äºï¼å¯¹shaderä¹é½æ¯è¾çæäºãä½ å¯ä»¥å°è¯å»åé å±äºèªå·±çshaderï¼ä¹å¯ä»¥å»ShadertoyBETA寻æ±çµæï¼æåshaderç鬼æ§ç¥å·¥ãå¿å--æ¨èä¸æ¬ä¹¦ï¼UnityShaderandEffectCookbookï¼ä½ä¸è¬çShaderé½å¯ä»¥ç¨ShaderForgeæå®ãShaderForgeæ¯ä¸ä¸ªå¯è§åçï¼nose-basedçshaderç¼è¾å¨ãç®åæ¥è¯´ï¼å°±æ¯ä½ å¨å¾å½¢åçé¢æåç§effectæä¸å®é»è¾è¿æ¥å¥½ï¼å®å¯ä»¥èªå¨çæshaderç代ç ãJingwenZhao--ä» éå¯¹ä½ åªæ³å¦äºshaderç¼ç¨æ¥è®²ï¼1ãå è¦æç½shaderå¨æ´ä¸ª3Dæµæ°´çº¿ä¸çå°ä½æè æ¯ä½ç¨ï¼å»ºç«æµæ°´çº¿æ¦å¿µçè¿ç¨ï¼æ¯ç解æ´ä¸ªå½ä»£3Dçåºç¡ã2ãæUnityå½åshaderç¼è¾å¨ï¼è¿ä¸æ¹é¢è®²ï¼unityçç¡®ä¹æ¯ä¸éçï¼:)ãç±ç®å°é¾çåæåå®éªå个shaderï¼è°è¯åç§åæ°ï¼ç¨unityçæè§å³æå¾çé¢ï¼äºè§£shaderå é¨ä»£ç çæä¹ã3ãå°±æ¯ä¸ªéå°çé®é¢ï¼å¨äºèç½ä¸æ¥æ¾è¯¥é®é¢çå¯è½ççæ¡ãå¦Diffuselightçç®æ³å ¬å¼ç©¶ç«æ¯ä»ä¹ï¼shadowmapçç©éµå¹²åç¨çãå¨è¿åä¸ï¼è¯·å°½éæ¥æ¾è±æèµæï¼ä¼çå¿«äºãå°±è¿ä¹ä¸ç¹ï¼ç¬¬ä¸ç¹æ¯é¢ï¼è½å¸®å©èªå·±ç¡®å®æ¹åã第ä¸ç¹æ¯ç¹ï¼ç¥éèªå·±çç线ä½ç½®å¨åªéã书ç±ä¸ä¸¾ä¾ï¼åªç¥éæ第ä¸æ¬çç书æ¯ã3D游æç¼ç¨å¤§å¸æå·§ããåæ¥å¨åç§æ¥æ¾è¿ç¨ä¸ï¼åç§ä¸åç书ç±èªç¶ä¼è¿å ¥èªå·±çè °å ï¼æ²¡æä¸æ¬æ¯éè¦å ¨é¨è¯»å®çãä½æ¯è¯»å®ææçæ¯æ¬çæä¸ä¸ªé¨åï¼åºè¯¥æ¯æ¬ä¹¦é½ç®æ¯è¯»å®äºï¼ä½ æç½çãå¿å--unityçshaderæµ æµ çå è£ äºä¸ä¸cgã类似fxãæ»ä¹å°±æ¯ä¸ä¸ªDSLï¼å¯¹cgå渲ææµç¨åäºä¸äºæè¿°ãæ以åºæ¬ä¸ï¼ä½ è¿æ¯éè¦äºè§£shaderè¯è¨ååºæ¬ç渲ææµç¨ã@å¼ évinjnå@kUANGtOBYæå°ç书对头ãéå¦çè¯ï¼æè¡¥å ä¸æ¬ï¼ãGPUProgrammingAndCgLanguagePrimer1rdEditionããå½å ç人åçå°ååï¼å¾ä¸éãç¥é--è¿ä¸ªç½ç«å¯ä»¥åèShadertoyBETAä¸è¿æ¯åæ ·çé®é¢ï¼å 为å¾å¤ä»£ç é½æ¯å¼åï¼æ¯ç»è¿è®¡ç®ä¹åå¾åºçï¼è®¡ç®è¿ç¨å¨ä»£ç é没æä½ç°ï¼æä»¥æ ¹æ¬ä¸ç¥éé£äºå¥æªçæ°ååç®å¼é½æ¯æä¹æ¥çãæ®·å®--æ°å¦æ¨èè¿é¨ââãMathematicsfor3DGameProgrammingandComputerGraphics3rdãå¦å¤å°±æ¯ççè¿ä¸ªæ¨è游æç¨åºåå »æ计å(æ´æ°.3.)èéå¤--ææ¯è¾æ¨èã交äºå¼è®¡ç®æºå¾å½¢å¦:åºäºOpenGLçèªé¡¶åä¸æ¹æ³(第6ç)ãé åã计ç®æºå¾å½¢å¦/åºäº3Då¾å½¢å¼åææ¯ãé£ç¨é£å³æ´ä½³ãå¦ä¹ shaderä¼éå°ä¸äºæ¯è¾åºç¡çæ°å¦é®é¢ï¼googleãwikiå度å¨åºæ¬è½å¤è§£å³ãå¿å--ãUnityShadersandEffectsCookbookãå ¶å®è¿æ¬ä¹¦æ¯surfaceshaderçå ¥é¨ï¼æç¡®å®æ¯å çäºè¿æ¬ä¹¦ï¼è¿ä¸æ¯ç¹å«å®ç¨ï¼ä½ä¹å¿ é¡»è¦çï¼å®æ解éä¸äºå ¥é¨çç¥è¯æ¯å¦pipelineï¼å¸¸è§è¯æ³ããé£æ¬ä¹¦å®å ¨æ²¡ææ¶åcgè¯è¨ï¼vertexåfragshaderï¼ä¸ªäººè§å¾æä¸æ¬ä¸éï¼æ¯è¾ç³»ç»ï¼å°±æ¯ãCgProgramminginunityããç¶åâé¾ä¹¦âå¤å°ä¹ççï¼è¿æåç§é«æ°çº¿æ§ä»£æ°ä¹¦ç±è·çç 究ï¼æ空å¤æ¿å ¶ä»äººçshaderæå¼æ¥çï¼å¹¶ä¸å¨ç¸å ³ææ¯qq群贴å§çå¹³å°ï¼å©ç¨å¥½è¿äºå¹³å°èµæºè·å大ç¥ç解çããè¿æ¯æçè·¯ï¼ä¹æ¯æ°æç¬åä¸ï¼ä»¥ä¾åèããäºåï¼å¨è½¦--
2 Qt+OpenGL环境搭建与基本理解
前往Qt官网下载并安装Qt,选择包含Source选项以备查阅Qt源码。源码开始编写第一个Qt OpenGL程序,源码参考QOpenGL入门教程和Italink/QtOpenGL-Essential-Training中的源码网站页面制作源码经验总结。前置学习推荐LearnOpenGL CN。源码制作Hello World效果的源码zimbra源码OpenGL程序。若遇到找不到OpenGL相关头文件的源码问题,更新Qt版本至6,源码调整路径。源码使用CMake工程时,源码确保链接OpenGL包。源码顶点着色器找不到gl_Position变量的源码难题,通过在qmake工程中设置解决。源码ebdic源码对比glfw3.h提供的源码OpenGL接口与Qt自定义类继承QOpenGLFunctions或其子类QOpenGLExtraFunctions的封装,Qt的源码接口作为成员函数使用。Qt源码查看方法,dlerror 源码首先在安装时选择Source选项或安装后使用Qt Maintenance Tool添加,配置定位器搜索到Qt源码路径并直接在主界面左下角搜索需要查看的源码文件。获取Qt中的servicemanager 源码OpenGL版本,通过C++方式实现。Qt对Shader的封装QOpenGLShaderProgram与OpenGL接口存在一定距离,推荐直接使用QOpenGLFunctions、QOpenGLExtraFunctions提供的接口进行Shader编程。下一节将移植LearnOpenGL中的Shader至Qt环境中。