我想知道如何使用顶点法线来实现闪电效果?目前我所拥有的是我可以将顶点和纹理坐标发送到着色器并使用它们但是使用法线,我不知道如何在着色器程序中使用它们.以下是我到目前为止的情况.
// vertex shader
layout(location = 0) in vec4 vert;
layout(location = 1) in vec4 color;
layout(location = 2) in vec2 texcoord;
uniform mat4 m_model;
uniform mat4 m_view;
uniform mat4 m_proj;
void main() {
gl_Position = m_proj * m_view * m_model * vert;
}
// fragment shader
in vec2 fragtexcoord;
out vec4 color;
uniform sampler2D textureunit;
void main(void) {
color = texture(textureunit, fragtexcoord);
}
Run Code Online (Sandbox Code Playgroud)
编辑 以下是我的着色器.
顶点着色器
layout(location = 0) in vec4 vert;
layout(location = 1) in vec4 color;
layout(location …Run Code Online (Sandbox Code Playgroud) 我想制作一个内部为320x240的游戏,但以整数倍(640x480,960,720等)渲染到屏幕.我打算复古的2D像素图形.
我通过glOrtho()设置内部分辨率来实现这一点:
glOrtho(0, 320, 240, 0, 0, 1);
Run Code Online (Sandbox Code Playgroud)
然后我将输出分辨率放大3倍,如下所示:
glViewport(0,0,960,720);
window = SDL_CreateWindow("Title", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 960, 720, SDL_WINDOW_OPENGL);
Run Code Online (Sandbox Code Playgroud)
我画这样的矩形:
glBegin(GL_LINE_LOOP);
glVertex2f(rect_x, rect_y);
glVertex2f(rect_x + rect_w, rect_y);
glVertex2f(rect_x + dst_w, dst_y + dst_h);
glVertex2f(rect_x, rect_y + rect_h);
glEnd();
Run Code Online (Sandbox Code Playgroud)
它完美地工作在320x240(未缩放):
当我扩展到960x720时,像素渲染一切正常!然而,似乎GL_Line_Loop不是在320x240画布上绘制并按比例放大,而是在最终的960x720画布上绘制.结果是3px世界中的1px行:(
如何在320x240 glOrtho画布上绘制线条,而不是960x720输出画布?