回 帖 发 新 帖 刷新版面

主题:请教一个OPENGL问题

绘制单页双曲面。单页双曲面方程是x*x/(a*a)+y*y/(b*b)-z*z/(c*c)=1.
a,b,c是常量。这里我分别设成了3,2,1。这是半个曲面的绘制。运行总是一片白。检查了很久没发现问题。请指点下。谢谢。
 
float a=3.0;
float b=2.0;
float c=1.0;
 glPushMatrix();
 glShadeModel(GL_SMOOTH);//启用光滑明暗渲染
 glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);//采用面的绘制模式
// glScalef(1/a,1/b,1/c);
 glBegin(GL_QUAD_STRIP);

//主要问题在下面吧。这样描述点有什么问题?
 for(float y=-1.001f;y<0.901f;y+=0.1f)
 {
 
  for(int i=0;i<10;i++)
  {
   float x;
   x=(i-5)*sqrt((1+y*y/(c*c))*a*a)/5;
   glVertex3f(x,y,
    sqrt(b*b*(1+y*y/(c*c)-x*x/(a*a))));
   x=sqrt((1+(y+0.1)*(y+0.1)/(c*c))*a*a)/5*(i-5);
   glVertex3f(x,y+0.1,
    sqrt(b*b*(1+(y+0.1)*(y+0.1)/(c*c)-x*x/(a*a))));
  }
 }
 glEnd();
 glPopMatrix();


不知道发的版块对不对?斑竹别删哦。谢谢了

回复列表 (共3个回复)

沙发

我已经知道问题了所在了。因为绘制了一个无穷小的数。所以导致CPU满负荷。
不过呢还是有绘制上的问题。空间移动怎么都不满意。还的请OPENGL高手帮忙调试一下。谢谢了

下面是出错代码改正后的代码
for(float y=-1.001f;y<0.901f;y+=0.1f)
{
    glColor3f(y,y,y);
    glBegin(GL_TRIANGLE_STRIP);
    for(int i=0;i<10;i++)
    {
        float x,z;
        x=(i-5)*sqrt((1+y*y/(c*c))*a*a)/5;
        if(i==0)
        {
        z=0;
        }
        else
        {
        z=b*sqrt(b*b*(1+y*y/(c*c)-x*x/(a*a)));
        }
        glVertex3f(x,z,y);
                

        x=sqrt((1+(y+0.1)*(y+0.1)/(c*c))*a*a)/5*(i-5);
        if(i==0)
        {
        z=0;
        }
        else
        {
        z=b*sqrt(b*b*(1+(y+0.1)*(y+0.1)/(c*c)-x*x/(a*a)));
        }
        glVertex3f(x,z,y+0.1);
    }
}

板凳

这种算法会使运行速度很慢,介意先计算出顶点,再画

3 楼

如果是绘制不流畅请使用双缓存技术。不知道我说的对不对!

我来回复

您尚未登录,请登录后再回复。点此登录或注册