我严格意义上谈论的是 2d 环境(事实上这是针对 2d 游戏的)。
在片段着色器中,如何将 gl_FragCoord.x 和 gl_FragCoord.y 转换为屏幕坐标,以便左上角像素为 0, 0,右下角为屏幕分辨率(例如 800, 600)?谢谢
我正在尝试使用它制作一个简单的 OpenGL 应用程序教程制作一个简单的 OpenGL 应用程序。它说我可以为着色器提供我想要的任何文件扩展名。但是,在 VS2013 中,当我单击“添加新项目”,转到 Visual C++ 选项卡并添加像素着色器或顶点着色器时,它无法正确编译并且出现错误。为什么会发生这种情况?为什么我不能将 .hlsl 文件用于我的着色器,而只能编译常规 .txt 文件?
我得到的错误:
我想创建一个像这样的着色器,它采用世界坐标并创建波浪。我想分析视频并了解所需的步骤。我不是在寻找代码,我只是在寻找如何使用 GLSL 或 HLSL 或任何其他语言来实现它的想法。
这里是低质量和 fps GIF,以防链接中断。
这是片段着色器:
#version 330 core
// Interpolated values from the vertex shaders
in vec2 UV;
in vec3 Position_worldspace;
in vec3 Normal_cameraspace;
in vec3 EyeDirection_cameraspace;
in vec3 LightDirection_cameraspace;
// highlight effect
in float pixel_z; // fragment z coordinate in [LCS]
uniform float animz; // highlight animation z coordinate [GCS]
// Ouput data
out vec4 color;
vec3 c;
// Values that stay constant for the whole mesh.
uniform sampler2D myTextureSampler;
uniform mat4 MV;
uniform vec3 …Run Code Online (Sandbox Code Playgroud) 我有这个 Codepen 演示:Codepen 演示链接,我想将其转换为比本网站英雄部分的背景效果:网站链接
以下是可能使这一点更清楚的图像:
我真的不知道该怎么办!如果有人可以帮助我,甚至创造一支新笔,那就太棒了!
太感谢了。
这是 Codepen 演示的 JavaScript 代码:
/**/ /* ---- CORE ---- */
/**/ const mainColor = '#070707',
/**/ secondaryColor = '#FF7F16',
/**/ bgColor = '#ffae1e';
/**/ let windowWidth = window.innerWidth,
/**/ windowHeight = window.innerHeight;
/**/ class Webgl {
/**/ constructor(w, h) {
/**/ this.meshCount = 0;
/**/ this.meshListeners = [];
/**/ this.renderer = new THREE.WebGLRenderer({ antialias: true });
/**/ this.renderer.setPixelRatio(window.devicePixelRatio);
/**/ this.renderer.setClearColor(new THREE.Color(bgColor));
/**/ this.scene = new THREE.Scene();
// …Run Code Online (Sandbox Code Playgroud)我想用计算着色器写入纹理。出于测试目的,我只想将蓝色像素写入给定的空纹理。
我只看到黑屏。我将展示我的代码的相关部分
顶点着色器
#version 330 core
layout (location = 0) in vec2 aPos;
layout (location = 1) in vec2 aTexCoords;
out vec2 TexCoords;
void main()
{
TexCoords = aTexCoords;
gl_Position = vec4(aPos.x, aPos.y, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
片段着色器
#version 330 core
out vec4 FragColor;
in vec2 TexCoords;
uniform sampler2D screenTexture;
void main()
{
vec3 col = texture(screenTexture, TexCoords).rgb;
FragColor = vec4(col, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
编译计算着色器(所有使用的变量都是我的类的成员)//按照Rabbid76的建议更新,仍然不起作用
cshader = glCreateShader(GL_COMPUTE_SHADER);
const char *csSrc[] = {
"#version 440\n",
"layout (binding = 0, rgba32f) uniform image2D …Run Code Online (Sandbox Code Playgroud) 我正在尝试遵循 Android 开发人员“使用 OpenGL ES 显示图形”教程。在第一部分中,我必须画一个三角形,这样就可以了。现在我应该使用 Square 类来绘制一个正方形,该类可以按照教程进行定义。当我尝试绘制时(使用主要从 Triangle 类复制的 draw() 方法),屏幕仅显示一个三角形,它是定义的正方形的一半(显然我已经注释掉了 triangle.draw() 线.. .)。
这是我的代码,有人有任何提示来解决它吗?
Square.java:
public class Square {
private FloatBuffer vertexBuffer;
private ShortBuffer drawListBuffer;
private final int mProgram;
private final String vertexShaderCode =
"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = vPosition;" +
"}";
private final String fragmentShaderCode =
"precision mediump float;" +
"uniform vec4 vColor;" +
"void main() {" +
" gl_FragColor = vColor;" +
"}";
// number of coordinates per vertex in …Run Code Online (Sandbox Code Playgroud) 所以我是shadertoy的新手,我一直在玩一些东西,但我不明白的一件事是如何计算点到线的距离。我可以轻松地用铅笔和纸自己完成,但当我实际尝试将其应用于 Shadertoy 时,不知怎的,我总是搞砸一些东西。这是我所拥有的:
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord/iResolution.xy;
uv.x -= 0.5; //Puts the origin at the center of the screen
float r; //Red value
float g; //Green value
float b; //Blue value
float lm = 1.1; //slope
float lb = 0.5; //intercept
//Slope/intercept declarations manipulate line
//second line
float lmp = 0.0-(1.0/lm); //calculates the slope of the perpendicular line
float lbp = lb + uv.y + lmp*(uv.x); //and the intercept
//Intersection …Run Code Online (Sandbox Code Playgroud) 我想定制unity的标准着色器,我已经下载了它的源代码,只是想定制它,这样反照率alpha属性的平滑度应该每帧改变x(例如0.1f)。抱歉,如果这是一个糟糕的问题,但我用谷歌搜索了我能找到的一切,但一无所获。提前致谢。
这是让我的问题更清楚的图像,我想在着色器脚本的每一帧上更改此值
我正在尝试在我的程序中创建自己的顶点和片段着色器(这基本上是一个非常简单的程序,用VBO显示一个三角形).但是,当我尝试运行它时,我总是会看到一个没有任何显示的黑屏.我检查了编译日志,它返回没有错误.我还没有使用我自己的自定义着色器运行程序,这让我想知道我在这里做错了什么.我在OpenGL 3.2和GLSL 1.5上运行我的代码
以下是我正在尝试运行的代码
GLuint vbo;
GLfloat data[] = {0.0, 0.0, -5.0,
1.0, 0.0, -5.0,
1.0, 1.0, -5.0
};
const char *vertexShader = "\n\
#version 150\n\
\n\
layout (location=0) in vec4 position;\n\
void main()\n\
{\n\
gl_Position = position;\n\
}\n\
";
const char *fragmentShader = "\n\
#version 150\n\
\n\
out vec4 outColor;\n\
\n\
void main()\n\
{\n\
outColor = vec4(1.0, 0.0, 0.0, 1.0);\n\
}";
- (void)drawRect:(NSRect)dirtyRect
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glUseProgram(programId);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, …Run Code Online (Sandbox Code Playgroud)