opengl绘制一个球体的程序

发布网友 发布时间:2022-04-24 04:59

我来回答

1个回答

热心网友 时间:2023-05-19 01:31

语法也有错误: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 <windows.h>///////////////////////////////

#include <GL/glee.h>
////////////////////////////////

#include <GL\glut.h>

#include <math.h>

#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红宝书,有点难,最好是两本书结合一超看。各 有优点

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com