我下载了一个显示带有一些纹理的正方形的项目。正方形目前位于屏幕底部附近,我想将其移动到中间。这是代码。
几何.h
#import "GLKit/GLKit.h"
#ifndef Geometry_h
#define Geometry_h
typedef struct {
float Position[3];
float Color[4];
float TexCoord[2];
float Normal[3];
} Vertex
typedef struct{
int x;
int y;
int z;
} Position;
extern const Vertex VerticesCube[24];
extern const GLubyte IndicesTrianglesCube[36];
#endif
这是几何中的代码.m
const Vertex VerticesCube[] = {
// Front
{{1, -1, 1}, {1, 0, 0, 1}, {0, 1}, {0, 0, 1}},
{{1, 1, 1}, {0, 1, 0, 1}, {0, 2.0/3.0}, {0, 0, 1}},
{{-1, 1, 1}, {0, 0, 1, 1}, {1.0/3.0, 2.0/3.0}, {0, 0, 1}},
{{-1, -1, 1}, {0, 0, 0, 1}, {1.0/3.0, 1}, {0, 0, 1}},
};
const GLubyte IndicesTrianglesCube[] =
{
// Front
0, 1, 2,
2, 3, 0,
}
此代码的哪一部分确定呈现对象在屏幕上的位置?
您发布的代码都与屏幕位置无关。
VerticesCube
指定任意 3D 空间中的立方体角。在您尚未发布的代码中的某处,投影转换(可能还包括视图和模型转换)将每个顶点映射到剪辑空间,而glViewport
调用(如果您使用 GLKView
,这可能是隐式完成的)将剪辑空间映射到屏幕/视图坐标。
重新排列屏幕上的内容可能涉及其中任何一个转换,而使用哪一个转换取决于对每个转换的理解以及它如何适应应用的更大上下文。
这是你从任何OpenGL教程的早期阶段得到的东西。这是一个不错的。