tutorial.cpp里面要放什么
时间: 2024-10-24 22:15:11 浏览: 13
Duilib Tutorial.zip
在 `tutorial.cpp` 文件中,你需要实现本教程的主要功能,包括创建一个三角形并使用顶点着色器和片段着色器将其渲染到屏幕上。以下是该文件的内容概述:
### 主要任务
1. **创建一个新的静态方法 `GenerateTriangle`**:这个方法将生成一个带有顶点数据和颜色数据的三角形网格,并将其缓冲到 GPU 中。
2. **编写顶点着色器 `BasicVertex.glsl` 和片段着色器 `ColourFragment.glsl`**:这两个着色器将处理顶点位置和颜色,并最终输出到屏幕上。
3. **创建 `Renderer` 类**:这个类将管理整个渲染过程,包括初始化窗口、加载着色器、绘制三角形等。
### 具体步骤
#### 1. 创建 `GenerateTriangle` 方法
在 `Mesh` 类中添加以下代码:
```cpp
// 在 Mesh.h 中添加方法声明
public:
static Mesh* GenerateTriangle();
// 在 Mesh.cpp 中添加方法定义
Mesh* Mesh::GenerateTriangle() {
Mesh* m = new Mesh();
m->numVertices = 3;
m->vertices = new Vector3[m->numVertices];
m->vertices[0] = Vector3(0.0f, 0.5f, 0.0f);
m->vertices[1] = Vector3(0.5f, -0.5f, 0.0f);
m->vertices[2] = Vector3(-0.5f, -0.5f, 0.0f);
m->colours = new Vector4[m->numVertices];
m->colours[0] = Vector4(1.0f, 0.0f, 0.0f, 1.0f); // Red
m->colours[1] = Vector4(0.0f, 1.0f, 0.0f, 1.0f); // Green
m->colours[2] = Vector4(0.0f, 0.0f, 1.0f, 1.0f); // Blue
m->BufferData();
return m;
}
```
#### 2. 编写顶点着色器 `BasicVertex.glsl`
在 `../Shaders/` 目录下创建 `BasicVertex.glsl` 文件,内容如下:
```glsl
#version 330 core
in vec3 position;
in vec4 colour;
out Vertex {
vec4 colour;
} OUT;
void main(void) {
gl_Position = vec4(position, 1.0);
OUT.colour = colour;
}
```
#### 3. 编写片段着色器 `ColourFragment.glsl`
在 `../Shaders/` 目录下创建 `ColourFragment.glsl` 文件,内容如下:
```glsl
#version 330 core
in Vertex {
vec4 colour;
} IN;
out vec4 fragColour;
void main(void) {
fragColour = IN.colour;
}
```
#### 4. 创建 `Renderer` 类
在 `Renderer.h` 中添加以下内容:
```cpp
#pragma once
#include "../nclgl/OGLRenderer.h"
class Renderer : public OGLRenderer {
public:
Renderer(Window& parent);
virtual ~Renderer(void);
virtual void RenderScene();
protected:
Mesh* triangle;
Shader* basicShader;
};
```
在 `Renderer.cpp` 中添加以下内容:
```cpp
#include "Renderer.h"
Renderer::Renderer(Window& parent) : OGLRenderer(parent) {
triangle = Mesh::GenerateTriangle();
basicShader = new Shader("basicVertex.glsl", "colourFragment.glsl");
if (!basicShader->LoadSuccess()) {
return;
}
init = true;
}
Renderer::~Renderer(void) {
delete triangle;
delete basicShader;
}
void Renderer::RenderScene() {
glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
BindShader(basicShader);
triangle->Draw();
}
```
#### 5. 主函数
在 `main.cpp` 中添加以下内容:
```cpp
#include "../../NCLGL/window.h"
#include "Renderer.h"
int main() {
Window w("My First OpenGL Triangle!", 800, 600, false);
if (!w.HasInitialised()) {
return -1;
}
Renderer renderer(w);
if (!renderer.HasInitialised()) {
return -1;
}
while (w.UpdateWindow() && !Window::GetKeyboard()->KeyDown(KEYBOARD_ESCAPE)) {
renderer.RenderScene();
renderer.SwapBuffers();
}
return 0;
}
```
以上是 `tutorial.cpp` 文件的主要内容。通过这些步骤,你将能够成功地创建一个简单的 OpenGL 应用程序,显示一个彩色的三角形。希望这对你有帮助!如果有任何问题,请随时提问。
阅读全文