Magnum 示例项目教程
1. 项目的目录结构及介绍
Magnum 示例项目的目录结构如下:
magnum-examples/
├── CMakeLists.txt
├── README.md
├── src/
│ ├── TriangleExample/
│ ├── ViewerExample/
│ ├── WebXRExample/
│ └── ...
└── ...
目录结构介绍
CMakeLists.txt
: 项目的 CMake 配置文件,用于构建项目。README.md
: 项目的说明文档,包含项目的基本信息和使用指南。src/
: 包含所有示例代码的源文件目录。TriangleExample/
: 展示基本三角形渲染的示例。ViewerExample/
: 展示场景查看器的示例。WebXRExample/
: 展示 WebXR 功能的示例。...
: 其他示例代码。
2. 项目的启动文件介绍
每个示例项目都有一个主要的启动文件,通常命名为 main.cpp
。以下是一些示例的启动文件介绍:
TriangleExample
// src/TriangleExample/main.cpp
#include <Magnum/Platform/Sdl2Application.h>
#include <Magnum/GL/Buffer.h>
#include <Magnum/GL/DefaultFramebuffer.h>
#include <Magnum/GL/Mesh.h>
#include <Magnum/GL/Renderer.h>
#include <Magnum/Math/Color.h>
#include <Magnum/Shaders/VertexColor.h>
using namespace Magnum;
class TriangleExample: public Platform::Sdl2Application {
public:
explicit TriangleExample(const Arguments& arguments);
private:
void drawEvent() override;
GL::Mesh _mesh;
Shaders::VertexColor2D _shader;
};
TriangleExample::TriangleExample(const Arguments& arguments): Platform::Sdl2Application(arguments) {
struct Vertex {
Vector2 position;
Color3 color;
};
const Vertex data[] = {
{{-0.5f, -0.5f}, 0xff0000_rgbf},
{{ 0.5f, -0.5f}, 0x00ff00_rgbf},
{{ 0.0f, 0.5f}, 0x0000ff_rgbf}
};
_mesh.setCount(Containers::arraySize(data))
.addVertexBuffer(GL::Buffer{data}, 0,
Shaders::VertexColor2D::Position{},
Shaders::VertexColor2D::Color3{});
}
void TriangleExample::drawEvent() {
GL::defaultFramebuffer.clear(GL::FramebufferClear::Color);
_shader.draw(_mesh);
swapBuffers();
}
MAGNUM_APPLICATION_MAIN(TriangleExample)
ViewerExample
// src/ViewerExample/main.cpp
#include <Magnum/Platform/Sdl2Application.h>
#include <Magnum/Trade/AbstractImporter.h>
#include <Magnum/Trade/ImageData.h>
#include <Magnum/GL/DefaultFramebuffer.h>
#include <Magnum/GL/Mesh.h>
#include <Magnum/GL/Renderer.h>
#include <Magnum/Math/Color.h>
#include <Magnum/Shaders/Phong.h>
using namespace Magnum;
class ViewerExample: public Platform::Sdl2Application {
public:
explicit ViewerExample(const Arguments& arguments);
private:
void drawEvent() override;
GL::Mesh _mesh;
Shaders::Phong _shader;
};
ViewerExample::ViewerExample(const Arguments& arguments): Platform::Sdl2Application(arguments) {
// 加载模型和纹理
...
}
void ViewerExample::drawEvent() {
GL::defaultFramebuffer.clear(GL::FramebufferClear::Color|GL::FramebufferClear::Depth);
_shader.draw(_mesh);
swapBuffers();
}
MAGNUM_APPLICATION_MAIN(ViewerExample)
3. 项目的配置文件介绍
Magnum 示例