永发信息网

opengl绘制一个球体的程序

答案:1  悬赏:0  手机版
解决时间 2021-04-04 17:44
  • 提问者网友:你挡着我发光了
  • 2021-04-03 18:06
opengl绘制一个球体的程序
最佳答案
  • 五星知识达人网友:三千妖杀
  • 2021-04-03 18:40
语法也有错误:glVertex3fv(&vdata [&tindices[i][0][0]]);
glVertex3fv(&vdata [tindices[i][1][0]]);
glVertex3fv(&vdata [tindices[i][2][0]]);
改为:
glVertex3fv(vdata [tindices[i][0]]);
     
 glVertex3fv(vdata [tindices[i][1]]);
       
glVertex3fv(vdata [tindices[i][2]]);
我的运行环境是在QT IDE上运行的。4.7.0版。
如果你是在VC上运行应该也要加入opengl32,glut,glut32库(32位WIN上的),
另外,这个程序你是看不到一个球体的,因为你没有使用光照,只能看到一个轮廓。
 
我的Qt上我加入的库是:opengl32,glut,glee5(glee5是glee是自己编译的替换glut32库)
头加入了:windown.h,gl/glee.h(glee.h就是glee的头文件在网上可以下载,比gl.h要高级,因为WIN上的gl.h只支持到opengl32的1.1版)

 
源文件:
#include ///////////////////////////////
#include
////////////////////////////////
#include
#include
#define x .52573
#define z .85965
void mydisplay(void)
{
   
static GLfloat vdata[12][3]={{-x,0.0,z},
 
                               {x,0.0,z},
                                {-x,0.0,-z},
                                {x,0.0,-z},
                                 {0.0,z,x},
                                {0.0,z,-x},
                                {0.0,-z,x},
                                {0.0,-z,-x},
                                {z,x,0.0},
                                 {-z,x,0.0},
                                {z,-x,0.0},
                                 {-z,-x,0.0}};
   static GLuint tindices[20][3]={{1,4,0},
                                  {4,9,0},
                                  {4,5,9},
                                  {8,5,4},
                                  {1,8,4},
                                   {1,10,8},
                                   {10,3,8},
                                  {8,3,5},
                                   {3,2,5},
                                  {3,7,2},
                                   {3,10,7},
                                  {10,6,7},
                                  {6,11,7},
                                   {6,0,11},
                                  {6,1,0},
                                   {10,1,6},
                                  {11,0,9},
                                  {2,11,9},
                                  {5,2,9},
                                  {11,2,7}};
   int i;
 
 glBegin(GL_TRIANGLES);
   for(i=0;i<20;i++)
   {
       
       glVertex3fv(vdata [tindices[i][0]]);//////////////////////////////////////////////
       glVertex3fv(vdata [tindices[i][1]]);/////////////////////////////////////////////
       glVertex3fv(vdata [tindices[i][2]]);////////////////////////////////////////////
   }
    glEnd();
}
int main(int argc, char *argv[])
{
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
   glutInitWindowPosition(100, 100);
   glutInitWindowSize(400, 400);
   glutCreateWindow("第一个OpenGL程序");
   glutDisplayFunc(&mydisplay);
   glutMainLoop();
   return 0;
}
后面加了///////////////////////////////////是我修改了的。
我用的连接库是:
LIBS=-lopengl32 -lfreeglut -lglee5
追问谢谢你!那我要怎样才能让他看起来想一个球呢?或者实现它的旋转效果?追答你现在这个只是一个多面体,实际上你现在画出来的只是一个X,Y两个轴上的,Z=0,只是一个二维物体。看不出来是一个“体”,就算你把Z也加上去,必须得增加光照,你学到光照那章之后就会画出一个真正的球体等物体。如果你想现在就用光照,就看一下那章吧。用到环境光,反射光,光源的位置,慢慢来,别心急。我不知道你用的是哪本书,我推荐你学OpenGL的蓝宝书,比较容易入门,就是《OpenGL超级宝典》——就是OpenGL的蓝宝书,另外还有一本《OpenGL编程指南》——OpenGL红宝书,有点难,最好是两本书结合一超看。各 有优点
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯