OpenGL——画一个填充的三角形

5 篇文章 0 订阅

在这里插入图片描述

1. vertShader.glsl(顶点着色器代码):

#version 460

void
main (void)
{
	if (gl_VertexID == 0)
		gl_Position = vec4 (0.25, -0.25, 0.0, 1.0);
	else if (gl_VertexID == 1)
		gl_Position = vec4 (-0.25, -0.25, 0.0, 1.0);
	else
		gl_Position = vec4 (0.25, 0.25, 0.0, 1.0);
}

2. Utils.h(读取着色器代码)

Utils.h

#pragma once

#include <fstream>
#include <iostream>
#include <string>

class Utils {
public:

	using string   = std::string;
	using ifstream = std::ifstream;

	static string readShaderSource (const char *filePath)
	{
		string content;

		ifstream fileStream (filePath, std::ios::in);

		string line = "";

		while (!fileStream.eof()) {
			std::getline (fileStream, line);
			content.append (line += "\n");
		}
		fileStream.close();
		return content;
	}
};

3. main函数

需要注意的是,glDrawArrays (GL_TRIANGLES, 0, 3);中指定的类型是三角形GL_TRIANGLES

#include "Utils.h"

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>

using namespace std;

constexpr int numVAOs = 1;

GLuint renderingProgram;
GLuint vao[numVAOs];

GLuint
createShaderProgram ()
{
	Utils::string vShaderString = Utils::readShaderSource ("vertShader.glsl");
	const char *vshaderSource	= vShaderString.c_str();

	const char *fshaderSource = "#version 460 \n"
								"out vec4 color; \n"
								"void main(void) \n"
								"{ color = vec4(0.0, 0.0, 1.0, 1.0); }";

	GLuint vShader = glCreateShader (GL_VERTEX_SHADER);
	GLuint fShader = glCreateShader (GL_FRAGMENT_SHADER);

	glShaderSource (vShader, 1, &vshaderSource, NULL);
	glShaderSource (fShader, 1, &fshaderSource, NULL);
	glCompileShader (vShader);
	glCompileShader (fShader);

	GLuint vfProgram = glCreateProgram();
	glAttachShader (vfProgram, vShader);
	glAttachShader (vfProgram, fShader);
	glLinkProgram (vfProgram);

	return vfProgram;
}

void
display (GLFWwindow *window, double currTime)
{
	glUseProgram (renderingProgram);
	glPointSize (5.0);
	glDrawArrays (GL_TRIANGLES, 0, 3);
}

void
init (GLFWwindow *window)
{
	renderingProgram = createShaderProgram();
	glGenVertexArrays (numVAOs, vao);
	glBindVertexArray (vao[0]);
}

int
main (int argc, char *argv[])
{
	if (!glfwInit()) {
		return -1;
	}

	glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 4);
	glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 6);

	GLFWwindow *window = glfwCreateWindow (600, 600, "Chapter2 - program1", nullptr, nullptr);
	glfwMakeContextCurrent (window);

	int errorCode = glewInit();
	if (errorCode != GLEW_OK) {
		cerr << "Error: " << glewGetErrorString (errorCode) << endl;
		return -1;
	}
	glfwSwapInterval (1);

	init (window);

	while (!glfwWindowShouldClose (window)) {
		display (window, glfwGetTime());
		glfwSwapBuffers (window);
		glfwPollEvents();
	}

	glfwDestroyWindow (window);
	glfwTerminate();

	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Qt中使用OpenGLES一个三角形的步骤如下: 1. 创建一个新的Qt Quick项目。 2. 在项目文件夹中创建一个新的源文件,命名为“main.cpp”。 3. 在“main.cpp”文件中添加以下代码: ```c++ #include <QGuiApplication> #include <QOpenGLContext> #include <QOpenGLFunctions> #include <QQuickWindow> #include <QSurfaceFormat> class MyTriangleRenderer : public QObject, protected QOpenGLFunctions { Q_OBJECT public: explicit MyTriangleRenderer(QObject *parent = nullptr) : QObject(parent) { connect(window, &QQuickWindow::beforeRendering, this, &MyTriangleRenderer::paint, Qt::DirectConnection); } void setWindow(QQuickWindow *w) { window = w; } public slots: void paint() { initializeOpenGLFunctions(); // 设置OpenGL视口 glViewport(0, 0, window->width(), window->height()); // 设置OpenGL清除颜色 glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 清除OpenGL缓存 glClear(GL_COLOR_BUFFER_BIT); // 绘制三角形 glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.0f); glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(0.5f, -0.5f, 0.0f); glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(0.0f, 0.5f, 0.0f); glEnd(); // 交换OpenGL缓存 window->resetOpenGLState(); } private: QQuickWindow *window; }; int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); // 创建OpenGL窗口 QSurfaceFormat format; format.setVersion(2, 0); format.setProfile(QSurfaceFormat::CoreProfile); QQuickWindow window; window.setFormat(format); // 设置OpenGL渲染器 MyTriangleRenderer renderer; renderer.setWindow(&window); window.show(); renderer.paint(); return app.exec(); } #include "main.moc" ``` 4. 编译并运行你的Qt项目,你应该能够看到一个红绿蓝三角形。 这样,你就成功地在Qt中使用OpenGLES一个三角形
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

barbyQAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值