Q:修改顶点着色器让三角形上下颠倒:参考解答
A:直接修改顶点数组
Q:使用uniform定义一个水平偏移量,在顶点着色器中使用这个偏移量把三角形移动到屏幕右侧:参考解答
-
A:
在cpp文件中的绘制部分,设置
float offset = 0.5f; ourShader.setFloat("xOffset", offset);
顶点着色器
#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.x + xOffset, aPos.y, aPos.z, 1.0); // add the xOffset to the x position of the vertex position ourColor = aColor; }
Q:使用
out
关键字把顶点位置输出到片段着色器,并将片段的颜色设置为与顶点位置相等(来看看连顶点位置值都在三角形中被插值的结果)。做完这些后,尝试回答下面的问题:为什么在三角形的左下角是黑的?:参考解答-
A:
顶点着色器
#version 330 core layout (location = 0) in vec3 aPos; layout (location = 1) in vec3 aColor; // out vec3 ourColor; out vec3 ourPosition; void main() { gl_Position = vec4(aPos, 1.0); // ourColor = aColor; ourPosition = aPos; }
片段着色器
#version 330 core out vec4 FragColor; // in vec3 ourColor; in vec3 ourPosition; void main() { FragColor = vec4(ourPosition, 1.0); // note how the position value is linearly interpolated to get all the different colors }
其中颜色属性在后面虽然被设置,但是没有用到
效果
![_CR1%24171MAS3Y%L]59(70.png](https://upload-images.jianshu.io/upload_images/8820600-67616d0a011fa212.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
想一想:我们片段的颜色输出等于的(内插)坐标三角形。三角形左下角的坐标是什么?是(-0.5f,-0.5f,0.0f)。 因为x、y值为负,它们实际被设置为0.0f。这种情况一直发生到三角形中间,因为从该点开始,值将再次被正插值。 0.0f的值当然是黑色的,这解释了三角形的黑色面。
着色器(练习)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 第三章 管线一览 本章我们会学到什么 OpenGL管线的每个阶段做什么的 如果连接着色器和固定功能管线阶段 如果创...