Попробовать крошечные выигрышные 3D-классы для iPhone - PullRequest
2 голосов
/ 15 января 2010

Хорошо,

Я пытаюсь сэкономить время на создании общих классов для рисования объектов в трехмерном пространстве.

Я создал класс Object3D со свойствами x, y и z.

thumbnail3D - это «сын» Object3D, использующий наследование. Vertex3D - это структура с GLfloat для каждой координаты.

Проблема в том, когда я пытаюсь скомпилировать метод initWithPosition :( Vertex3D *) vertex, и ошибка:

Запрос на член 'x' в чем-то, что не является структурой или объединением. Запрос на член 'y' во что-то не структура или объединение. Запрос на член 'z' во что-то, не являющееся структурой или объединением.

Но, структура находится на импорте ...

#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

Визуализация все еще жестко закодирована

#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

Ответы [ 3 ]

3 голосов
/ 16 января 2010

Когда я читаю эту часть

Vertex3D - это структура с GLfloat для каждой координаты.

Я думаю, вы должны написать

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

... так как вершина является простым указателем на структуру C

1 голос
/ 15 января 2010

Вы хотите передать Object3D в функцию init?

Я не знаю, что такое Vertex3D ..

Или это должна быть реализация для Object3D? В этом случае вам нужно иметь

@implementation Object3D

в начале.

А тебе наверное стоит

@synthesize x
@synthesize y
@synthesize z

вместо ширины, высоты ..

0 голосов
/ 16 января 2010

Ошибка ...

Запрос на член 'x' в чем-то не структура или объединение.

... означает, что что-то пошло не так в определении структуры, союза или класса. Либо (1) структура Vertex3D не была определена правильно, либо (2) определение не было правильно включено в класс Thumbnail3D.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...