如何解决现代Opengl线点画问题
我正在尝试在OpenGL中实现Line Stipple,因为Line Stipple API已被弃用。它适用于直线和多边形,但不适用于圆形。以下着色器有问题吗?我看到线条和多边形的图案很好。但不适用于圈子。但是当我放大圆形时,我会看到图案。不知道是什么问题。请让我知道。
谢谢。
下面是我的顶点和片段着色器代码。
顶点着色器:
Header always set Content-Security-Policy "frame-ancestors https://*.mysite.com;"
片段着色器:
#version 420 core
layout (location = 0)in vec4 aPos;
flat out vec3 startPos;
out vec3 vertPos;
uniform mat4 mvp;
void main()
{
vec4 pos = mvp * vec4(aPos.x,aPos.y,0.0,1.0)
gl_Position = pos;
vertPos = pos.xyz/pos.w;
startPos = vertPos;
}
下面是我设置统一值的代码。
#version 420 core
flat in vec3 startPos;
in vec3 vertPos;
uniform vec4 my_color;
uniform vec2 u_resolution;
uniform uint u_pattern;
uniform float u_factor;
uniform int stipple;
out vec4 color;
void main()
{
if (stipple == 1)
{
vec2 dir = (vertPos.xy-startPos.xy) * u_resolution/2.0;
float dist = length(dir);
uint bit = uint(round(dist/u_factor)) & 15U;
if((u_pattern & (1U<<bit)) == 0U)
discard;
}
color = my_color;
}
然后绘制功能
if (vModel->getLineStipple() > 1 )
{
glUniform1i(stip,1);
GLint loc_res = glGetUniformLocation(shaderProgram,"u_resolution");
GLint loc_pattern = glGetUniformLocation(shaderProgram,"u_pattern");
GLint loc_factor = glGetUniformLocation(shaderProgram,"u_factor");
GLushort pattern = vModel->getLineStipple();
GLfloat factor = vModel->getStippleFactor();
glUniform1ui(loc_pattern,pattern);
glUniform1f(loc_factor,factor);
glUniform2f(loc_res,_scrWidth,_scrHeight);
}
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。