🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: cn.bbs.comp.program
1 messages
1 total messages Started by ���� Tue, 05 May 1998 00:00
OPENGL(14)
#975
Author: ����
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]
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads