我是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*/
答案 0 :(得分:1)
很抱歉,由于我没有足够的声誉,我无法发表评论。 我无法通过阅读找到代码中的错误,所以我很快就在OF中运行了它,你可以看到......
这里没问题......我在VS2012Express上运行OF 0.8 - Win7 i7 nVidia Quatro 4000.
编辑:也许这是编译器问题?我有一个无法编译的插件有这样的问题。但这只是一个疯狂的猜测... 编辑:我刚注意到安东尼回答了他自己的问题,当我终于弄明白为什么会发生这种情况。我还是不能添加评论,所以...... 事实是static
变量的值对于所有类的实例都是相同的。它有更多的东西,但通常,如果你在一个对象中更改静态变量(比如说static int width
),那么所有这些变量都会发生变化。
以下是它的样子:)
答案 1 :(得分:1)
在梳理代码并测试不同的东西之后,我找到了修复程序。我只是从static
和GFloat
数组中删除了GLint
。我仍然不明白为什么完全,但它有效。