现代Opengl线点画问题

问题描述

enter image description here

我正在尝试在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 (将#修改为@)