首页 > 其他分享 >OpenGL——着色器设置绘制对象颜色及透明度

OpenGL——着色器设置绘制对象颜色及透明度

时间:2023-10-08 20:45:49浏览次数:42  
标签:layout OpenGL 透明度 vColor vec4 vec3 着色器

 

{

https://blog.csdn.net/weixin_46568899/article/details/129217018

}

 

{

。着色器的编写结构如下:

1.声明版本(很重要,版本不对的话会得到不同的绘制结果)。

2.使用location指定输入变量。

3.定义输入输出变量(用in和out关键字)。

4.main函数。

以下是一个简单的例子:

    const char* vertexShaderSource =
            "#version 300 es\n"
            "layout (location = 0) in vec3 aPos;\n"
            "layout (location = 1) in vec3 aColor;\n"
            "out vec3 vColor;\n"
            "void main()\n"
            "{\n"
            "   vColor = aColor;\n"
            "   gl_Position = vec4(aPos, 1.0);\n"
            "}";
     
    const char* fragmentShaderSource =
            "#version 300 es\n"
            "in vec3 vColor;\n"
            "out vec4 outColor;\n"
            "void main()\n"
            "{\n"
            "   outColor = vec4(vColor, 1.0);\n"
            "}";

在代码中首先声明了着色器的版本,然后定义了位置属性,layout(locationg=0)和layout(locationg=1)分别代表了顶点着色器和片元着色器的位置属性,我个人的理解是这是声明了这个变量的内存位置属性,这个位置属性 也是函数glVertexAttribPointer()第一个参数的值。vec3就代表了接下来要输入的顶点的维度(x,y,z),二vec3 acolor代表了接下来要输入的颜色维度(r,g,b)。绘制时最终的颜色是需要设置为四维度的,最后一个维度为透明度。注意了,接下来是重点:

如果在着色器里面设置好透明度的话,接下来整个绘制对象的透明度都是固定的,如果想要实现绘制对象透明度或颜色渐变,那就不可以在片元着色器中设置颜色或透明度,代码如下:

    const char* vertexShaderSource =
    "#version 300 es\n"
    "layout (location = 0) in vec3 aPos;\n"
    "layout (location = 1) in vec4 aColor;\n"
    "out vec4 vColor;\n"
    "void main()\n"
    "{\n"
    "   vColor = aColor;\n"
    "   gl_Position = vec4(aPos, 1.0);\n"
    "}";
     
    const char* fragmentShaderSource =
    "#version 300 es\n"
    "in vec4 vColor;\n"
    "out vec4 outColor;\n"
    "void main()\n"
    "{\n"
    "   outColor = vec4(vColor);\n"
    "}";

这样,我们就可以在接下来传入的顶点的颜色信息中设置不一样的颜色或透明度了。

}

标签:layout,OpenGL,透明度,vColor,vec4,vec3,着色器
From: https://www.cnblogs.com/YZFHKMS-X/p/17750087.html

相关文章

  • openGL学习<四>、着色器
    1//2//Createdbysryon2021/7/6.3//4#include<glad/glad.h>5#include<GLFW/glfw3.h>6#include<iostream>7#include<cmath>8usingnamespacestd;910voidframebuffer_size_callback(GLFWwindow*window,......
  • openGL学习<三>、图形渲染管道(显示三角形)
    参考:https://learnopengl-cn.github.io/01%20Getting%20started/04%20Hello%20Triangle/1、图形渲染管线2、顶点渲染器3、片段渲染器4、生成着色器程序5、 1、图形渲染管线图形渲染管线分为几个阶段小任务,对于每一个阶段任务程序(例如给10亿个像素着色),GPU都可以......
  • OpenGL入门——多个纹理
    上一节OpenGL入门——纹理-一只小瓶子-博客园(cnblogs.com)中介绍了怎么使用纹理,实际使用过程中可能会用到多个纹理。跟顶点属性一样(顶点对象可以有多个属性,每个属性都有一个位置值(layout)),纹理采样器也有一个位置值(纹理单元),OpenGL中至少有16个纹理单元,从GL_TEXTURE0到GL_TE......
  • OpenGL入门——纹理
    已知,我们是对每个顶点去添加对应颜色,如果想要图像更加细节真实,就必须有足够多的点,点的密度要很大,而每个点都有个颜色属性,这样很浪费资源。这时候我们就可以引入纹理,它可以用来添加图像的细节,类似于皮肤。每个顶点对应一个纹理坐标(表明从纹理图像的哪个位置采样,即获得颜色),其他片......
  • OpenGL with GLFW GLAD and CMAKE
    0.前言首先,无论是在youtube还是网站上,许多OpenGL的环境配置都是在VSstudio里配置的,个人比较喜欢使用VScode,以及Cmake.下文给出了一个Cmake版本关于GLFWGLAD的编译环境。另外,感谢分享知识的人。具体的代码已放入github中,代码地址https://github.com/Alex-gift-hit/O......
  • 22 Z-index 和透明度
    /opacity:背景透明度/<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>#box{width:300px;height:200px;border:#5a99a83p......
  • QT学习之OpenGL
    在公司内网找到一本第一版的《QtCreator快速入门》,然后到:https://www.yafeilinux.com/下载了第一版的源码,因为最近对三维动画比较感兴趣,所以直接开撸第12章:OpenGL问题1.如下图 搜索得到解决方案如下:这东西改完好像保存不了,下次打开还提示!问题2:提示找不到gluPerspective......
  • 【NET 7.0、OpenGL ES】使用Silk.NET渲染MMD,并实时进行物理模拟。
    有关mmd播放器,网上也有许多非常漂亮的实现,如 pmxeditor、saba、blender_mmd_tools等等。。首先我想先介绍下我参考实现的仓库:sselecirPyM/Coocoo3D:ExperimentalMMDrendererusingDX12andDXR.(github.com),这是sselecirPyM大神使用NET6.0和DX12实现的mmd渲染器,支持自定......
  • 颜色和透明度设置
    透明度<el-color-pickerv-model="color"show-alpha></el-color-picker><script>exportdefault{data(){return{color:'rgba(19,206,102,0.8)'}}};</script>颜色<el-color-pick......
  • OpenGL入门——着色器类
    着色器的编写、编译、管理是个很繁琐的事。所以就需要写一个类,这个类可以从文件读取着色器源码,可以编译链接它们,可以对它们进行错误检测,可以设置Uniform值。 1.类的声明#pragmaonce#include<glad/glad.h>#include<string>#include<fstream>#include<sstream>#inc......