OpenGL | 显示一个三角形

  • 一般显示的3d图形都有一系列的三角形构成。
  • 在OpenGL中显示物体的步骤:
    • Étape d’initialisation, formée par [只要做1次,(1)(2)没有顺序关系]
      • Mise en place des shaders (1)
      • Envoie des données sur la carte graphique (2) [将数据传给显卡]
    • Demande d’affichage des données (3) [显示]

Shader

  • 可以实现根据光线改变材料的外观。
  • 在OpenGL中用 GLSL (OpenGL Shading Language)实现
  • 编译很快,在每次可执行文件开启时实现(compilation jit: Just In Time)
  • 一般由 Vertex ShaderFragment Shader 实现。

Vertex Shader

用于对每个顶点进行投影的计算。
Vertex Shader输出的结果在一个立方体[-1,1]内,clip coordinates,只有在这个Cube中的顶点才能被显示出来。

Fragment Shader

对应一个élément de primitive rasterisé (\simeq≃ un pixel appartenant à un morceau visible d’un triangle)
输入:des données de sommets interpolées linéairement sur la primitive
输出:une couleur

rasterization (栅格化) 由显卡自动实现,在Vertex Shader 和Fragment Shader 之后。

一个最小的Shader程序

这里用的是GLSL语言写的一个txt

  • Vertex Shader
#version 330 core 
// 指定 GLSL 3.30
layout (location = 0) in vec4 position;  // 一个顶点的第一个(location = 0)参数名字(变量名) 为 position
void main()
{
   
    gl_Position = position;
}
  • Fragment Shader
#version 330 core
out vec4 FragColor;
void main()
{
   
    FragColor = vec4(1.0, 0.0, 0.0, 1.0); // (r,g,b,a) a 是alpha
}

具体使用:

	// ************************************************* //
    //             1 - Setup Shaders                     //
    // ************************************************* //

    std::cout<<"*** Setup Shader ***"<<std::endl;

    // ******************************** //
    // 1.1 Define vertex and fragment shader
    // ******************************** //
    //   Here GLSL code is hard-coded inline as strings
    const char* vertex_shader_txt = "                                      \n \
            #version 330 core                                              \n \
            layout (location = 0) in vec4 position;                        \n \
            void main()                                                    \n \
            {                                                              \n \
                gl_Position = position;                                    \n \
            }";
    const char* fragment_shader_txt = "                                    \n \
            #version 330 core                                             
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值