2010-01-15 3 views
2

Ok,Essayer un minuscule winy classes 3D pour iPhone

J'essaie de gagner du temps en créant des classes génériques pour dessiner des objets dans l'espace 3D. J'ai créé une classe Object3D avec les propriétés x, y et z.

thumbnail3D est un "fils" d'Object3D utilisant l'héritage. Vertex3D est une structure avec un GLfloat pour chaque coord.

Le problème est quand je tente de compiler la méthode initWithPosition :(Vertex3D *) sommet, et l'erreur est:

Demande de membre « x » dans quelque chose de structurer ou de syndicat. Demande de membre 'y' dans quelque chose qui ne soit pas une structure ou une union. Demande de membre 'z' dans quelque chose de non structure ou union.

Mais, la structure est sur l'importation ...

#import <UIKit/UIKit.h> 
#import <OpenGLES/ES2/gl.h> 

@interface Object3D : NSObject 
{ 
    GLfloat x; 
    GLfloat y; 
    GLfloat z; 
} 

@property GLfloat x; 
@property GLfloat y; 
@property GLfloat z; 

-(void) render; 

@end 

Le rendu est encore Hardcoded

#import "Thumbnail3D.h" 
#import "ConstantsAndMacros.h" 
#import "OpenGLCommon.h" 

@implementation Thumbnail3D 

@synthesize width; 
@synthesize height; 

-(void)render 
{ 
    Triangle3D triangle[2]; 
    triangle[0].v1 = Vertex3DMake(0.0, 1.0, -3.0); 
    triangle[0].v2 = Vertex3DMake(1.0, 0.0, -3.0); 
    triangle[0].v3 = Vertex3DMake(-1.0, 0.0, -3.0); 
    triangle[1].v1 = Vertex3DMake(-1.0, 0.0, -3.0); 
    triangle[1].v2 = Vertex3DMake(1.0, 0.0, -3.0); 
    triangle[1].v3 = Vertex3DMake(0.0, -1.0, -3.0); 

    glLoadIdentity(); 
    glClearColor(0.7, 0.7, 0.7, 1.0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glColor4f(1.0, 0.0, 0.0, 1.0); 
    glVertexPointer(3, GL_FLOAT, 0, &triangle); 
    glDrawArrays(GL_TRIANGLES, 0, 18); 
    glDisableClientState(GL_VERTEX_ARRAY); 
} 

-(void)initWithPosition:(Vertex3D *)vertex 
{ 
    x = vertex.x; 
    y = vertex.y; 
    z = vertex.z; 
} 

@end 
+0

Eh bien, d'une part j'aime ça moi-même parce que je pense que c'est le moyen le plus rapide d'apprendre mais d'autre part, c'est peut-être un bon petit moteur là-bas Je peux utiliser;) –

+1

L'exemple de code n'est pas clair. Thumbnail3D est-il une sous-classe de Object3D ou Vertex3D? Qu'est-ce que Vertex3D? – TechZen

+0

thumbnail3D est un "fils" d'Object3D utilisant l'héritage. Vertex3D est une structure avec un GLfloat pour chaque coord. –

Répondre

3

Quand je lis cette partie

Vertex3D est un struct avec un GLfloat pour chaque coord.

Je pense que vous devriez écrire

-(void)initWithPosition:(Vertex3D *)vertex 
{ 
    x = vertex->x; 
    y = vertex->y; 
    z = vertex->z; 
} 

...comme sommet est alors un vieux pointeur vers un struct struct

+0

Oui, un 'Vertex3d * 'n'est en fait pas une structure ou une union - c'est un pointeur. – Chuck

1

Voulez-vous dire passer Object3D dans la fonction init?

Je ne sais pas ce que Vertex3D est ..

Ou, est-ce censé être la mise en œuvre de Object3D? Dans ce cas, vous devez avoir

@implementation Object3D 

au début.

Et vous devriez probablement

@synthesize x 
@synthesize y 
@synthesize z 

au lieu de la largeur, la hauteur ..

0

L'erreur ...

Demande de membre 'x' dans quelque chose pas la structure ou l'union .

... signifie que quelque chose s'est mal passé dans la définition d'une structure, d'une union ou d'une classe. Soit (1) la structure Vertex3D n'a pas été définie correctement, soit (2) la définition n'a pas été incluse correctement dans la classe Thumbnail3D.