我正在尝试在OpenGL窗口上绘制一个三角形。
我想要的是我指定三个点,OpenGL根据它绘制三角形,问题是,因为我必须将OpenGL坐标转换为标准化的屏幕坐标。
在标准化之后看起来像这样: -
这里三个(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
};