游戏开发论坛

 找回密码
 立即注册
搜索
查看: 11323|回复: 9

我用OPENGL画多边形,填充颜色 为什么是黑的呢?

[复制链接]

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2008-9-4 16:30:00 | 显示全部楼层 |阅读模式
如题,我用OPENGL画多边形,填充颜色 为什么是黑的呢?
代码我发上来;
  glBegin(GL_QUADS);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(10,  5,  20);               
glVertex3f(20,  5,  20);
glVertex3f(20,  5, 5);
glVertex3f(10,  5,  5);
glEnd();
我这边只发了一个四边形的代码,结果出来老是黑色的,大家有什么办法解决。

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2008-9-4 16:53:00 | 显示全部楼层

Re:我用OPENGL画多边形,填充颜色 为什么是黑的呢?

怎么没有人来回答问题呀,大家来帮帮我咯

0

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2008-9-5 09:15:00 | 显示全部楼层

Re: 我用OPENGL画多边形,填充颜色 为什么是黑的呢?

有没有开启纹理或者打开光照什么的? 最好有个完整的代码作为附件传上来。

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2008-9-5 10:49:00 | 显示全部楼层

Re:我用OPENGL画多边形,填充颜色 为什么是黑的呢?

哥们在不在 在的话把你E-MAIL给我 我发给你帮我看看

50

主题

244

帖子

319

积分

中级会员

Rank: 3Rank: 3

积分
319
QQ
发表于 2008-9-5 11:50:00 | 显示全部楼层

Re:我用OPENGL画多边形,填充颜色 为什么是黑的呢?

试试
glBegin(GL_QUADS);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(10,  5,  20);  
glColor3f(1.0f,0.0f,0.0f);               
glVertex3f(20,  5,  20);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(20,  5, 5);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(10,  5,  5);
glEnd();

0

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2008-9-5 14:46:00 | 显示全部楼层

Re:我用OPENGL画多边形,填充颜色 为什么是黑的呢?

tan_dunming@foxmail.com

21

主题

100

帖子

100

积分

注册会员

Rank: 2

积分
100
QQ
发表于 2008-9-6 08:04:00 | 显示全部楼层

Re: 我用OPENGL画多边形,填充颜色 为什么是黑的呢?

最前面加上glDisable(GL_TEXTURE_2D);试试

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2008-9-6 12:18:00 | 显示全部楼层

Re:我用OPENGL画多边形,填充颜色 为什么是黑的呢?

        glEnable(GL_COLOR_MATERIAL);
         
         // Set Material properties to follow glColor values
        glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

2

主题

71

帖子

94

积分

注册会员

Rank: 2

积分
94
发表于 2008-9-6 22:18:00 | 显示全部楼层

Re:我用OPENGL画多边形,填充颜色 为什么是黑的呢?

  /***************************************************/
         /************                        ***************/
         /************     扫描线填充算法     ***************/
         /************                        ***************/
         /***************************************************/
算法步骤:
(1)确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大y值(ymin和ymax)。
(2)从y=ymin到y=ymax,每次用一条扫描线进行填充。
(3)对一条扫描线填充的过程可分为四个步骤:
                a.求交
                b.排序
                c.交点配对
                d.区间填色
程序代码片断:
#define n1 6  /*第一个多边形顶点数*/
#define n2 3  /*第二个多边形顶点数*/
#define d  4  /*扫描线间隔*/
void Scan_fill(int x[30],int y[30])
/*********其中x[0]=0,y[0]=0舍弃空间*********/
{
   int i,j;
   int nn[2][2];
   int d,k,h;
   float xx[30],yy[30],t;
   int xjd[3000],yjd[3000],xmax,xmin,ymax,ymin;
   n1+=1;
   n2+=1;
   setcolor(6);
   for(i=1;i<=n1-1;i++)
      line(x,y,x[i+1],y[i+1]);
   for(i=n1+1;i<=n1+n2-1;i++)
      line(x,y,x[i+1],y[i+1]);
   nn[0][0]=1;
   nn[0][1]=n1;
   nn[1][0]=n1+1;
   nn[1][1]=n1+n2;
   ymin=500;
   ymax=0;
   for(j=0;j<=1;j++)
      {
         for(i=nn[j][0];i<=nn[j][1];i++)
            {
               xx+=0.5;  /*多边形顶点抬高0.5*/
               yy+=0.5;
               if(yy<(float)ymin)  /*计算多边形顶点的最大最小值*/
                  ymin=(int)yy;
               else
                  if(yy>(float)ymax)
                     ymax=(int)yy;
            }
      }
    for(h=ymin;h<=ymax;h+=d)   /*扫描线循环*/
      {
         k=0;
         for(j=0;j<=1;j++)     /*多边形循环*/
            for(i=nn[j][0];i<=nn[j][1]-1;i++)  /*多边形的边循环*/
               {
                  if((int)yy[i+1]!=(int)yy)
                     {
                        t=((float)-yy)/(yy[i+1]-yy);
                        if(t>=0&&t<=1) /*扫描线h与边有交点*/
                          {            /*计算交点*/
                             xjd[k]=xx+(xx[i+1]-xx)*t;
                             yjd[j]=h;
                             k+=1;
                          }
                     }
               }
         for(i=0;i<=k-1;k++)  /*交点排序*/
            {
               l=i;
               for(m=i+1;m<=k-1;m++)
                  if(xjd[m]<xjd[l])
                     l=m;
               if(l!=i)
                  {
                     t=yjd;
                     yjd=yjd[l];
                     yjd[l]=t;
                     t=xjd;
                     xjd=xjd[l];
                     xjd[l]=t;
                  }
            }
          for(i=0;i<=k-1;i+=2)   /*填充*/
            {
               line(xjd,yjd,xjd[i+1],yjd[i+1])
            }
        }
}
                           

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2008-9-8 16:04:00 | 显示全部楼层

Re: Re: 我用OPENGL画多边形,填充颜色 为什么是黑的呢?

Symphonia: Re: 我用OPENGL画多边形,填充颜色 为什么是黑的呢?

最前面加上glDisable(GL_TEXTURE_2D);试试

谢谢了哈 我就是这样做的 已经解决。结帖了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 06:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表