替代gl_texcoord.xy获得纹理坐标
Alternative to gl_TexCoord.xy to get texture coordinate
我总是在glsl 3(带有 #version 330 line(中制作着着色器在GLSL 4中,并将其与SFML库一起渲染,而不是纯opengl。
就目前而言,我的目标是为2D游戏做一个基本的着色器,该游戏会采用纹理的每个像素的颜色并修改它们。我总是用 gl_TexCoord[0].xy
做到这一点,但是现在似乎已经折旧了,所以我搜索了,我听说我必须在和 out out 变量中使用certex着色器,所以我尝试了。
片段着色器
#version 400
in vec2 fragCoord;
out vec4 fragColor;
uniform sampler2D image;
void main(){
// Get the color
vec4 color = texture( image, fragCoord );
/*
* Do things with the color
*/
// Return the color
fragColor = color;
}
顶点着色器
#version 400
in vec3 position;
in vec2 textureCoord;
out vec2 fragCoord;
void main(){
// Set the position of the pixel and vertex (I guess)
fragCoord = textureCoord;
gl_Position = vec4( position, 1.0 );
}
我还看到我们可以添加投影,模型和查看矩阵,但是我不知道该如何使用SFML(我什至不认为我们可以(,而且我不想学习关于OpenGL或SFML的一些复杂的事情只是为了在2D游戏中更改一些颜色,所以这是我的问题:
是否有一种简单的方法可以使我们正在处理的像素的坐标?也许摆脱顶点着色器,或者不使用矩阵而不使用它?
,除非您真的想学习很多令人讨厌的OpenGL,否则为纹理编写自己的着色器是有点过分的。SFML可以在幕后为您处理纹理和着色器(这是有关如何使用它们的好文章(,因此您根本不必担心着色器。另请注意,您可以使用sprite.setColor(sf::color(*whatever*));
更改SFML Sprites的颜色(我相信您正在尝试做什么(。另外,使用version 330
没有问题。这就是我通常使用的,尽管还有in
和out
的东西。
如果您真的想使用自己的着色器来进行精美的效果,例如像素化,模糊等。我无济于事,因为我只使用过纯opengl,所以我不知道pertex如何信息由SFML处理,但这是您可以签出的一些有趣的示例代码,这是一个教程,这里是参考。
。更直接地回答您的问题。gl_FragCoord
是带有GLSL的内置变量,可以跟踪片段位置,但是您必须在顶点着色器中设置gl_Position
。如果您正在做任何与OpenGL相关的事情,则无法摆脱顶点着色器。您必须做精美的矩阵工作(这是一个很棒的图书馆(,并且可能(像这样(来告诉GLSL一切都在哪里。
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 移植DXUT SDKMesh以导入OBJ文件,在哪里添加纹理坐标和索引
- 替代gl_texcoord.xy获得纹理坐标
- OpenGL 纹理坐标不起作用
- 着色器和纹理坐标问题
- 将浮点数组存储在纹理中,并使用纹理坐标从着色器访问浮点
- Opengl 土壤纹理坐标无法识别
- 将纹理坐标呈现到帧缓冲区
- 使用纹理坐标重复纹理的部分
- 如何在渲染 VBO 后仅更改纹理坐标?
- OpenGL:动态更改纹理坐标
- 如何创建纹理坐标
- OpenGL 对齐纹理坐标
- 用于渲染 3D 球体的纹理坐标
- 在DirectX9/C++中为OBJMesh加载纹理坐标
- DirectX剪辑空间纹理坐标
- 包裹纹理坐标在可变大小的四边形上
- 对象模型加载纹理坐标和顶点位置没有正确加载
- Opengl纹理坐标用于全屏效果
- 圆柱体()和纹理坐标偏移/乘数