如何绘制具有世界空间宽度的Point Primitive?

时间:2014-02-01 18:55:08

标签: opengl 3d shader point primitive

我想绘制一个点,模拟光源的位置,但我现在面临的问题是它总是相同的大小,无论距离如何:

我将一个顶点直接推送到GPU,我的代码:

point.vs.glsl

#version 440 core

layout(location = 0) in vec4 position;

layout(location = 0) uniform mat4 model_matrix;
layout(location = 1) uniform mat4 view_matrix;
layout(location = 2) uniform mat4 proj_matrix;

void main(void) {
    gl_PointSize = 100.0;
    gl_Position = proj_matrix * view_matrix * model_matrix * position;
}

point.fs.glsl

#version 440 core

out vec4 color;

void main(void) {
    //create round point
    vec2 p = gl_PointCoord * 2.0 - vec2(1.0);
    if (dot(p, p) > 1.0) {
        discard;
    }

    color = vec4(0.5, 0.0, 0.0, 1.0);
}

创建圆点的代码实际上也可以在3D中运行吗?如果我没弄错的话,我相信它来自2D教程。

关于点大小,我知道我做错了什么,但我怎么能正确计算尺寸?我认为我有可用的信息,view_matrix并且我需要以某种方式获得与该点的距离,并根据该比例进行缩放。

0 个答案:

没有答案