如何规范化OpenGL中的顶点数组?

时间:2018-04-13 11:09:32

标签: opengl vertex

我正在尝试在OpenGL窗口上绘制一个三角形。

我想要的是我指定三个点,OpenGL根据它绘制三角形,问题是,因为我必须将OpenGL坐标转换为标准化的屏幕坐标。

在标准化之后看起来像这样: -

Normalized OpenGL triangle

这里三个(X,Y)s 三角形点)将由用户使用三个向量指定。

但问题是顶点(示例图中显示的红点)是透视或默认的OpenGL坐标,但我想制作一个2D三角形,所以我不需要3D坐标来绘制它。

你能告诉我一种方法将顶点转换为标准化坐标(从 0.0到1.0或-1.0,在两个轴 0.0到 “屏幕的宽度或高度分别与轴” ,在两个轴上)

着色器的代码(用于三角形): -

:: Vertex Shader ::

#version 330 core

layout (location = 0) in vec3 position;

void main()
{
    gl_Position = vec4(position.x, position.y, position.z, 1.0);
}

:: Fragment Shader ::

#version 330 core

out vec4 color;

void main()
{
    color = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}

顶点数组的外观(示例代码): -

GLfloat x = 0;   // First X Point
GLfloat y = 0;   // First Y Point

GLfloat x1 = 10; // Second X Point
GLfloat y1 = 10; // Second Y Point

GLfloat x2 = 0;  // Third X Point
GLfloat y2 = 10; // Third Y Point

GLfloat vertices[] =
{
    2 * x  / WIDTH - 1, 2 * y  / HEIGHT - 1, 0.0f, // Left
    2 * x1 / WIDTH - 1, 2 * y1 / HEIGHT - 1, 0.0f, // Right
    2 * x2 / WIDTH - 1, 2 * y2 / HEIGHT - 1, 0.0f  // Top
};

0 个答案:

没有答案