Создание нескольких экземпляров объекта с помощью C ++ и Openframeworks

0

Я новичок в Openframeworks и C++, но не в программировании вообще (PHP и Objective-C). Я создал класс, который рисует куб, где высота, ширина и глубина являются переменными. Я пытаюсь создать 3 версии указанного класса, каждый из которых имеет разные размеры.

Однако для каждого экземпляра используются первые измерения объекта. Я попытался переключить порядок рисования, и независимо от того, что нарисовано первым, используется для всех. Кроме того, я выставляю размеры на консоль и отправляются правильные размеры, но только первая версия рисуется.

cube.h

#ifndef _CUBE
#define _CUBE

#include "ofMain.h"

class cube
{
public:

void update();
void draw();

cube(float _w, float _h, float _d);

float w;
float h;
float d;

ofMesh mesh;
ofVbo myVbo;


private:
};

#endif

cube.cpp

#include "cube.h"

cube::cube(float _w, float _h, float _d)
{
w = _w;
h = _h;
d = _d;

static GLfloat vdata[8][3] = {
    {-w, -h, -d}, {-w, h, -d},
    {w, h, -d}, {w, -h, -d},
    {-w, -h, d}, {w, -h, d},
    {-w, h, d}, {w, h, d}
};

static GLint indices[6][4] = {
    {3, 2, 1, 0},
    {3, 5, 4, 0},
    {3, 5, 7, 2},
    {0, 4, 6, 1},
    {1, 2, 7, 6},
    {5, 4, 6, 7}
};

ofColor color(ofRandom(255),ofRandom(255),ofRandom(255));
float hue = 254.f;

for (int i=0; i<8; ++i)
{
    mesh.addVertex(ofVec3f( vdata[i][0], vdata[i][1], vdata[i][2] ));
    mesh.addColor(color);
    color.setHue(hue);
    hue -= 20.f;

    for (int i=0; i<6; ++i)
    {
        mesh.addIndex(indices[i][0]);
        mesh.addIndex(indices[i][1]);
        mesh.addIndex(indices[i][2]);
        mesh.addIndex(indices[i][3]);
    }
}

myVbo.setMesh(mesh, GL_STATIC_DRAW);
}

void cube::draw()
{
    myVbo.drawElements(GL_QUADS, 24);
}

void cube::update()
{

}

testApp.h

#pragma once

#include "ofMain.h"
#include "cube.h"

class testApp : public ofBaseApp{
public:
void setup();
void update();
void draw();

ofEasyCam camera;
cube *cube1;
cube *cube2;
cube *cube3;

void keyPressed(int key);
void keyReleased(int key);
void mouseMoved(int x, int y);
void mouseDragged(int x, int y, int button);
void mousePressed(int x, int y, int button);
void mouseReleased(int x, int y, int button);
void windowResized(int w, int h);
void dragEvent(ofDragInfo dragInfo);
void gotMessage(ofMessage msg);
};

testApp.cpp

#include "testApp.h"

//--------------------------------------------------------------
void testApp::setup()
{
glEnable(GL_DEPTH_TEST);
ofBackground(33, 33, 33);

cube1 = new cube(50, 100, 25);
cube2 = new cube(300, 50, 80);
cube3 = new cube(250, 160, 30);
}

//--------------------------------------------------------------
void testApp::update()
{

}

//--------------------------------------------------------------
void testApp::draw()
{
camera.begin();

cube1->draw();

ofPushMatrix();
ofTranslate(40, 60);
cube2->draw();
ofPopMatrix();

ofPushMatrix();
ofTranslate(80, 100);
cube3->draw();
ofPopMatrix();
}

/*other code*/
Теги:
oop
openframeworks

2 ответа

1
Лучший ответ

После расчесывания кода и тестирования других вещей я нашел исправление. Я просто уронил static из GFloat и GLint. Я до сих пор не понимаю, почему, но это сработало.

1

Извините, я не могу оставлять комментарии, поскольку у меня недостаточно репутации. Я не смог найти ошибку в коде, читая, поэтому я быстро дал ей пробег в OF и, как вы можете видеть... Изображение 174551

здесь нет проблем... Я бегу от 0.8 на VS2012Express - Win7 i7 nVidia Quatro 4000.

EDIT: может быть, это проблема с компилятором? У меня была такая проблема с аддонами, которые даже не могли компилироваться. Но это просто дикая догадка...

EDIT: Я только заметил, что антон ответил на свой вопрос, когда я наконец понял, почему это происходит. Я все еще не могу добавить комментарии, поэтому... Вещь в том, что значения static переменных одинаковы для всех экземпляров класса. Для этого есть больше вещей, но, как правило, если вы изменяете статическую переменную (пусть говорят, static int width) в одном объекте, во всех них будет происходить изменение.

И вот как это должно выглядеть :)

Изображение 174551

  • 0
    Я хотел бы, чтобы каждый куб был разного размера. 50x100x25, 300x50x80 и 250x160x30 соответственно. Тем не менее, они все 50x100x25.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню