相关疑难解决方法(0)

OpenGL中的着色器是什么?我们需要它们是什么?

我不是母语是英语,当我试图通过openGL的维基和教程www.learnopengl.com得到的,它永远不会结束的直觉概念如何整部作品可以理解的.有人可以用更抽象的方式向我解释它是如何工作的吗?什么是顶点着色器和片段着色器以及我们将它们用于什么?

opengl shader

18
推荐指数
2
解决办法
1万
查看次数

OpenGL(ES) - 视锥体和正交之间有什么区别?

当我使用相同参数的每一个时,我注意到的唯一区别是"相机"与物体的距离.这里有什么区别,哪个主要是2D游戏?

graphics android opengl-es

8
推荐指数
1
解决办法
9614
查看次数

OpenGL ES无法正常工作

我有一个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)

iphone opengl-es objective-c

7
推荐指数
1
解决办法
1308
查看次数

从像素到NDC的转换

假设我的屏幕是(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,将它们发送到顶点着色器旁边.我被建议使用正交投影,但我不知道如何正确创建它,你可以看到我的顶点着色器我不使用任何投影矩阵.谢谢 !

这是一个类似于我的主题,但不是很清楚:

- 转换为NDC,计算并转换回世界空间

编辑:

我按照公式创建了我的正交投影矩阵但似乎没有出现,这是我继续进行的方式:

public static Matrix4f glOrtho(float left, float right, float bottom, …
Run Code Online (Sandbox Code Playgroud)

opengl lwjgl

0
推荐指数
1
解决办法
1921
查看次数

标签 统计

opengl ×2

opengl-es ×2

android ×1

graphics ×1

iphone ×1

lwjgl ×1

objective-c ×1

shader ×1