gpt4 book ai didi

opengl - 纹理由两个三角形组成的正方形的正确方法?

转载 作者:行者123 更新时间:2023-12-04 15:22:58 26 4
gpt4 key购买 nike

我使用 OpenGL 4.1 和 GLSL 410。我正在尝试使用以下坐标对我制作的正方形进行纹理化:

float points[] = {
-0.5, 0.5,
-0.5, -0.5,
0.5, -0.5,
-0.5, 0.5,
0.5, -0.5,
0.5, 0.5
};

我画正方形是这样的:
glDrawArrays (GL_TRIANGLES, 0, 6);

从我读过的所有教程中,作者使用元素缓冲区来绘制正方形或只有四个顶点。这意味着我读过的所有教程都有与每个顶点对齐的纹理坐标。对我来说,我使用了 6 个顶点,所以我不确定如何排列纹理坐标。

像这样的坐标对我的情况是否有效:
float texcoords[] = {
0.0, 1.0,
0.0, 0.0,
1.0, 0.0,
0.0, 1.0,
1.0, 0.0,
1.0, 1.0
};

我读了很多书,但还没有遇到过像我这样使用六个顶点的人。

我的纹理坐标是否有效,如果没有,提出纹理坐标的最佳方法是什么。

最佳答案

是的,这会奏效。您已将正方形分成 2 个三角形并将 tex 坐标映射到三角形的顶点。你的结果是什么?

看到这个 question .代码使用一个数组作为顶点(尽管每个顶点都有 xyz 值)和另一个数组用于纹理坐标。

定义顶点属性时需要小心。

例如。使用 2 个缓冲区设置顶点数据

glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);

glGenBuffers(1, &texbuffer);
glBindBuffer(GL_ARRAY_BUFFER, texbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(texcoords), texcoords, GL_STATIC_DRAW);

glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);

glVertexAttribPointer(0, // attribute 0
2, // 2 floats per vertex
GL_FLOAT, // type
GL_FALSE, // normalized?
0, // stride -> tightly packed so make it zero
0); // array buffer offset

glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, texbuffer);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, NULL);

glDrawArrays(GL_TRIANGLES, 0, 6);

要加载纹理( 更新 并设置采样器,请参阅评论)
glGenTextures(1, &tex);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex);
GLuint TextureID = glGetUniformLocation(programID, "texture");
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data);

顶点着色器
#version 410 core

layout (location = 0) in vec3 position;
layout (location = 1) in vec2 texcoord;
out vec2 texture_coordinates;
uniform mat4 MVP;

void main() {
gl_Position = position;
texture_coordinates = texcoord;
}

片段着色器
in vec2 texture_coordinates;
uniform sampler2D texture;
out vec4 colour;

void main() {
colour = texture2D(basic_texture, texture_coordinates);
}

关于opengl - 纹理由两个三角形组成的正方形的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20938653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com