导航:首页 > 文件教程 > shader编程系统教程

shader编程系统教程

发布时间:2023-07-31 02:26:19

❶ 如何系统的学习 Unity 3D 中的 shader 编写

这会是个比较漫长的学习过程

(一)国内引进出版的书籍
国内引进或出版的图形学书籍很多回,但是大部分答是糟粕,看它们是浪费时间

3D数学基础:图形与游戏开发
这本可以补数学基础,矩阵变换,线性代数啥的

图形着色器:理论与实践(第2版)
这本是比较新的讲 opengl shader 的

DirectX 9.0 3D游戏开发编程基础
这本是国内出版或引进的 d3d 书籍中唯一能看的

(二)国内没有引进的书籍,可以下载电子版或上淘宝买打印版
OpenGL Shading Language
可以认为是 glsl 的圣经

Introction to 3D Game Programming: With Directx 11
可以认为是 d3d11 的圣经,这本是 DirectX 9.0 3D游戏开发编程基础 的升级

(三)个人推荐
3D数学基础:图形与游戏开发
DirectX 9.0 3D游戏开发编程基础
Introction to 3D Game Programming: With Directx 11

❷ WebGL Shader教程

关于WebGL Shader的视频教程比较少,你开发游戏用的是那种游戏引擎,Layabox,cocos creator,还是白鹭。每种游戏引擎在shader的开发上都有些差别,主要是引擎向GPU提交数据上会有不同的写法,存数据的位置也不太一样。具体到shader内功能的开发,都是差不多的,因为都是用的WebGL那一套。
https://e.csdn.net/course/detail/32454
这个教程主要是用Layabox来开发webGL Shader的教程。讲的很详细,对新手入门很友好,源代码都可以下载,比较方便新手学习。如果你是使用cocos creator 或 白鹭的话,可以参照引擎的官方文档,熟悉引擎怎么提交数据的,shader内部的计算都是一样的,也很有学习的价值。

❸ 怎样学好 GPU 编程目前有哪些流行的 shader 语言

shader语言主要有三种:OpenGL的GLSL,DirectX的HLSL,和Nvidia的CG。

语言本身其实不难,比如HLSL跟C很像,用不了多久就能学会。难的在于如何写出好Shader,这是图形学的功夫。

建议先跟DirectX或OpenGL的Tutorial走一些例子,摸清楚Pipeline和Shader的工作原理。然后读一些图形学的书,推荐Real Time Rendering,记得出到第三版了。

读了这些书以后大概就懂得如何使用着色器语言写出各种效果了,熟练之后就可以尝试接触一些比较高级的材料,比如最新的DirectX示例,CUDA,从头追看一遍GPU Gem, Shader X系列文章。GPU跟一般的计算机编程还不太一样,理论性很强,想要自己发挥,还是需要有一定基础的。

图形学功底扎实的话各种语言都会一通百通,还是多看多写多练。

❹ OpenGL编程指南第八版VS2015怎么配置

一、环境搭建指南

书中的地址

http://www.opengl-redbook.com/

去这里打包下载OpenGL红宝书的示例代码,解压后是这样

虽然没有第一章的代码但第一章的内容好歹算一个完整的例子,网上各种环境搭建教程也都以第一章的代码为例,我们就拿过来直接用一下。

1、打开VS2015创建一个空的控制台项目,然后新建一个cpp文件,粘贴红宝书第一章的示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

///////////////////////////////////////////////////////////////////////
//
// triangles.cpp
//
///////////////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;
#include "vgl.h"
#include "LoadShaders.h"
enum VAO_IDs { Triangles, NumVAOs };
enum Buffer_IDs { ArrayBuffer, NumBuffers };
enum Attrib_IDs { vPosition = 0 };
GLuint VAOs[NumVAOs];
GLuint Buffers[NumBuffers];
const GLuint NumVertices = 6;
//---------------------------------------------------------------------
//
// init
//
void init(void)
{
glGenVertexArrays(NumVAOs, VAOs);
glBindVertexArray(VAOs[Triangles]);
GLfloat vertices[NumVertices][2] = {
{ -0.90, -0.90 }, // Triangle 1
{ 0.85, -0.90 },
{ -0.90, 0.85 },
{ 0.90, -0.85 }, // Triangle 2
{ 0.90, 0.90 },
{ -0.85, 0.90 }
};
glGenBuffers(NumBuffers, Buffers);
glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
vertices, GL_STATIC_DRAW);
ShaderInfo shaders[] = {
{ GL_VERTEX_SHADER, "triangles.vert" },
{ GL_FRAGMENT_SHADER, "triangles.frag" },
{ GL_NONE, NULL }
};
GLuint program = LoadShaders(shaders);
glUseProgram(program);
glVertexAttribPointer(vPosition, 2, GL_FLOAT,
GL_FALSE, 0, BUFFER_OFFSET(0));
glEnableVertexAttribArray(vPosition);
}
//---------------------------------------------------------------------
//
// display
//
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(VAOs[Triangles]);
glDrawArrays(GL_TRIANGLES, 0, NumVertices);
glFlush();
}

//---------------------------------------------------------------------
//
// main
//
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowSize(512, 512);
glutInitContextVersion(4, 3);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutCreateWindow(argv[0]);

glewExperimental = GL_TRUE;
if (glewInit()) {
cerr << "Unable to initialize GLEW ... exiting" << endl;
exit(EXIT_FAILURE);
}
init();
glutDisplayFunc(display);
glutMainLoop();
}

2、打开项目属性,在“VC++ Directories”选项卡中,将前面下载回来的红宝书示例代码中的include目录加入“Include Directories”,将lib目录加入“Library Directories”

3、打开项目属性,在“General”选项卡中,将“Platform Toolset”设置为VS2013

4、在项目管理器中右击Source Files的Filter,添加现有项,然后找到红宝书源码目录中的lib目录,添加LoadShaders.cpp文件

5、打开项目属性,在“Linker/Input”选项卡中,在“Ignore Specific Default Libraries”中添加libcmtd.lib

6、在项目目录中新建两个文本分别命名为triangles.vert和triangles.frag,也就是我们的顶点着色器和片段着色器啦

triangles.vert

1
2
3
4
5
6
7

#version 430 core
layout(location = 0) in vec4 vPosition;
void
main()
{
gl_Position = vPosition;
}

triangles.frag

1
2
3
4
5
6
7

#version 430 core
out vec4 fColor;
void
main()
{
fColor = vec4(0.0, 0.0, 1.0, 1.0);
}

7、编译,运行,搞定

二、所以然

1、关于第一步

这里的示例代码其实比书中的多了一句

glewExperimental = GL_TRUE;

书里的代码用到了GLEW库,GLEW可以跨平台支持OpenGL高级扩展特性,没有GLEW的话在Win平台是无法使用4.3的那些功能的。这句
代码是GLEW所有扩展的一个开关,需要在glewInit()之前执行。如果没有这一句,编译是可以通过的,但在运行时会崩溃。

2、关于第二步

主要目的是将示例代码中用到的GLUT和GLEW库的头文件和库文件引入项目目录。这一步没设置好的话编译无法通过,现象一般是无法打开freeglut相关库文件或者某些函数没有声明。

网上有些教程让你自己去下载并编译freeglut和glew,然后拷贝到各种系统目录和VS的目录,其实没用。所有用到的头文件和库文件在第八版示例代码include和lib目录中都有了,你只要正确引入项目中就不会有问题。

3、关于第三步

只有VS2015需要这一步

VS2015更改了很多标准库的链接方式和宏定义,而红宝书第八版中用到的freeglut库中用到了这些标准库和宏。所以如果报_sscanf或者__iob_func是无法解析的外部符号之类的错误,只需要把平台工具集改成旧的就行了。

4、关于第四步

没有这一项,LoadShaders中定义的函数会报无法解析的外部符号错误。

5、关于第五步

如果不忽略这个默认库,会报库冲突或者无法打开库文件的错误。

6、关于第六步

没着色器画个卵,运行漆黑一片。

7、双显卡电脑又躺枪了

我折腾了半天运行CMD显示Unable to create OpenGL 4.3 context,尼玛双显卡电脑默认用核心显卡启动应用。打开NVidia控制面板-管理3D设置-全局设置-首选图形处理器,把独显设为默认就OK了。
http://www.cnblogs.com/gagugagu/p/5211452.html

阅读全文

与shader编程系统教程相关的资料

热点内容
刘骏微信 浏览:113
书旗旧版本80 浏览:467
教编程考什么证 浏览:990
下载编程猫后哪里有客服 浏览:13
如何编辑歌曲文件格式 浏览:638
cf无限领取cdk工具 浏览:350
如何让手机文件保存到电脑上 浏览:459
sa数据库默认密码是多少 浏览:191
电脑正在查找文件 浏览:541
一个文件盒省内寄顺丰多少钱 浏览:41
诛仙62坐骑怎么升级到63 浏览:926
linux以日期查看日志记录 浏览:446
工业大数据是什么东西 浏览:881
魅族note3怎么重置网络 浏览:510
c语言程序设计模 浏览:92
儿童怎么做可编程机 浏览:603
数据计算属于什么统计学 浏览:921
07word怎么去掉标记 浏览:979
qq缓存的数据是什么 浏览:348
LED主Kv文件多少兆 浏览:856

友情链接