发新话题
打印

学习汇报openGL

本主题由 admin_cn 于 7-12-2007 17:39 移动

学习汇报openGL

#include <gl\glaux.h>5 v6 f! {! H! t# o; [* [
#include <stdio.h>
( n( h$ l: \2 q9 m, I#include <stdlib.h>1 y  p4 j2 f9 F: i* \7 z
#include <string.h>
" h5 N4 D" e4 M0 ~! b#include <math.h>
/ O0 m1 i  z$ O  r#include "GL/glut.h"
" E/ \* _, k: U  J  A
/ ?6 \9 s0 }' T. h: ^. a4 }
1 n' L% `2 G4 @* N" x" ?6 tvoid Display();3 K$ x, L" c+ g5 I
void HandleVisibility(int visible);2 C4 A6 i. H$ r) A
void HandleIdle();" C, ^6 A* |/ I
void HandleReshape(int w,int h);9 ~8 Q- B$ E: x& r+ S- s  C* e3 X
void HandleKeyboard(unsigned char key,int x,int y);5 V" [, \- P) b( R: m" m: S$ ]
void CreateEnvironment();6 @+ Q( z) Z" x2 F" {8 B5 B
void MakeGeometry();5 K( [# ]/ I& \6 d: l. J" e0 M
void MakeLighting();
# m. o7 s4 t5 m: |5 uAUX_RGBImageRec *LoadBMP(char *Filename);
; x2 v( w3 j8 w" E# S  tint LoadGLTextures();
& U6 m* H) L! j* }5 s9 T
" L0 p8 y' A  J7 v5 vGLuint texture;
5 `; ~5 W4 ~* m+ H1 F% e# W  }7 z$ d7 o
GLfloat        xrot;// X Rotation
' R; ^# Z7 {6 I- q) w" {GLfloat        yrot;// Y Rotation
: u$ ~, `6 D3 L( _. T  mGLfloat        zrot;// Z Rotation
  u" l5 r) q; ?! C( }+ ], B
8 E& ^% Y! J! j7 ~5 k& l+ e; P# K3 uGLfloat        z=0.0f;
. _* u% c' m. @( N! v( ]2 [2 v9 F2 l6 j7 r6 t" O8 Z* T
int main(int argc,char **argv)
4 d0 Y: X& d3 z& r& R  ]2 p{
% w  g% N* e6 K2 {4 \0 @        // Initialisation GLUT
4 R$ a* G2 B- c        int mode = GLUT_RGB|GLUT_DOUBLE;
- V, V! G+ i3 v1 T( N' \        glutInitDisplayMode(mode);
9 ^) f7 Y8 A, n) h! c- Y4 y
; [9 X' r2 m9 y, P/ B        // Initialisation fenêtre
" P3 T' E" h9 X        glutInitWindowSize(300,300);
% D; s; s5 e8 n' R% E        glutInitWindowPosition(50,50);
+ d0 V. m% a' h0 a        glutCreateWindow("salut");0 o: b! y* U; D

$ s! n6 L  B) J& G* y3 C8 z        // Initialisation Handlers. i& d! s) _3 n2 V
        glutDisplayFunc(Display);
& J, N# ~/ `' ^' V3 ~        glutReshapeFunc(HandleReshape);0 N) z2 S5 d' g' x6 Y) v5 D
        glutKeyboardFunc(HandleKeyboard);
, \# {: a( x; Z6 Z9 C0 j        glutIdleFunc(HandleIdle);) x7 J' K  r+ q9 A7 H& H% t, K
  o" V) i4 N9 f" Y3 K
        // Initialisation contexte openGL
! V  B8 o. W6 @5 a        CreateEnvironment();* B* G  A. a# [$ F! K, q: t. b  ], Y

; c; Q7 R5 J  w        // Boucle principale1 a/ t1 Z/ L8 A/ N
        glutMainLoop();
$ n% ~$ |  A# z4 o8 ~% F9 L/ ]& g. J6 x4 t- V
        return(0);
6 [* b. A6 ?0 m6 o. {6 T1 ?}
' _7 U! O9 h6 O2 E2 o) ^
( L9 W( i" g' _$ b; Q2 i, a
+ y$ ~) w5 J  q5 C9 s0 Yvoid CreateEnvironment()
; K; s3 s$ n' l2 w" [& @- }1 p& z{        " b5 \" R7 ~% m" U8 n
        glClearColor(0.0,0.0,0.0,1.0);
! N' B. R6 |  M: p        glClearDepth(1.0);
1 \& C( E6 t6 ]        glEnable(GL_LIGHT0);" ~. [6 T0 y/ N# c3 C
         glEnable(GL_LIGHTING);
7 ]# q, I& Z9 E( i% i- g. O- f        glEnable(GL_DEPTH_TEST);: y; ]2 O. v0 ~* H
        glShadeModel(GL_SMOOTH);
) P& |3 i* r5 P3 ]6 `         glEnable(GL_NORMALIZE);- h$ k  I5 f4 @7 ?$ ]3 ^% h
        glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
; ]/ M  V7 y' u/ w3 |( O/ n4 L         glEnable(GL_COLOR_MATERIAL);
$ y1 c4 \& X8 \& `+ ~3 L        glEnable(GL_TEXTURE_2D);# l& y4 t5 |& I2 y1 `/ I3 ]3 ?8 i
        glDepthFunc(GL_LEQUAL);       
. m+ _/ B$ a" S* `3 E        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
# ?4 T5 Y! C$ q0 A# P$ _
& H1 m$ A0 O# M6 @+ K: M& `        glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
5 H2 v2 c8 @5 s- ^5 r4 b2 J( x! q' Q! p7 K+ j) }* n4 q  q3 f
        LoadGLTextures();! v  y) C2 C8 S6 I! j; _- K* L  I
}
% R' R( v) o$ t( |! E0 [  u- W2 m" B0 F
void HandleReshape(int w,int h)
4 W# @/ K, U7 s' f- B0 P{
: A& z3 ?) p5 {' B4 ]" s        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
# [* n1 j3 s2 i        glViewport(0,0,(GLsizei)w,(GLsizei)h);3 v1 M$ E/ d, @9 o' A: R4 K
}# z, ?& }  `% D) v* j, m2 A$ j
  l& r, C1 n) @# S/ G2 c  {' R. C
void HandleVisibility(int visible): ~: V& K' J. x5 C" ]; x1 V
{
* R" w0 D# k4 {% R% ]; s+ j. n        if (visible==GLUT_VISIBLE) glutIdleFunc(HandleIdle);/ Z, ]0 ]8 p* P2 H7 z0 H' \
        else glutIdleFunc(NULL);- l+ w5 x- @4 r
}. K. F, n! O6 `: e" \* l# F3 _

  b" r4 P) \, \) v- f' h* Avoid HandleIdle()
" H- C% K+ y( H7 j5 t( S2 x7 K5 a4 O{0 _* z% W+ [* |) `6 s
        glutPostRedisplay();
! j; E9 G4 a( d! {3 [) }}
1 ?# p( [8 u4 e, f4 A6 Z% f
5 `4 H/ ^" j( O9 `& Y1 R+ G: Mvoid HandleKeyboard(unsigned char key,int x, int y)/ t) g. h* \4 h- ]/ X! P, Q
{
+ N/ a$ _: R# P- p        switch(key){
; h' X. z, Y: l2 Z) P; k" K8 |                case 'q':case 'Q':
5 {( I, A3 H' F1 t' M- _                        exit(EXIT_SUCCESS);
, R# h% C: \) b: |! g                        break;
/ j. f3 S5 m! q' L, Q6 ~9 L$ o4 Z+ [9 ]+ Q5 r
                case 'e':case 'E':
- g, ~* R6 L; W( J/ Q8 J                        xrot-=0.2f;
6 ^. M, D, E+ f) d                        break;
; f4 |( c2 r  l! J0 E- ~8 V+ o/ ?: x- r6 r# S8 k
                case 'r':case 'R':" n$ O8 z, c$ |6 |% R( M
                        xrot+=0.2f;. f7 R8 `9 x" N5 g) s& K3 W$ g$ }2 \
                        break;/ H. ~: V/ n' J8 \

4 b( l2 ~% ]9 F# M' O                case 'c':case 'C':
  Q: C# M: {5 N7 U                        yrot-=0.2f;
6 Z2 {, |* N# e1 m* o$ Q: a  K3 D3 q                        break;        - y0 l) V5 e% B# O4 j8 j+ b

/ C, n% ?7 n& ?4 @                case 'v':case 'V':& f, j2 P9 z& K! U$ `
                        yrot+=0.2f;- y# j! \- K: u6 d
                        break;        # S/ D; Q: y( N" t% [% \1 d3 U

2 {# O* I" c% M, z                case 't':case 'T':: N. Z% R3 T9 ?4 N
                        zrot-=0.2f;& D* [1 V5 \4 g! p# o/ Q2 p: f
                        break;        0 J) o  o, }0 p# D4 O# ~
$ K& n, b: e6 F( v, a
                case 'y':case 'Y':
& c) e. ~  U. q& F                        zrot+=0.2f;
; n1 G  V( r* @4 Y' m- ^                        break;
$ w9 A1 `8 J/ N5 R0 \0 h0 S8 J  J) |6 x! I+ c/ P* D
                case 'f':case 'F':" R7 Y2 _" b& i( I- u& K4 @% i( \
                        z-=0.02f;
. C6 q5 Z5 s9 S: y( C3 N                        break;: T8 M: P( @: W: f; u! a+ Q; i6 f
! B" T4 a3 N5 F: j
                case 'a':case 'A':+ L% _- h- U( Z1 f5 e, g' a$ P6 h
                        z+=0.02f;
/ C2 x" J5 o5 E- b( Y! l; f+ Y1 k                        break;
6 @; W- |# c+ v& h( d5 F8 R$ S( {3 o. ^! u7 D
        break;" o3 p0 D7 T$ Z
        }
& K  b' E! L! t: r# f# U+ I6 }# S, Q
}6 w. Y( E; J  n+ Z3 `

  P0 c& f% f6 @8 t0 u6 x8 [void Display()
/ ^( L1 T2 \( v/ T1 D{) n: G7 @, @' O$ B) n
        / o2 h" M2 F% ~: S
        // Initialisation de la matrice de projection
6 x! `/ `5 P* A, G* j
, B' C: }9 K/ c* x, m, w5 S% x    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
/ ?2 P2 J% A; f% a    glMatrixMode(GL_PROJECTION);
4 X% O2 a8 K6 w- V0 t    glLoadIdentity();
" f6 ^' s2 E5 n1 f' b    gluPerspective (75, 1, 1, 300);
% |; h# A/ \$ ?! g8 |6 F+ f/ @
' H% D/ K! ^* t" G0 N" Q        // Initialisation de la caméra
+ q% R9 C, G6 O% @3 p    glMatrixMode(GL_MODELVIEW);& t8 Y" H+ l5 q/ H
    glLoadIdentity();
9 E- s6 v1 ^- H( o" a& d$ }) k    gluLookAt(3, 3, 3, 0, 0, 0, 0, 1, 0);' ]; P4 V# H6 V( Z( @4 O) w% S
: O/ s* H* X: F' t/ D
, ?% X/ ?* h7 ]) {
    //Rotate and Translate% a9 A' f' d3 }1 k9 S6 ~" s
        glTranslatef(0.0f,0.0f,z);1 s# x# f7 S3 `4 Z: f! N) A2 G: w) H

, q$ Y! A/ C! A. D$ s        glRotatef(xrot,1.0f,0.0f,0.0f);- r2 K. P" V& @8 ~/ u; O" P
        glRotatef(yrot,0.0f,1.0f,0.0f);, T$ B! o7 K) _6 \, b$ a
        glRotatef(zrot,0.0f,0.0f,1.0f);" g0 c- V. w) l% \: X

5 I! F6 J7 ^4 }" c        // Génération de la scène (lumière + géométrie)5 o; d6 ?! E' @3 x7 `8 l# ?5 ]$ x
        MakeLighting();
  ^" [& Z0 v5 k. ?+ C% V/ D        MakeGeometry();
& D( E- _( e; |( R
, r3 y8 w6 r8 J: k        // Swap des buffers
# y' r* o1 b, t2 e! f        glutSwapBuffers();8 r+ @% A- _( L
5 `4 y9 m8 S( p
}
: O+ v# n6 a7 F6 c# j+ w# z
7 c  s2 @: {6 A! H* l0 L9 ~void MakeGeometry()/ m+ U2 ?' N9 p$ D' F
{
& _4 L# U( [/ b+ u4 ~8 `6 R        glBindTexture(GL_TEXTURE_2D, texture);) t4 O& B7 L5 h5 H3 r
                glBegin(GL_QUADS);+ n; F3 l: |! j0 L" i
                        // Surface en face
# o- ]2 e2 K* s- w$ e3 ^                        glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);& N# I( F% u0 x8 C# q  N
                        glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);9 e* v* A: e3 }; O
                        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);; w! r! M$ B- v$ L3 g
                        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
$ g  q. m8 T. T# A" j                        // Surface en derière
  @" L+ H& ~9 t. |; k                        glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);6 S1 F3 F. ^; z& ]7 e$ g5 S
                        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
! F2 F+ z3 Y5 K/ F, p. P5 A                        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
! |" A( I3 J: A& z                        glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
, l8 \* q" }( M, f8 h/ C                        // Surface en tête
8 Z* B, [8 V8 |: n) X; A: _7 |                        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);1 \+ l, @' M1 I
                        glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
8 H: y3 x* F( ]                        glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f);; o! j, A( N0 R" m0 t# h
                        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
  f1 Y& v) y. d8 N                        // Surface en bas
; k, a% [9 l$ a0 k4 f" E, M1 _                        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);2 }2 s+ p' ^* n; ~( v  ]; I8 K0 c
                        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);# J. _3 W% [! y. Q
                        glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
% ^/ C) T8 B9 \3 @                        glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
9 s5 m5 j0 ^: I) I  s4 {                        // Surface à droite
$ O: y! u# O# {. _0 C                        glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
" n# N: x0 P) f% p                        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);' H/ L# c6 Q& |& G6 _3 @& U! }2 M! O5 w
                        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
  }4 J7 e3 K5 [- M, F                        glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
8 e; `& O1 A2 b/ `                        // Surface à gauche5 ?& E% x) ~+ v- g4 p5 ~
                        glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
0 q! x8 X% M: K! l                        glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
% {( E- o" i, a4 Z" o                        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);& X) V' _4 E5 _8 H& U
                        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
" n, M7 C4 y+ U1 g9 p                glEnd();# F% G! Y) O& B' K$ T( F" L
8 L# r, O/ s2 ]" c" v9 V6 \& ^/ _
}
9 w+ ~2 o5 G1 l1 N& n4 {1 ]
# ^9 e$ |" W+ @! k' {3 [* rvoid MakeLighting()
$ W$ K4 z3 _3 t2 F: N0 c6 g7 K! m! P{
2 N9 o9 ]1 l0 s) r! m2 [, G- i$ R        // Désactiver toutes les lumières% v  J6 [! E. V' M; {
        glDisable(GL_LIGHTING);  R9 A# @9 Q: F& B3 U# L5 G( _
        glDisable(GL_LIGHT0);: X) d4 k8 t, c6 b9 \) ]

: @) b. v5 i/ u5 ?# w; |+ r# j        // Initialisation des paramètres
9 o0 N' L3 U, T9 y    GLfloat LightAmbient[]={ 0.5f, 0.5f, 0.5f, 1.0f };
. u* Y1 r- t- e$ o- S2 e    GLfloat LightDiffuse[]={ 1.0f, 1.0f, 1.0f, 1.0f };  H5 Y, G) N: S% y% p  P1 W( b4 c
    GLfloat LightPosition[]={ 0.0f, 0.0f, 2.0f, 1.0f };$ V- v9 }0 w& {4 k* L
$ \1 F* N1 u* U: e* `" m. \# H
        // Initialisation de la position, ambient, diffuse et specular et activation d'une lumière$ P; w8 I! p' M  c" Z
        glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE);# i" T' `- L+ u' i* p7 v# [$ W8 _/ E
        glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_FALSE);$ O. E6 W7 y, k# H
        glLightfv( GL_LIGHT0, GL_AMBIENT, LightAmbient);5 B( R* c+ F9 i, K/ u& W0 e) A
        glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
% M+ `9 H( r2 Q& I% u7 a% d: d    glLightfv( GL_LIGHT0, GL_POSITION, LightPosition);
3 Y, H+ u+ l( l. l- I2 ^& n' Z6 }% g% F+ O' w
        //spot
+ M- p, e( c* f7 ^+ z/ ?        GLfloat spot[]={60.0};% O/ N1 Q4 F! Z! a/ |
        glLightfv(GL_LIGHT0,GL_SPOT_CUTOFF, spot);
1 j: {3 \3 J7 G4 b2 o        GLfloat spot_direction[] = {0.0f,-5.0f,0.0f};
# o; p% t! ^' d% [    glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION, spot_direction);. W3 P: L2 Y# ]! L$ r
# d" ]' p6 R& t6 s6 q
        // Modèle d'éclairage Gouraud
' M" y( A4 f7 d2 ]9 g" J        glShadeModel(GL_SMOOTH);
9 O0 ^" O. J$ c6 j3 H. r$ g' F! Z! }+ V' x
        // Activer la lumière$ s2 w- {$ A; z/ [/ p6 d
        glEnable(GL_LIGHTING);
2 A, R: {9 p0 J  e% Q/ O        glEnable(GL_LIGHT0);% _0 u& ^4 q2 ]. p
        " i2 z5 {& j3 k  s
}
" B9 s; A! }  s) l6 x. F$ u
; k" y# K; v7 Q: j8 W5 zAUX_RGBImageRec *LoadBMP(char *Filename)
$ u1 G( F" P9 r1 R# W{6 d- G6 k7 e! q
        FILE *fp;: _0 D5 N- x  g, L0 O, ?7 x

1 F& |& P0 |# S) L0 V, e  E        if (fp=fopen(Filename,"r"))' R  j( g6 k9 J& H9 ]/ W( L
        {  S- I, ~0 w+ u6 c$ b
                fclose(fp);
2 b& N: g; c3 _* v                return auxDIBImageLoad(Filename);
% V3 Q2 H1 f. N  W% q) a# q        }& x7 t  O9 [. l
8 j$ I5 k) F$ _9 c, r
        return NULL;
/ v: Y2 F7 |" H* _4 J}
! Q. x. n( `6 |# i9 ?
5 B) A" e# d7 A2 C9 B$ {int LoadGLTextures(). u9 V+ w' O. W( {/ J0 l2 A& L' h: Z
{! ]  B& [- B# y& [: T" j
        // Create Storage Space For The Texture
# [" Q8 S& `- n        AUX_RGBImageRec *TextureImage;
" \2 c/ k; V$ e2 U3 ^
2 d9 |! Z: h! {$ ^# G; Q' I        // Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
+ J% y8 y9 h- `% J. U$ f6 R& a3 H        if (TextureImage=LoadBMP("Crate.bmp"))
8 |0 M$ H$ M3 C* U. ^        {
0 `1 O# a+ ]" ~7 b, f5 j6 {" w                . p3 A& E$ F2 Q! w# i
                // Générer l'espace nécessaire au stockage d'une texture
6 i5 x( Z; f' y+ ^9 j                  glGenTextures(1,&texture);
8 a, p8 T2 M6 e' z- S                // Sélection de la texture + initialisation des paramètres de rendu# n9 g1 h0 T" e9 p& M: C& T! L3 J1 T
                glBindTexture(GL_TEXTURE_2D,texture);+ X7 i/ y4 S  V/ Z
( q3 b& g$ v: @& [9 J
                glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
3 M$ M/ ^' n+ g7 ^2 R* t' R4 u3 ?                glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);1 @' `% X4 f) t& ]$ f! L
                glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_REPEAT);& N- ~( B$ ]5 V6 r
                glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_REPEAT);
6 F1 W- z+ i  U" W3 y" u5 k% \                glTexEnvi(GL_TEXTURE_2D,GL_TEXTURE_ENV_MODE,GL_MODULATE);
8 L8 P! c" x. X' w' |" {               
6 H2 k3 q- C* Y5 v5 v/ R( e: ?                // Génération de la texture
* G: J* Y' }: f4 {' a                glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,TextureImage->sizeX,TextureImage->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,TextureImage->data);9 i1 f% [1 z7 U5 ~

, z# b4 ?4 g1 i! C; j                // Libération de la mémoire
% A9 i0 W8 x# E3 r+ ^2 \" C. H% M                free(TextureImage->data);4 i+ H. f1 W8 y  r6 A
                return(true);
$ E. d9 w& _& S. b        }
3 b( U& \* e* l& q7 g        return(false);$ q# M' J+ E9 K7 ~
}

TOP

哦,你们不用oo写么?
eating code

TOP

高科技啊,丢丢真厉害。

TOP

引用:
原帖由 lu.ming 于 10-12-2007 14:21 发表   N, t: Z; H. }8 E$ F1 y
哦,你们不用oo写么?
- L$ j5 V2 Q8 c& V1 `2 H$ F% o$ a+ U1 [! s
我们用c++, oo是什么呀?

TOP

回复 4楼 的帖子

object oriented 面对对象
eating code

TOP

发新话题

走吧 - zobba.net - 清除 Cookies - 联系我们 - Archiver - WAP

Processed in 0.195278 second(s), 8 queries, Gzip enabled.

当前时区 GMT+2, 现在时间是 21-11-2008 05:29

07f43752239e00d7baae3fcab05357e9