🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.program
Article #975

OPENGL(14)

#975
From: ����
Date: Tue, 05 May 1998 00:00
440 lines
14891 bytes
BBSˮľ�廪վ�þ�����
������: yxy (��˿˿#���ߵ�С��ӥ), ����: GAME_Designer 
��  ��: OPENGL(14) 
����վ: BBS ˮľ�廪վ (Tue Feb 17 16:24:53 1998) 
 
����Ĺ������������ߺ����������ʽ����ʵ�����ߺ�����ֻ�DZ�Ϊ 
��ά���ѡ� 
1.���涨�� 
void glMap2{fd}(GLenum target,TYPE u1,TYPE u2,GLint ustride,GLint uorder, 
                TYPE v1,TYPE v2,GLint vstride,GLint vorder,TYPE points); 
target�Ķ���ͬ�ϴν��ܵ�������target�Ķ��塣 
U V�Ƕ�ά������� 
uorder,vorder;ustride,vstride�Ķ��嶼�������߶��塣 
points�ǿ��Ƶ���� 
 
2.��������һ��ļ��� 
void glEvalCoord2{fd}[v](TYPE u,TYPE v); 
���������U V����������������һ�����������λ�� 
 
3.������ƵĿ��� 
void glMapGrid2{fd}(GLenum nu,TYPE u1,TYPE u2,GLenum nv,TYPE v1,TYPE v2); 
�����������ռ������񣬴�u1��u2��Ϊ�ȼ��nu������v1��v2��Ϊ�ȼ��nv���� 
 
������һ��������������������ӣ� 
//////////////////////////////////////////////////////////// 
//sample.cpp 
#include "glos.h" 
#include <GL/gl.h> 
#include <GL/glaux.h> 
#include "windows.h" 
void myinit(void); 
void CALLBACK  display(void); 
void CALLBACK  reshape(GLsizei w,GLsizei h); 
 
//���Ƶ���� 
GLfloat points[4][4][3]={ 
        {{-1.5,-1.5,2.0},{-0.5,-1.5,2.0}, 
        {0.5,-1.5,-1.0},{1.5,-1.5,2.0}}, 
        {{-1.5,-0.5,1.0},{-0.5,1.5,2.0}, 
        {0.5,0.5,1.0},{1.5,-0.5,-1.0}}, 
        {{-1.5,0.5,2.0},{-0.5,0.5,1.0}, 
        {0.5,0.5,3.0},{1.5,-1.5,1.5}}, 
        {{-1.5,1.5,-2.0},{-0.5,1.5,-2.0}, 
        {0.5,0.5,1.0},{1.5,1.5,-1.0}}}; 
 
//Ϊ�������ʾ���Ƶ�����õ�һ����ɫ 
GLfloat color[4][3]={ 
        {1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},{1.0,1.0,1.0}}; 
 
void myinit(void) 
{ 
 
        auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); 
        auxInitPosition(0,0,500,500); 
        auxInitWindow("sample1"); 
        glClearColor(0.0,0.0,0.0,0.0); 
        glClear(GL_COLOR_BUFFER_BIT); 
 
//����glEnable()����������ģʽ 
        glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&points[0][0][0]); 
        glEnable(GL_MAP2_VERTEX_3); 
 
        glMapGrid2f(20,0.0,1.0,20,0.0,1.0); 
 
        glEnable(GL_DEPTH_TEST); 
} 
 
void CALLBACK reshape(GLsizei w,GLsizei h) 
{ 
 
glViewport(0,0,w,h); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
 
if(w<=h) 
 glOrtho(-5.0,5.0,-5.0*(GLfloat)h/(GLfloat)w, 
         5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0); 
else 
  glOrtho(-5.0*(GLfloat)h/(GLfloat)w, 
         5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0,-5.0,5.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
} 
 
 
void CALLBACK display(void) 
{ 
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
  glColor3f(0.0,0.0,1.0); 
  glPushMatrix(); 
  glRotatef(35.0,1.0,1.0,1.0); 
//��ֱ�߶ε������������ṹ 
  glBegin(GL_LINE_STRIP); 
  int i,j; 
//��U V���������8������ߣ����Թ�������ṹ 
  for(j=0;j<=8;j++) 
  { 
         //��U������30��ֱ�߶����һ������ 
          glBegin(GL_LINE_STRIP); 
           for(i=0;i<=30;i++) 
            glEvalCoord2f((GLfloat)i/30.0,(GLfloat)j/8.0); 
          glEnd(); 
          
        //��V������30��ֱ�߶����һ������ 
          glBegin(GL_LINE_STRIP); 
           for(i=0;i<=30;i++) 
                   glEvalCoord2f((GLfloat)j/8.0,(GLfloat)i/30.0); 
          glEnd(); 
 } 
 
//�ò�ͬ����ɫ�ѿ��Ƶ���ʾ���� 
  glPointSize(4.0); 
  glBegin(GL_POINTS); 
  for(i=0;i<4;i++) 
  for(j=0;j<4;j++) 
  { 
      glColor3fv(color[i]); 
      glVertex3fv(&points[i][j][0]); 
  } 
  glEnd(); 
 
  glPopMatrix(); 
  glFlush(); 
} 
void main(void) 
{ 
    myinit(); 
     
    auxReshapeFunc(reshape); 
    auxMainLoop(display); 
} 
//end of sample 
/////////////////////////////////////////////////////// 
 
Ӧ���г�������������Ŀ�ܽṹ������ͽ����������Ļ��Ʒ����� 
 
void glEvalMesh2(GLenum mode,GLint p1,GLint p2,GLint q1,GLint q2); 
����glMapGrid2{fd}()���õ����Ӧ�õ��Ѿ����õ���������ϡ� 
mode������GL_POINT GL_LINE GL_FILL������˼�壬GL_FILL�������������� 
 
������һ���й��մ����BEZIER��������ӣ����������˻��Ʒ�����ͬ����ѧ 
��ʽ��ǰ�����һ��ģ��� 
/////////////////////////////////////////////////////// 
//sample.cpp 
#include "glos.h" 
#include <GL/gl.h> 
#include <GL/glaux.h> 
#include "windows.h" 
void myinit(void); 
void CALLBACK  display(void); 
void CALLBACK  reshape(GLsizei w,GLsizei h); 
 
GLfloat points[4][4][3]={ 
        {{-1.5,-1.5,2.0},{-0.5,-1.5,2.0}, 
        {0.5,-1.5,-1.0},{1.5,-1.5,2.0}}, 
        {{-1.5,-0.5,1.0},{-0.5,1.5,2.0}, 
        {0.5,0.5,1.0},{1.5,-0.5,-1.0}}, 
        {{-1.5,0.5,2.0},{-0.5,0.5,1.0}, 
        {0.5,0.5,3.0},{1.5,-1.5,1.5}}, 
        {{-1.5,1.5,-2.0},{-0.5,1.5,-2.0}, 
        {0.5,0.5,1.0},{1.5,1.5,-1.0}}}; 
GLfloat color[4][3]={ 
        {1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},{1.0,1.0,1.0}}; 
 
//��ʼ�����ա����ʵĹ�� 
void initlights(void) 
{ 
        GLfloat ambient[]={0.4,0.6,0.2,1.0}; 
        GLfloat position[]={0.0,1.0,3.0,1.0}; 
        GLfloat mat_diffuse[]={0.2,0.4,0.8,1.0}; 
        GLfloat mat_specular[]={1.0,1.0,1.0,1.0}; 
        GLfloat mat_shininess[]={80.0}; 
        glEnable(GL_LIGHTING); 
        glEnable(GL_LIGHT0); 
        glLightfv(GL_LIGHT0,GL_AMBIENT,ambient); 
        glLightfv(GL_LIGHT0,GL_POSITION,position); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); 
        glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); 
} 
 
void myinit(void) 
{ 
 
        auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); 
        auxInitPosition(0,0,500,500); 
        auxInitWindow("sample1"); 
        glClearColor(0.0,0.0,0.0,0.0); 
        glClear(GL_COLOR_BUFFER_BIT); 
 
        glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&points[0][0][0]); 
        glEnable(GL_MAP2_VERTEX_3); 
        glEnable(GL_AUTO_NORMAL); 
//      glEnable(GL_NORMALIZE); 
        glMapGrid2f(20,0.0,1.0,20,0.0,1.0); 
 
        glEnable(GL_DEPTH_TEST); 
//��ʼ�����ա����� 
        initlights(); 
//      glShadeModel(GL_FLAT); 
} 
 
void CALLBACK reshape(GLsizei w,GLsizei h) 
{ 
 
glViewport(0,0,w,h); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
 
if(w<=h) 
 glOrtho(-5.0,5.0,-5.0*(GLfloat)h/(GLfloat)w, 
         5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0); 
else 
  glOrtho(-5.0*(GLfloat)h/(GLfloat)w, 
         5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0,-5.0,5.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
} 
 
 
void CALLBACK display(void) 
{ 
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
  glColor3f(0.0,0.0,1.0); 
  glPushMatrix(); 
  glRotatef(35.0,1.0,1.0,1.0); 
 
//��ԭ�����Ļ��Ʋ���ע�͵����������������Ļ��Ʒ��� 
  glEvalMesh2(GL_FILL,0,20,0,20); 
  int i,j; 
/*  for(j=0;j<=8;j++) 
  { 
          glBegin(GL_LINE_STRIP); 
           for(i=0;i<=30;i++) 
            glEvalCoord2f((GLfloat)i/30.0,(GLfloat)j/8.0); 
          glEnd(); 
           
          glBegin(GL_LINE_STRIP); 
           for(i=0;i<=30;i++) 
                   glEvalCoord2f((GLfloat)j/8.0,(GLfloat)i/30.0); 
          glEnd(); 
 } 
*/ 
 
  glPointSize(4.0); 
  glBegin(GL_POINTS); 
  for(i=0;i<4;i++) 
  for(j=0;j<4;j++) 
  { 
      glColor3fv(color[i]); 
          glVertex3fv(&points[i][j][0]); 
  } 
  glEnd(); 
  glPopMatrix(); 
  glFlush(); 
 
 
} 
void main(void) 
{ 
        myinit(); 
     
    auxReshapeFunc(reshape); 
    auxMainLoop(display); 
} 
//end of sample 
//////////////////////////////////////////////////////////////// 
һ���������ʵ��������չ�ֳ����֡����Ƶ�IJ�ͬ�����Կ����������״ 
���Կ���OPENGL��ǿ���ܣ�ֻ�ú��ٵ�ԭ����Ͳ�����ʵ��3DЧ�� 
���Դ�ƪ�����ӽ�ģǰ�����һ������NURBS���棨�Ǿ���B�������棩�����ӣ� 
�����õ���һЩOPENGLʵ�ÿ��ṩ��ר�ź������е��¶������ڳ���������ע 
�ͣ�ע�͸����̵ĺ��壬���庯��IJ���������ϸ���������ֲᡣ 
/////////////////////////////////////////////////////////////// 
//sample.cpp 
#include "glos.h" 
#include <GL/gl.h> 
#include <GL/glaux.h> 
#include "windows.h" 
 
void myinit(void); 
void CALLBACK  display(void); 
void CALLBACK  reshape(GLsizei w,GLsizei h); 
 
//����һ����Ƶ�Ĵ洢�ռ� 
GLfloat points[4][4][3]; 
//����һ��ָ��NURBS��������ָ�� 
GLUnurbsObj *theNurb; 
 
//������ɿ��Ƶ�Ĺ�̣�ȡ��ע�͵���ԭ��ֱ�Ӹ�ֵ��ʽ��ɿ��Ƶ� 
void init_surface(void) 
{ 
        int u,v; 
        for(u=0;u<4;u++) 
        { 
                for(v=0;v<4;v++) 
                { 
                        points[u][v][0]=2.0*((GLfloat)u-1.5); 
                        points[u][v][1]=2.0*((GLfloat)v-1.5); 
                        if((u==1||u==2)&&(v==1||v==2)) 
                                points[u][v][2]=3.0; 
                else 
                        points[u][v][2]=-3.0; 
                } 
        } 
} 
/*                        
GLfloat points[4][4][3]={ 
        {{-1.5,-1.5,2.0},{-0.5,-1.5,4.0}, 
        {0.5,-1.5,3.0},{1.5,-1.5,2.0}}, 
        {{-1.5,-0.5,3.0},{-0.5,1.5,4.0}, 
        {0.5,0.5,2.0},{1.5,-0.5,-1.0}}, 
        {{-1.5,0.5,2.0},{-0.5,0.5,4.0}, 
        {0.5,0.5,5.0},{1.5,-1.5,1.5}}, 
        {{-1.5,1.5,-2.0},{-0.5,1.5,3.0}, 
        {0.5,0.5,1.0},{1.5,1.5,-1.0}}}; 
*/ 
GLfloat color[4][3]={ 
        {1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},{1.0,1.0,1.0}}; 
 
 
void initlights(void) 
{ 
        GLfloat ambient[]={0.4,0.6,0.2,1.0}; 
        GLfloat position[]={0.0,1.0,3.0,1.0}; 
        GLfloat mat_diffuse[]={0.2,0.4,0.8,1.0}; 
        GLfloat mat_specular[]={1.0,1.0,1.0,1.0}; 
        GLfloat mat_shininess[]={80.0}; 
        glEnable(GL_LIGHTING); 
        glEnable(GL_LIGHT0); 
        glLightfv(GL_LIGHT0,GL_AMBIENT,ambient); 
        glLightfv(GL_LIGHT0,GL_POSITION,position); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); 
        glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); 
//���ȳ�ʼ�����Ƶ� 
        init_surface(); 
//����һ��NURBS����Ķ��� 
        theNurb=gluNewNurbsRenderer(); 
//�޸Ĵ������������� 
        gluNurbsProperty(theNurb,GLU_SAMPLING_TOLERANCE,25.0); 
        gluNurbsProperty(theNurb,GLU_DISPLAY_MODE,GLU_FILL); 
} 
 
void myinit(void) 
{ 
 
        auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); 
        auxInitPosition(0,0,500,500); 
        auxInitWindow("sample1"); 
        glClearColor(0.0,0.0,0.0,0.0); 
        glClear(GL_COLOR_BUFFER_BIT); 
 
        glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&points[0][0][0]); 
        glEnable(GL_MAP2_VERTEX_3); 
        glEnable(GL_AUTO_NORMAL); 
        glEnable(GL_NORMALIZE); 
        glMapGrid2f(20,0.0,1.0,20,0.0,1.0); 
 
        glEnable(GL_DEPTH_TEST); 
        initlights(); 
//      glShadeModel(GL_FLAT); 
} 
 
void CALLBACK reshape(GLsizei w,GLsizei h) 
{ 
 
glViewport(0,0,w,h); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
 
if(w<=h) 
 glOrtho(-5.0,5.0,-5.0*(GLfloat)h/(GLfloat)w, 
         5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0); 
else 
  glOrtho(-5.0*(GLfloat)h/(GLfloat)w, 
         5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0,-5.0,5.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
} 
 
 
void CALLBACK display(void) 
{ 
//B�������棨NURBS���Ŀ������������Բ���ͼ��ѧ������鼮 
  GLfloat knots[8]={0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0}; 
 
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
  glColor3f(0.0,0.0,1.0); 
  glPushMatrix(); 
  glRotatef(35.0,1.0,1.0,1.0); 
  glRotatef(-60.0,1.0,0.0,0.0); 
  glScalef(0.5,0.5,0.5); 
 
//ע�͵�ԭ����������ƺ����֮���µ�NURBS������ƺ��� 
  //  glEvalMesh2(GL_FILL,0,20,0,20); 
//�����������ѧģ�ͣ�ȷ������״ 
  gluNurbsSurface(theNurb, 
          8,knots, 
          8,knots, 
          4*3, 
          3, 
          &points[0][0][0], 
          4,4, 
          GL_MAP2_VERTEX_3); 
//��������Ļ��ƣ��˽ṹ�������ڱ�׼��glBegin()...glEnd() 
  gluEndSurface(theNurb); 
 
  int i,j; 
  glPointSize(4.0); 
  glBegin(GL_POINTS); 
  for(i=0;i<4;i++) 
  for(j=0;j<4;j++) 
  { 
      glColor3fv(color[i]); 
          glVertex3fv(&points[i][j][0]); 
  } 
  glEnd(); 
  glPopMatrix(); 
  glFlush(); 
 
 
} 
void main(void) 
{ 
        myinit(); 
     
    auxReshapeFunc(reshape); 
    auxMainLoop(display); 
} 
//end of sample 
////////////////////////////////////////////////////////////////// 
���ˣ����ӽ�ģ���ڶ��䡣�´ν���������� 
 
-- 
�� ��Դ:��BBS ˮľ�廪վ bbs.net.tsinghua.edu.cn��[FROM: 166.111.74.90] 

BBSˮľ�廪վ�þ�����

�� ��Դ: �й�ƴ�BBSվ [bbs.ustc.edu.cn]
Technical Details
Message-ID: <980505.yWbVh$PBBS@bbs.ustc.edu.cn>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB
X-Google-Thread: fc86e,eeaa93a9a70e1144,start
X-Google-Attributes: gidfc86e,public
From: Ambi_A@bbs.ustc.edu.cn (����)
Subject: OPENGL(14)
Date: 1998/05/05
Message-ID: <980505.yWbVh$PBBS@bbs.ustc.edu.cn>
X-Deja-AN: 350434972
Organization: �й�ƴ�BBSվ
Newsgroups: cn.bbs.comp.program