LearnOpenGl练习题-着色器

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),所以最终左下角的颜色呈现为黑色;

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jc_caterpillar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值