欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > opengl创建柱面和鱼眼重展uv

opengl创建柱面和鱼眼重展uv

2025/9/2 0:03:17 来源:https://blog.csdn.net/qianbo042311/article/details/141053914  浏览:    关键词:opengl创建柱面和鱼眼重展uv

专业软件

先看一下专业软件
可以拉取很多的uv点
在这里插入图片描述

以下是使用 OpenGL 创建不规则面片并指定 UV 的一般步骤:
1 顶点数据准备
2 定义面片的顶点坐标。这些顶点构成了面片的形状。
3 为每个顶点指定对应的纹理坐标(UV)。
4 创建顶点缓冲区对象(VBO)
5 将顶点数据和 UV 数据存储在 VBO 中。
6 顶点数组对象(VAO)设置
7 绑定 VAO 并配置顶点属性指针,指定顶点位置和 UV 的布局。
8 绘制面片
使用合适的绘制命令(如 glDrawArrays 或 glDrawElements )来绘制面片。

show me the code

下面是示例代码

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>// 顶点数据
float vertices[] = {// 位置              // UV-0.5f, -0.5f, 0.0f,  0.0f, 0.0f,0.5f, -0.5f, 0.0f,  1.0f, 0.0f,0.5f,  0.5f, 0.0f,  1.0f, 1.0f,-0.5f,  0.5f, 0.0f,  0.0f, 1.0f
};// 索引数据(用于指定三角形的连接顺序)
unsigned int indices[] = {0, 1, 2,0, 2, 3
};void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)glfwSetWindowShouldClose(window, GL_TRUE);
}int main()
{// 初始化 GLFWif (!glfwInit()){std::cerr << "Failed to initialize GLFW" << std::endl;return -1;}// 创建窗口GLFWwindow* window = glfwCreateWindow(800, 600, "Irregular Patch", NULL, NULL);if (!window){std::cerr << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);// 初始化 GLEWif (glewInit()!= GLEW_OK){std::cerr << "Failed to initialize GLEW" << std::endl;return -1;}glfwSetKeyCallback(window, key_callback);// 创建顶点缓冲区对象(VBO)和顶点数组对象(VAO)unsigned int VBO, VAO, EBO;glGenVertexArrays(1, &VAO);glGenBuffers(1, &VBO);glGenBuffers(1, &EBO);// 绑定 VAOglBindVertexArray(VAO);// 绑定 VBO 并上传顶点数据glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);// 绑定 EBO 并上传索引数据glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);// 设置顶点属性指针glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0);glEnableVertexAttribArray(0);glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));glEnableVertexAttribArray(1);// 解绑 VAOglBindVertexArray(0);// 渲染循环while (!glfwWindowShouldClose(window)){// 清除颜色缓冲区glClear(GL_COLOR_BUFFER_BIT);// 绑定 VAO 并绘制glBindVertexArray(VAO);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);// 交换缓冲区并检查事件glfwSwapBuffers(window);glfwPollEvents();}// 清理资源glDeleteVertexArrays(1, &VAO);glDeleteBuffers(1, &VBO);glDeleteBuffers(1, &EBO);glfwTerminate();return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词