導航:首頁 > 文件教程 > 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編程系統教程相關的資料

熱點內容
js跳到頁面某地 瀏覽:550
jsp展示clob欄位 瀏覽:779
nyx在網路上是什麼意思 瀏覽:145
樂播農業app是什麼 瀏覽:530
編程框架如何開發 瀏覽:136
金庸群俠傳3修改代碼 瀏覽:712
檢察院的文件類別有哪些 瀏覽:793
怎麼把九游殘留數據刪除 瀏覽:828
有什麼女生主動聊天的app 瀏覽:436
有哪些可以督促自己的app 瀏覽:244
用USB傳輸視頻文件夾顯示為空 瀏覽:710
恢復文件軟體免費版手機 瀏覽:648
lg怎麼隱藏文件 瀏覽:836
蘋果免費讀書app推薦 瀏覽:497
劉駿微信 瀏覽:113
書旗舊版本80 瀏覽:467
教編程考什麼證 瀏覽:990
下載編程貓後哪裡有客服 瀏覽:13
如何編輯歌曲文件格式 瀏覽:638
cf無限領取cdk工具 瀏覽:350

友情鏈接