void _stdcall display (void){
// glClearColor(1.0,0.0,1.0,1.0); //设置背景颜色
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); //设置背景颜色
glColor3f(1.0,1.0,0.0);//设置绘制图形所用颜色 //设置图形转换信息
glLoadIdentity();            //清空矩阵
glTranslatef(0.0,-1.0,-5.0); //把圆柱体向Y负方向平移1单位,向Z负方向平移5单位
glRotatef(15.0,1.0,0.0,0.0); //把圆柱体绕X轴旋转15°
//具体绘制图形
for(int i=0;i<N;i++)
drawSurface(&bottomVertex[i][0],&bottomVertex[i+1][0],&topVertex[i+1][0],&topVertex[i][0]);
//绘制最后一个缺口
drawSurface(&bottomVertex[N-1][0],&bottomVertex[0][0],&topVertex[0][0],&topVertex[N-1][0]);
glFlush();//结束图形绘制的顶点给定,并最终输出至显示器完成图形的显示
}
void drawSurface(double *v1,double *v2,double *v3,double *v4)
{
glBegin(GL_POLYGON);//绘制侧面
glNormal3dv(v1);
glVertex3dv(v1); glNormal3dv(v2);
glVertex3dv(v2); glNormal3dv(v2);
glVertex3dv(v3); glNormal3dv(v1);
glVertex3dv(v4);
glEnd();
glBegin(GL_TRIANGLES);//绘制上底
glNormal3d(0.0,1.0,0.0);//法线向上
glVertex3dv(v3); glNormal3d(0.0,1.0,0.0);
glVertex3dv(O2);

glNormal3d(0.0,1.0,0.0);
glVertex3dv(v4);
glEnd();
//因为下底面不接受光照,所以完全可以不绘制下底以加快速度
/* glBegin(GL_TRIANGLES);//绘制下底
glNormal3d(0.0,-1.0,0.0);//法线向下
glVertex3dv(v2); glNormal3d(0.0,-1.0,0.0);
glVertex3dv(O1);

glNormal3d(0.0,-1.0,0.0);
glVertex3dv(v1);
glEnd();
*/
}

解决方案 »

  1.   

    楼主给的代码不够全啊
    Private void _stdcall display (){ 
    // glClearColor(1.0,0.0,1.0,1.0); //设置背景颜色 
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); //设置背景颜色 
    glColor3f(1.0,1.0,0.0);//设置绘制图形所用颜色 //设置图形转换信息 
    glLoadIdentity();            //清空矩阵 
    glTranslatef(0.0,-1.0,-5.0); //把圆柱体向Y负方向平移1单位,向Z负方向平移5单位 
    glRotatef(15.0,1.0,0.0,0.0); //把圆柱体绕X轴旋转15° 
    //具体绘制图形 
    for(int i=0;i <N;i++) 
    drawSurface(bottomVertex[i][0],bottomVertex[i+1][0],topVertex[i+1][0],topVertex[i][0]); 
    //绘制最后一个缺口 
    drawSurface(bottomVertex[N-1][0],bottomVertex[0][0],topVertex[0][0],topVertex[N-1][0]); 
    glFlush();//结束图形绘制的顶点给定,并最终输出至显示器完成图形的显示 

    Private void drawSurface(double v1,double v2,double v3,double v4) 

    glBegin(GL_POLYGON);//绘制侧面 
    glNormal3dv(v1); 
    glVertex3dv(v1); glNormal3dv(v2); 
    glVertex3dv(v2); glNormal3dv(v2); 
    glVertex3dv(v3); glNormal3dv(v1); 
    glVertex3dv(v4); 
    glEnd(); 
    glBegin(GL_TRIANGLES);//绘制上底 
    glNormal3d(0.0,1.0,0.0);//法线向上 
    glVertex3dv(v3); glNormal3d(0.0,1.0,0.0); 
    glVertex3dv(O2); glNormal3d(0.0,1.0,0.0); 
    glVertex3dv(v4); 
    glEnd(); 
    //因为下底面不接受光照,所以完全可以不绘制下底以加快速度 
    /* glBegin(GL_TRIANGLES);//绘制下底 
    glNormal3d(0.0,-1.0,0.0);//法线向下 
    glVertex3dv(v2); glNormal3d(0.0,-1.0,0.0); 
    glVertex3dv(O1); glNormal3d(0.0,-1.0,0.0); 
    glVertex3dv(v1); 
    glEnd(); 
    */ 

      

  2.   

    不是这样的,你会opengl么?÷
    glNormal3dv(v1); 
    glVertex3dv(v1); 
    这个里面是数组型的,
    drawSurface(bottomVertex[N-1][0],bottomVertex[0][0],topVertex[0][0],topVertex[N-1][0]); 
    这里它的指向地址类型的
      

  3.   

    http://dev.csdn.net/article/41/41504.shtm
     用C#开发opengl 
      

  4.   

    c# 中直接P/Invoke写好的东东
    假设你的C++实在abc.dll里面public partial class NativeMethods
        {        /// Return Type: void
            [System.Runtime.InteropServices.DllImportAttribute("abc.dll")]
            public static extern void display();
            /// Return Type: void
            ///v1: double*
            ///v2: double*
            ///v3: double*
            ///v4: double*
            [System.Runtime.InteropServices.DllImportAttribute("abc.dll")]
            public static extern void drawSurface(ref double v1, ref double v2, ref double v3, ref double v4);    }