OpenGl纹理贴图

news/2025/2/11 6:19:05/

给图形赋予颜色时,采用纹理贴图的方式。
每个顶点关联一个纹理坐标(Texture Coordinate),然后在图形的其他片段上进行片段插值(Fragment Interpolation)
顶点坐标如下:
float vertices[] = {
// positions // colors // texture coords
0.2f, 0.2f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top right
0.2f, -0.2f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom right
-0.2f, -0.2f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom left
-0.2f, 0.2f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left
};
unsigned int indices[] = { // note that we start from 0!
0, 1, 3, // first triangle
1, 2, 3 // second triangle
};
initializeGL()函数代码:

	initializeOpenGLFunctions();//创建VBO和VAO对象,并赋予IDglGenVertexArrays(1, &VAO);glGenBuffers(1, &VBO);//绑定VBO和VAO对象glBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER, VBO);//为当前绑定到target的缓冲区对象创建一个新的数据存储。//如果data不是NULL,则使用来自此指针的数据初始化数据存储glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//告知显卡如何解析缓冲里的属性值glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0);//开启VAO管理的第一个属性值glEnableVertexAttribArray(0);glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float)));glEnableVertexAttribArray(1);glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float)));glEnableVertexAttribArray(2);glBindBuffer(GL_ARRAY_BUFFER, 0);bool success;shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex, "shaders/shapes.vert");shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment, "shaders/shapes.frag");success = shaderProgram.link();if (!success)qDebug() << "ERR:" << shaderProgram.log();// glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);glGenBuffers(1, &EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);textureWall = new QOpenGLTexture(QImage("images/wall.jpg").mirrored());shaderProgram.bind();shaderProgram.setUniformValue("textureWall", 0);glBindVertexArray(0);

paintGL()函数:

	glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);shaderProgram.bind();glBindVertexArray(VAO);textureWall->bind(0);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, NULL);

在这里插入图片描述


http://www.ppmy.cn/news/769275.html

相关文章

微信公众号聊天室 私聊功能演示

下图是俩功能, 收到消息后, 可有微信推送提醒 1. 点击头像和用户私聊 2. 点击顶部联系管理菜单, 主动与客服管理私聊 效果图预览

百度贴吧私信收不到的解决办法

有很多吧友发信息给我&#xff0c;但我回复你们时根本发不出去&#xff0c;提示对方设置了隐身&#xff0c;因为你们设置了“不接收信息”&#xff0c;记住&#xff0c;要按下图设置才可以接收到的 1、打开贴吧&#xff0c;点击右上角的消息-查看私信 2、点击右上角的设置-接收…

有谁知道怎么回事吗,私聊

基于卷积神经网络的交通标志识别技术研究

JAVA Netty实现聊天室+私聊功能

功能介绍 使用Netty框架实现聊天室功能&#xff0c;服务器可监控客户端上下限状态&#xff0c;消息转发。同时实现了点对点私聊功能。技术点我都在代码中做了备注&#xff0c;这里不再重复写了。希望能给想学习netty的同学一点参考。 服务器代码 服务器入口代码 package ni…

百度贴吧中的匿名回复,根本不是匿名,完全可以看到用户的全部IP。

参照&#xff1a;http://tieba.baidu.com/p/1306922851?pid15736688596&cid0#15736688596 就算用户有自己的ID也一样&#xff0c;也可以看到用户的IP&#xff01; 百度贴吧中的BUG&#xff08;也许是当时程序员自己故意这么写的&#xff01;&#xff09; <div class&qu…

Java聊天室——实现多人聊天、私聊、群聊

客户端 package project.java; //客户端 //输入、输出流分别为处于一个线程import java.io.IOException; import java.io.PrintStream; import java.net.Socket; import java.util.Scanner;class OutToServer2 implements Runnable{private Socket client;public OutToServer2…

如何搭建公共聊天室

搭建公共聊天室 一、聊天室介绍 本聊天室主要运用了udp协议&#xff0c;应用于局域网范围之内&#xff0c;可以支持多个处于同一个局域网的主机在局域网内相互传递消息。本聊天室由一个服务器端和若干个客户端组成&#xff0c;由一台主机打开服务器端&#xff0c;其他主机通过…