我不是母语是英语,当我试图通过openGL的维基和教程www.learnopengl.com得到的,它永远不会结束的直觉概念如何整部作品可以理解的.有人可以用更抽象的方式向我解释它是如何工作的吗?什么是顶点着色器和片段着色器以及我们将它们用于什么?
当我使用相同参数的每一个时,我注意到的唯一区别是"相机"与物体的距离.这里有什么区别,哪个主要是2D游戏?
我有一个GLKView,几乎显示我想要的形状,但有一些东西仍然没有按预期工作.
3_______________________2
|\ /|
| \_ _ _ _ _ _ _ _ _ _/ |
| /4 5\ |
|/_____________________\|
0 1
Run Code Online (Sandbox Code Playgroud)
纹理映射正在正面工作,另外两个面孔并没有真正起作用,还有三角形缺乏.
当我使用颜色时,面看起来像所希望的那样,但是背面不会在由点4和5形成的边缘处连接(请看我上面提供的图).
我想(如果你从侧面看)这三个面形成一个等边三角形.
我已暂时注释掉代码的纹理映射部分,以便您可以测试它如果您愿意.
在这里我设置了我的视图(注意我的视图的尺寸.坐标系工作正常,没有摆弄低值.面部看起来很好,他们只是没有,正如我所说的在后面加入):
EAGLContext * context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
OpenGLShape *view = [[OpenGLShape alloc] initWithFrame:CGRectMake(0, 200, 320, 80) context:context];
view.delegate = view;
[view setupGL];
[self.view addSubview:view];
- (void)setupGL {
[EAGLContext setCurrentContext:self.myContext];
//glEnable(GL_CULL_FACE);
self.effect = [[GLKBaseEffect alloc] init];
BOOL useTexture = NO;
// Create default framebuffer object.
glGenFramebuffers(1, &defaultFrameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, …Run Code Online (Sandbox Code Playgroud) 假设我的屏幕是(800*600)并且我使用Triangle_Strip(在NDC中)使用以下顶点位置绘制了Quad(2D ):
float[] vertices = {-0.2f,0.2f,-0.2f,-0.2f,0.2f,0.2f,0.2f,-0.2f};
Run Code Online (Sandbox Code Playgroud)
我以这种方式设置了转换矩阵:
Vector2f position = new Vector2f(0,0);
Vector2f size = new Vector2f(1.0f,1.0f);
Matrix4f tranMatrix = new Matrix4f();
tranMatrix.setIdentity();
Matrix4f.translate(position, tranMatrix, tranMatrix);
Matrix4f.scale(new Vector3f(size.x, size.y, 1f), tranMatrix, tranMatrix);
Run Code Online (Sandbox Code Playgroud)
我的顶点着色器:
#version 150 core
in vec2 in_Position;
uniform mat4 transMatrix;
void main(void) {
gl_Position = transMatrix * vec4(in_Position,0,1.0);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我应该使用哪个公式来修改我的四边形的坐标转换(以像素为单位)?
例如 :
- 设置比例:(50px,50px)=>Vector2f(width,height)
- 设置位置:(100px,100px)=>Vector2f(x,y)
为了更好地理解,我将创建一个函数将我的像素数据转换为NDC,将它们发送到顶点着色器旁边.我被建议使用正交投影,但我不知道如何正确创建它,你可以看到我的顶点着色器我不使用任何投影矩阵.谢谢 !
这是一个类似于我的主题,但不是很清楚:
我按照公式创建了我的正交投影矩阵但似乎没有出现,这是我继续进行的方式:
public static Matrix4f glOrtho(float left, float right, float bottom, …Run Code Online (Sandbox Code Playgroud)