Opengl 如何绘制具有世界空间宽度的点基本体?
我想画一个点来模拟光源的位置,但是我现在面临的问题是,无论距离有多远,它的大小都是一样的: 我将一个顶点按入GPU,我的代码:Opengl 如何绘制具有世界空间宽度的点基本体?,opengl,3d,shader,point,primitive,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 =
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;
}
#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);
}
point.fs.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;
}
#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教程
关于点的大小,我知道我做错了什么,但是如何正确计算点的大小?我有可用的信息,我想,通过
查看\u矩阵
,我需要获得到点的距离,并根据该距离进行缩放。如果启用GL\u点平滑
或多重采样,圆点会自动出现。但在许多实现中,它们的最大大小约为63.5gl_PointSize
是在屏幕空间中定义的,这就是为什么无论点离得有多远,它的大小都是恒定的。@AndonM.Coleman感谢您的解释,但是我如何分别缩放点,使它们看起来像来自世界大小?还有glEnable(gl_point_SMOOTH)
给出了一个无效的枚举错误,我是否遗漏了什么?否,GL\u POINT\u SMOOTH
在预期的核心配置文件中被弃用。是否希望此点大致接近灯光的体积?或者只是一个简单的点,它越远越小?如果你有一个透视投影,你可以试试像gl_PointSize=100.0*gl_Position.w
这样的东西。@AndonM.Coleman我使用的是第一人称视图,它最终会转换成一个平截头体,所以我认为这仍然是透视投影?我还建议除以gl.Position.w