LearnOpenGl练习题-着色器
题目地址:着色器 - LearnOpenGL CN
题目一:修改顶点着色器让三角形上下颠倒:
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
out vec3 ourColor;
void main()
{
gl_Position = vec4(aPos, 1.0);
gl_Position.y *= -1;
ourColor = aColor;
}
将y轴坐标乘以-1,使最终渲染出的是原坐标位置相对于y轴的镜像
题目二:使用uniform定义一个水平偏移量,在顶点着色器中使用这个偏移量把三角形移动到屏幕右侧:
C++代码
float offset = 0.5f;
int uniXOffset = glGetUniformLocation(shaderProgram, "xOffset");
glUniform1f(uniXOffset, 0.5f);
GLSL代码
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
out vec3 ourColor;
uniform float xOffset;
void main()
{
gl_Position = vec4(aPos, 1.0f);
gl_Position.x += xOffset;
ourColor = aColor;
}
使用
uniform接收偏移量,增加到x轴实现左右偏移;
题目三:使用out关键字把顶点位置输出到片段着色器,并将片段的颜色设置为与顶点位置相等(来看看连顶点位置值都在三角形中被插值的结果)。做完这些后,尝试回答下面的问题:为什么在三角形的左下角是黑的?
提供的数据
//顶点输入
float vertices[] = {
// 位置 // 颜色
0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, // 右下
-0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, // 左下
0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f // 顶部
};
GLSL代码
//顶点着色器
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
out vec3 ourPosition;
void main()
{
gl_Position = vec4(aPos, 1.0);
//将输出信息修改成坐标信息
ourPosition = aPos;
}
================= 分割线 ====================
//片段着色器
#version 330 core
out vec4 FragColor;
//这里获取的输入信息被修改成了坐标信息
in vec3 ourPosition;
void main()
{
FragColor = vec4(ourPosition, 1.0);
}
效果图

因为左下角的坐标为
(-0.5f, -0.5f, 0.0f),负数被视为0相当于最终的颜色向量为(0.0f, 0.0f, 0.0f),所以最终左下角的颜色呈现为黑色;
因为左下角的坐标为
(-0.5f, -0.5f, 0.0f),负数被视为0相当于最终的颜色向量为(0.0f, 0.0f, 0.0f),所以最终左下角的颜色呈现为黑色;








![[2021最新]Java时间戳和日期时间互转换](https://img-blog.csdnimg.cn/20210420110509853.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NDkxNzA5,size_16,color_FFFFFF,t_70)










