这里面的代码组合起来是否可以正常运行
时间: 2024-10-22 12:23:36 浏览: 21
根据提供的文档内容,这些代码片段确实可以组合成一个完整的程序,并且能够正常运行以显示一个彩色三角形。以下是关键点和步骤,确保整个程序可以顺利执行:
### 关键类和方法
1. **Mesh 类**:
- `GenerateTriangle` 方法生成一个带有顶点位置和颜色数据的三角形。
- `BufferData` 方法将顶点数据从 CPU 内存传输到 GPU 内存。
- `Draw` 方法绘制网格。
2. **Shader 类**:
- `LoadShaderFile` 方法加载着色器文件。
- `GenerateShaderObject` 方法编译着色器对象。
- `LinkProgram` 方法链接着色器程序。
- `SetDefaultAttributes` 方法设置默认属性。
3. **Renderer 类**:
- 构造函数中初始化三角形和着色器。
- `RenderScene` 方法清除屏幕并绘制三角形。
### 主要文件结构
1. **头文件 (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;
};
```
2. **实现文件 (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();
}
```
3. **主文件 (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;
}
```
### 着色器文件
1. **基本顶点着色器 (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;
}
```
2. **基本片段着色器 (colourFragment.glsl)**:
```glsl
#version 330 core
in Vertex {
vec4 colour;
} IN;
out vec4 fragColour;
void main(void) {
fragColour = IN.colour;
}
```
### 总结
通过上述代码片段,你可以构建一个完整的OpenGL程序来绘制一个彩色三角形。确保所有文件路径正确无误,并且所有的依赖项(如NCLGL库)已正确安装。运行程序后,你应该能看到一个彩色的三角形显示在窗口中。
阅读全文