将Opengl模型加载到容器中,并一个接一个地调用它们
Loading Opengl models into a container and calling them one after the other
我是编程新手,我想为OpenGL模型编写条件语句,这样当我单击按钮时,它会将三角形模型加载到stl向量容器中。当我再次点击同一个按钮时,它会在容器中加载另一个模型,比如Quad,如果再点击一个按钮,它会加载更多的模型,比如Cube、Toroid等等。。。。我还将包含一个撤消按钮来删除最后加载的模型。
有人能指导我写这样的条件声明吗?关于如何在每次点击按钮时将大约4个模型加载到STL矢量容器中,以及撤消加载
class Shapes {
public:
Shapes(){}
~Shapes(){}
virtual void draw()
{
std::cout << "Base function called" << std::endl;
}
};
class Models : public Shapes
{
public: Models()
{
}
~Models() {}
virtual void draw()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-1.5f, 0.0f, -6.0f);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f); // Red color
glVertex3f( 0.0f, 1.0f, 0.0f); // Top
glColor3f(0.0f, 1.0f, 0.0f); // Green color
glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
glColor3f(0.0f, 0.0f, 1.0f); // Blue color
glVertex3f( 1.0f, -1.0f, 0.0f); // Bottom Right
glEnd(); // End drawing the triangle
}
};
Draw_All_models{
std::vector<Shapes*> myObjects;
myObjects.push_back(new Triangle());
myObjects.push_back(new Quad());
//more models...
void RenderScene()
{
std::vector<Shapes*>::iterator it;
for(it = myObjects.begin() ; it != myObjects.end; ++it) (*it)->draw();
}
}
首先要理解的是,OpenGL不维护场景或模型。它所做的只是根据你的要求在屏幕上画出漂亮的小点、线或三角形。一旦你在心理上消化了这些,事情就会变得显而易见:
存储一个列表,每个元素在其中对要绘制的内容进行编码。然后,您需要一些方法来遍历列表(或数组),并将每个元素分派到正确的函数(也是由您编写的)中,以根据元素的数据绘制几何图形。
例如,在C++中,您可能有一些基类Model
,从中派生类Box
、Sphere
、Torus
等等。Model
定义了一个虚拟方法draw
。然后制作一个std::list<Model*> models
,可以通过for(std::list<Model*> I = models.begin(); I != models.end(); I++){(*I)->draw();}
进行迭代
然后,被覆盖的虚拟draw
方法负责正确地渲染每种模型。
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 构造函数正在调用一个使用当前类类型的函数
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 在另一个线程中调用luaL_error会引发qWarning
- 如何在qt中从另一个类调用函数
- 检查哪个对象调用了另一个对象的对象方法
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 我有一个调用ID3D11DeviceContext::CopySubresourceRegion的循环.我怎么能强制等待
- 当另一个调用 lambda 使用默认捕获时,lambda 的闭包可能会被破坏吗?
- 在C++中嵌入Python:在Python脚本中导入模块在一个函数调用过程中有效,但在另一个调用过程中无效
- 如何在一个调用中释放多个互斥对象
- 我希望计时器只在上一个调用返回或完成执行时调用代码
- 定义一个调用其他函数的内联函数是否有意义
- 我如何测试一个调用是在谷歌测试延迟后使用嘲讽框架进行的
- 我想创建一个调用函数的源文件,而不必创建对象
- 是否有可能制作一个调用jdbc的Java JNI
- 如果您有一个调用其他内部函数的类接口函数
- 打开文件来自一个调用请求在黑莓10级联
- 创建一个调用另一个可执行文件的可执行文件
- 什么是崩溃我的应用程序的异常,给定一个调用堆栈与UnhandledExceptionFilter