gpt4 book ai didi

ios - 顶点的数量应该等于 texCoords 的数量吗?

转载 作者:行者123 更新时间:2023-11-29 04:06:57 26 4
gpt4 key购买 nike

我的顶点着色器:

attribute vec4 vertexPosition;
attribute vec2 vertexTexCoord;

varying vec2 texCoord;

uniform mat4 modelViewProjectionMatrix;

void main()
{
gl_Position = modelViewProjectionMatrix * vertexPosition;
texCoord = vertexTexCoord;
}

我的fragmentShder:

precision mediump float;
varying vec2 texCoord;

uniform sampler2D texSampler2D;

void main()
{
gl_FragColor = texture2D(texSampler2D, texCoord);
}

初始化着色器:

 if (shader2D == nil) {
shader2D = [[Shader2D alloc] init];
shader2D.shaderProgramID = [ShaderUtils compileShaders:vertexShader2d :fragmentShader2d];
if (0 < shader2D.shaderProgramID) {
shader2D.vertexHandle = glGetAttribLocation(shader2D.shaderProgramID, "vertexPosition");
shader2D.textureCoordHandle = glGetAttribLocation(shader2D.shaderProgramID, "vertexTexCoord");
shader2D.mvpMatrixHandle = glGetUniformLocation(shader2D.shaderProgramID, "modelViewProjectionMatrix");
shader2D.texSampler2DHandle = glGetUniformLocation(shader2D.shaderProgramID,"texSampler2D");
}
else {
NSLog(@"Could not initialise shader2D");
}
}
return shader2D;

渲染:

GLKMatrix4 mvpMatrix;
mvpMatrix = [self position: position];
mvpMatrix = GLKMatrix4Multiply([QCARutils getInstance].projectionMatrix, mvpMatrix);
glUseProgram(shader.shaderProgramID);
glVertexAttribPointer(shader.vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)vertices);
glVertexAttribPointer(shader.textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)texCoords);
glEnableVertexAttribArray(shader.vertexHandle);
glEnableVertexAttribArray(shader.textureCoordHandle);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, [texture textureID]);
glUniformMatrix4fv(shader.mvpMatrixHandle, 1, GL_FALSE, (const GLfloat*)&mvpMatrix);
glUniform1i(shader.texSampler2DHandle, 0);
glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, (const GLvoid*)indices);
glDisableVertexAttribArray(shader.vertexHandle);
glDisableVertexAttribArray(shader.textureCoordHandle);

当一个纹理坐标对应一个且只有一个顶点坐标时,它似乎可以正常工作(texCoords == Number of vertices)

我的问题:openGL 是否将纹理坐标分配给一个且仅一个顶点?也就是说,当纹理坐标和顶点坐标不是一一对应时,渲染结果会是什么呢?

最佳答案

是的,顶点和 texCoord 之间需要存在一一对应关系——所有沿着 OpenGL 管道传递的信息都是针对每个顶点的,因此每个法线和每个 texCoord 都必须有一个顶点。

但是请注意,您可以(并且经常需要)为空间中的同一点拥有多个 texCoords、法线或其他每顶点数据:例如如果您将纹理贴图包裹在球体周围,则矩形纹理末端相交处将会出现“接缝”。在这些点上,您需要有多个顶点占据同一点。

关于ios - 顶点的数量应该等于 texCoords 的数量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15037810/

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