簡體   English   中英

Opengl 用於透視投影的頂點坐標

[英]Opengl vertex coordinates for perspective projection

我需要使用透視變換,但我不明白如何定義精靈的 model 坐標。 如果我使用正交投影,我可以將每個頂點的坐標定義為屏幕上的像素數。 但是使用透視投影我不能。

正交投影:

glm::ortho<GLfloat>(0.0f, screen_width, screen_height, 0.0f, 1.0f, -1.0f));

看法:

glm::perspective(glm::radians(45.f), (float)screen_width / (float)screen_height, 0.1f, 100.f);

頂點着色器:

#version 330 core

layout (std140) uniform Matrices
{
    mat4 ProjectionMatrix;
    mat4 ViewMatrix;
    mat4 ModelMatrix;
};

layout (location = 0) in vec2 position;
layout (location = 1) in vec2 inTexCoords;

out vec2 TextureCoords;

void main()
{
    TextureCoords = inTexCoords;
    gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * vec4(position, 1.f, 1.0);
}

例如

        vertices[1] = 0.f;
        vertices[8] = 0.f;
        vertices[12] = 0.f;
        vertices[13] = 0.f;

        for (GLuint i = 0; i < m_totSprites; ++i) {
            // Vertex pos
            vertices[0] = m_clips[i].w;
            vertices[4] = vertices[0];
            vertices[5] = m_clips[i].h;
            vertices[9] = vertices[5];

            // Texture pos
            vertices[2] = (m_clips[i].x + m_clips[i].w) / tw;
            vertices[3] = (m_clips[i].y + m_clips[i].h) / th;
            vertices[6] = (m_clips[i].x + m_clips[i].w) / tw;
            vertices[7] = m_clips[i].y / th;
            vertices[10] = m_clips[i].x / tw;
            vertices[11] = m_clips[i].y / th;
            vertices[14] = m_clips[i].x / tw;
            vertices[15] = (m_clips[i].y + m_clips[i].h) / th;

它適用於正交投影。 如何定義透視的頂點坐標?

model坐標在正交投影和透視中有什么不同? 為什么在第一種情況下很容易將頂點坐標設置為像素大小,但在所有透視示例中,它們都在 -0.5 到 0.5 之間標准化? 這是有必要的?

最初,我誤解了正交投影和透視投影之間的區別。 正如我現在所了解的那樣,最初在 NDC 中映射的所有頂點都用於透視投影。 然后他們使用 model 矩陣移動、縮放等。 像素完美渲染只能通過一定的深度或正交來實現。 我對帶有透視投影的 3D 沒有用處。

如果你有投影矩陣,你也需要一個視圖矩陣。
前有glm::lookAt()
我通常使用這個組合

glm::lookAt(glm::vec3(-1.2484,0.483,1.84384), glm::vec3(-0.3801, -0.4183,-3.15),glm::vec3( 0., 0.2,-00.))
glm::perspective(45., 1., 1.2, 300.) 
glm::mat4(1.)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM